From 314a9de931bf975a7c31c588212a8cb532b1ec27 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 2 Oct 2019 19:04:00 -0400 Subject: [PATCH 01/23] Update roctracer_kfd.h --- inc/roctracer_kfd.h | 65 ++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/inc/roctracer_kfd.h b/inc/roctracer_kfd.h index 34229ce96d..ead602c3de 100644 --- a/inc/roctracer_kfd.h +++ b/inc/roctracer_kfd.h @@ -129,31 +129,40 @@ template<> struct output_streamer { inline static std::ostream& put(std::ostream& out, HsaNodeProperties& v) { - roctracer::kfd_support::output_streamer::put(out,v.NumCPUCores); - roctracer::kfd_support::output_streamer::put(out,v.NumFComputeCores); - roctracer::kfd_support::output_streamer::put(out,v.NumMemoryBanks); - roctracer::kfd_support::output_streamer::put(out,v.NumCaches); - roctracer::kfd_support::output_streamer::put(out,v.NumIOLinks); - roctracer::kfd_support::output_streamer::put(out,v.CComputeIdLo); - roctracer::kfd_support::output_streamer::put(out,v.FComputeIdLo); - roctracer::kfd_support::output_streamer::put(out,v.Capability); - roctracer::kfd_support::output_streamer::put(out,v.MaxWavesPerSIMD); - roctracer::kfd_support::output_streamer::put(out,v.LDSSizeInKB); - roctracer::kfd_support::output_streamer::put(out,v.GDSSizeInKB); - roctracer::kfd_support::output_streamer::put(out,v.WaveFrontSize); - roctracer::kfd_support::output_streamer::put(out,v.NumShaderBanks); - roctracer::kfd_support::output_streamer::put(out,v.NumArrays); - roctracer::kfd_support::output_streamer::put(out,v.NumCUPerArray); - roctracer::kfd_support::output_streamer::put(out,v.NumSIMDPerCU); - roctracer::kfd_support::output_streamer::put(out,v.MaxSlotsScratchCU); - roctracer::kfd_support::output_streamer::put(out,v.EngineId); - roctracer::kfd_support::output_streamer::put(out,v.VendorId); - roctracer::kfd_support::output_streamer::put(out,v.DeviceId); - roctracer::kfd_support::output_streamer::put(out,v.LocationId); - roctracer::kfd_support::output_streamer::put(out,v.LocalMemSize); - roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzFCompute); - roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzCCompute); - roctracer::kfd_support::output_streamer::put(out,v.MarketingName[HSA_PUBLIC_NAME_SIZE]); + roctracer::kfd_support::output_streamer::put(out,v.NumCPUCores); + roctracer::kfd_support::output_streamer::put(out,v.NumFComputeCores); + roctracer::kfd_support::output_streamer::put(out,v.NumMemoryBanks); + roctracer::kfd_support::output_streamer::put(out,v.NumCaches); + roctracer::kfd_support::output_streamer::put(out,v.NumIOLinks); + roctracer::kfd_support::output_streamer::put(out,v.CComputeIdLo); + roctracer::kfd_support::output_streamer::put(out,v.FComputeIdLo); + roctracer::kfd_support::output_streamer<::HSA_CAPABILITY>::put(out,v.Capability); + roctracer::kfd_support::output_streamer::put(out,v.MaxWavesPerSIMD); + roctracer::kfd_support::output_streamer::put(out,v.LDSSizeInKB); + roctracer::kfd_support::output_streamer::put(out,v.GDSSizeInKB); + roctracer::kfd_support::output_streamer::put(out,v.WaveFrontSize); + roctracer::kfd_support::output_streamer::put(out,v.NumShaderBanks); + roctracer::kfd_support::output_streamer::put(out,v.NumArrays); + roctracer::kfd_support::output_streamer::put(out,v.NumCUPerArray); + roctracer::kfd_support::output_streamer::put(out,v.NumSIMDPerCU); + roctracer::kfd_support::output_streamer::put(out,v.MaxSlotsScratchCU); + roctracer::kfd_support::output_streamer<::HSA_ENGINE_ID>::put(out,v.EngineId); + roctracer::kfd_support::output_streamer::put(out,v.VendorId); + roctracer::kfd_support::output_streamer::put(out,v.DeviceId); + roctracer::kfd_support::output_streamer::put(out,v.LocationId); + roctracer::kfd_support::output_streamer::put(out,v.LocalMemSize); + roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzFCompute); + roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzCCompute); + roctracer::kfd_support::output_streamer::put(out,v.DrmRenderMinor); + roctracer::kfd_support::output_streamer::put(out,v.MarketingName); + roctracer::kfd_support::output_streamer::put(out,v.AMDName); + roctracer::kfd_support::output_streamer<::HSA_ENGINE_VERSION>::put(out,v.uCodeEngineVersions); + roctracer::kfd_support::output_streamer<::HSA_DEBUG_PROPERTIES>::put(out,v.DebugProperties); + roctracer::kfd_support::output_streamer::put(out,v.HiveID); + roctracer::kfd_support::output_streamer::put(out,v.NumSdmaEngines); + roctracer::kfd_support::output_streamer::put(out,v.NumSdmaXgmiEngines); + roctracer::kfd_support::output_streamer::put(out,v.NumGws); + roctracer::kfd_support::output_streamer::put(out,v.Reserved); return out; } }; @@ -208,7 +217,7 @@ struct output_streamer { roctracer::kfd_support::output_streamer::put(out,v.CacheAssociativity); roctracer::kfd_support::output_streamer::put(out,v.CacheLatency); roctracer::kfd_support::output_streamer::put(out,v.CacheType); - roctracer::kfd_support::output_streamer::put(out,v.SiblingMap[HSA_CPU_SIBLINGS]); + roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); return out; } }; @@ -216,7 +225,7 @@ template<> struct output_streamer { inline static std::ostream& put(std::ostream& out, HsaCComputeProperties& v) { - roctracer::kfd_support::output_streamer::put(out,v.SiblingMap[HSA_CPU_SIBLINGS]); + roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); return out; } }; @@ -429,7 +438,7 @@ struct output_streamer { roctracer::kfd_support::output_streamer::put(out,v.Data1); roctracer::kfd_support::output_streamer::put(out,v.Data2); roctracer::kfd_support::output_streamer::put(out,v.Data3); - roctracer::kfd_support::output_streamer::put(out,v.Data4[8]); + roctracer::kfd_support::output_streamer::put(out,v.Data4); return out; } }; From 971b442df87fcafbdd51721c44abdab1ec480a99 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 2 Oct 2019 19:25:37 -0400 Subject: [PATCH 02/23] Update Makefile --- test/MatrixTranspose_test/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/MatrixTranspose_test/Makefile b/test/MatrixTranspose_test/Makefile index e74d66b0d1..30c37ea992 100644 --- a/test/MatrixTranspose_test/Makefile +++ b/test/MatrixTranspose_test/Makefile @@ -23,7 +23,7 @@ EXECUTABLE=./MatrixTranspose all: clean $(EXECUTABLE) -CXXFLAGS =-g -I$(ROOT_PATH) -I$(ROOT_PATH)/inc -DLOCAL_BUILD=1 -DITERATIONS=$(ITERATIONS) +CXXFLAGS =-g -I$(ROOT_PATH) -I$(ROOT_PATH)/inc -I${CMAKE_PREFIX_PATH}/include -DLOCAL_BUILD=1 -DITERATIONS=$(ITERATIONS) CXX=$(HIPCC) $(EXECUTABLE): $(OBJECTS) From c14c073d3f1e1a867cbf1ed06a028003eac18172 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 2 Oct 2019 19:26:41 -0400 Subject: [PATCH 03/23] Update MatrixTranspose.cpp --- test/MatrixTranspose_test/MatrixTranspose.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/MatrixTranspose_test/MatrixTranspose.cpp b/test/MatrixTranspose_test/MatrixTranspose.cpp index 7ca24d0f0b..f0a3d58d3b 100644 --- a/test/MatrixTranspose_test/MatrixTranspose.cpp +++ b/test/MatrixTranspose_test/MatrixTranspose.cpp @@ -31,6 +31,10 @@ THE SOFTWARE. // roctx header file #include +// kfd header file +#include +#include + #ifndef ITERATIONS # define ITERATIONS 100 #endif @@ -203,6 +207,15 @@ void api_callback( fprintf(stdout, "ROCTX: \"%s\"\n", data->args.message); return; } + if (domain == ACTIVITY_DOMAIN_KFD_API) { + const kfd_api_data_t* data = reinterpret_cast(callback_data); + fprintf(stdout, "KFD: <%s id(%u)\tcorrelation_id(%lu) %s> \n", + roctracer_op_string(ACTIVITY_DOMAIN_KFD_API, cid, 0), + cid, + data->correlation_id, + (data->phase == ACTIVITY_API_PHASE_ENTER) ? "on-enter" : "on-exit"); + return; + } const hip_api_data_t* data = reinterpret_cast(callback_data); fprintf(stdout, "<%s id(%u)\tcorrelation_id(%lu) %s> ", @@ -263,7 +276,7 @@ void activity_callback(const char* begin, const char* end, void* arg) { record->begin_ns, record->end_ns ); - if (record->domain == ACTIVITY_DOMAIN_HIP_API) { + if (record->domain == ACTIVITY_DOMAIN_HIP_API or record->domain == ACTIVITY_DOMAIN_KFD_API) { fprintf(stdout, " process_id(%u) thread_id(%u)", record->process_id, record->thread_id From 9f304d364f66f4a8eaaa5e104e7dc8bedd3e26cd Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Thu, 3 Oct 2019 15:46:09 -0400 Subject: [PATCH 04/23] Update kfdap.py --- script/kfdap.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/script/kfdap.py b/script/kfdap.py index 4401de548f..eb4cb521bc 100755 --- a/script/kfdap.py +++ b/script/kfdap.py @@ -372,10 +372,11 @@ class API_DescrParser: self.content_h += 'struct kfd_api_data_t {\n' self.content_h += ' uint64_t correlation_id;\n' self.content_h += ' uint32_t phase;\n' - self.content_h += ' union {\n' - for ret_type in self.api_rettypes: - self.content_h += ' ' + ret_type + ' ' + ret_type + '_retval;\n' - self.content_h += ' };\n' + if len(self.api_rettypes) != 0: + self.content_h += ' union {\n' + for ret_type in self.api_rettypes: + self.content_h += ' ' + ret_type + ' ' + ret_type + '_retval;\n' + self.content_h += ' };\n' self.content_h += ' union {\n' return if call != '-': From af41d4ae2e6864686a2d60c6143443e70541e544 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Tue, 8 Oct 2019 16:38:03 -0400 Subject: [PATCH 05/23] Update roctracer_kfd.h --- inc/roctracer_kfd.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inc/roctracer_kfd.h b/inc/roctracer_kfd.h index ead602c3de..a06b75ff71 100644 --- a/inc/roctracer_kfd.h +++ b/inc/roctracer_kfd.h @@ -136,7 +136,7 @@ struct output_streamer { roctracer::kfd_support::output_streamer::put(out,v.NumIOLinks); roctracer::kfd_support::output_streamer::put(out,v.CComputeIdLo); roctracer::kfd_support::output_streamer::put(out,v.FComputeIdLo); - roctracer::kfd_support::output_streamer<::HSA_CAPABILITY>::put(out,v.Capability); + roctracer::kfd_support::output_streamer::put(out,v.Capability); roctracer::kfd_support::output_streamer::put(out,v.MaxWavesPerSIMD); roctracer::kfd_support::output_streamer::put(out,v.LDSSizeInKB); roctracer::kfd_support::output_streamer::put(out,v.GDSSizeInKB); @@ -146,7 +146,7 @@ struct output_streamer { roctracer::kfd_support::output_streamer::put(out,v.NumCUPerArray); roctracer::kfd_support::output_streamer::put(out,v.NumSIMDPerCU); roctracer::kfd_support::output_streamer::put(out,v.MaxSlotsScratchCU); - roctracer::kfd_support::output_streamer<::HSA_ENGINE_ID>::put(out,v.EngineId); + roctracer::kfd_support::output_streamer::put(out,v.EngineId); roctracer::kfd_support::output_streamer::put(out,v.VendorId); roctracer::kfd_support::output_streamer::put(out,v.DeviceId); roctracer::kfd_support::output_streamer::put(out,v.LocationId); @@ -156,8 +156,8 @@ struct output_streamer { roctracer::kfd_support::output_streamer::put(out,v.DrmRenderMinor); roctracer::kfd_support::output_streamer::put(out,v.MarketingName); roctracer::kfd_support::output_streamer::put(out,v.AMDName); - roctracer::kfd_support::output_streamer<::HSA_ENGINE_VERSION>::put(out,v.uCodeEngineVersions); - roctracer::kfd_support::output_streamer<::HSA_DEBUG_PROPERTIES>::put(out,v.DebugProperties); + roctracer::kfd_support::output_streamer::put(out,v.uCodeEngineVersions); + roctracer::kfd_support::output_streamer::put(out,v.DebugProperties); roctracer::kfd_support::output_streamer::put(out,v.HiveID); roctracer::kfd_support::output_streamer::put(out,v.NumSdmaEngines); roctracer::kfd_support::output_streamer::put(out,v.NumSdmaXgmiEngines); From 3e8f5f2058e205f4c5955d4c3f0494b264bf4df2 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 9 Oct 2019 13:50:55 -0400 Subject: [PATCH 06/23] Create genOstreamOps.py --- script/genOstreamOps.py | 206 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 script/genOstreamOps.py diff --git a/script/genOstreamOps.py b/script/genOstreamOps.py new file mode 100644 index 0000000000..b4effcab28 --- /dev/null +++ b/script/genOstreamOps.py @@ -0,0 +1,206 @@ +#!/usr/bin/python + +import os, sys, re +import CppHeaderParser +import argparse + +LICENSE = \ +'/*\n' + \ +'Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved.\n' + \ +'\n' + \ +'Permission is hereby granted, free of charge, to any person obtaining a copy\n' + \ +'of this software and associated documentation files (the "Software"), to deal\n' + \ +'in the Software without restriction, including without limitation the rights\n' + \ +'to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n' + \ +'copies of the Software, and to permit persons to whom the Software is\n' + \ +'furnished to do so, subject to the following conditions:\n' + \ +'\n' + \ +'The above copyright notice and this permission notice shall be included in\n' + \ +'all copies or substantial portions of the Software.\n' + \ +'\n' + \ +'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n' + \ +'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n' + \ +'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n' + \ +'AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n' + \ +'LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n' + \ +'OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n' + \ +'THE SOFTWARE.\n' + \ +'*/\n' + +HEADER = \ +'#ifndef INC_ROCTRACER_KFD_H_\n' + \ +'#define INC_ROCTRACER_KFD_H_\n' + \ +'#include \n' + \ +'#include \n' + \ +'\n' + \ +'#include \n' + \ +'\n' + \ +'#include "roctracer.h"\n' + \ +'#include "hsakmt.h"\n' + \ +'\n' + \ +'namespace roctracer {\n' + \ +'namespace kfd_support {\n' + \ +'template \n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, const T& v) { return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, bool v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint8_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint16_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint32_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint64_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, bool* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint8_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint16_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint32_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint64_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'\n' + +FOOTER = \ +'// end ostream ops for KFD\n' + \ +'};};\n' + \ +'\n' + \ +'#include \n' + \ +'\n' + \ +'#endif // INC_ROCTRACER_KFD_H_\n' + \ +' \n' + +rx_dict = { + 'struct_name': re.compile(r'typedef (?P.*)\n'), + 'field_type': re.compile(r'\s+name\[raw_type\]=(?P.*)\n'), + 'field_name': re.compile(r'\s+name\[name\]=(?P.*)\n'), + 'array_size_val': re.compile(r'\s+name\[array_size\]=(?P.*)\n'), +} + +def _parse_line(line): + + for key, rx in rx_dict.items(): + match = rx.search(line) + if match: + return key, match + return None, None + +def parse_file(infilepath,outfilepath): + f= open(outfilepath,"w+") + f.write("// automatically generated\n") + f.write(LICENSE) + f.write("/////////////////////////////////////////////////////////////////////////////") + f.write("\n") + f.write(HEADER) + f.write("// begin ostream ops for KFD\n") + + with open(infilepath, 'r') as file_object: + line = file_object.readline() + flag=0 + tmp_str="" + while line: + key, match = _parse_line(line) + if key == 'struct_name': + if tmp_str!="": + f.write(tmp_str+"\n") + tmp_str="" + if flag == 1: + f.write(" return out;\n") + f.write("}\n") + f.write("};\n") + flag=0 + struct_name = match.group('struct_name') + if ("anon" not in struct_name and "union" not in struct_name) or args['debug']: + f.write("template<>\n") + f.write("struct output_streamer<"+struct_name+"&> {\n") + f.write(" inline static std::ostream& put(std::ostream& out, "+struct_name+"& v)\n") + f.write("{\n") + flag=1; + if flag==1 and key == 'field_type': + field_type = match.group('field_type') + if field_type == "": + field_type="notype" + if flag==1 and key == 'array_size_val': + array_size_val = match.group('array_size_val') + tmp_str=tmp_str.replace(field_type,field_type+"["+array_size_val+"]") + f.write(tmp_str+"\n") + tmp_str="" + if flag==1 and key == 'field_name': + if tmp_str!="": + f.write(tmp_str+"\n") + tmp_str="" + field_name = match.group('field_name') + if field_name == "": + field_name="noname" + if (field_name!="noname" and field_type!="notype") or args['debug'] : + tmp_str=" roctracer::kfd_support::output_streamer<"+field_type+">::put(out,v."+field_name+")"+";"; + tmp_str=tmp_str.replace('<::', '<') + #f.write(tmp_str+"\n") + line = file_object.readline() + if tmp_str!="": + f.write(tmp_str+"\n") + tmp_str="" + if flag==1: + f.write(" return out;\n") + f.write("}\n") + f.write("};\n") + f.write(FOOTER) + f.close() + print ("File "+outfilepath+" has been generated.") + return + +def gen_cppheader_lut(infilepath): + try: + cppHeader = CppHeaderParser.CppHeader(infilepath) + except CppHeaderParser.CppParseError as e: + print(e) + sys.exit(1) + + f= open("/tmp/cppheader_lut.txt","w+") + for c in cppHeader.classes: + f.write("typedef %s\n"%(c)) + for l in range(len(cppHeader.classes[c]["properties"]["public"])): + for key in cppHeader.classes[c]["properties"]["public"][l].keys(): + f.write(" name[%s]=%s\n"%(key,cppHeader.classes[c]["properties"]["public"][l][key])) + f.close() + #print ("File /tmp/cppheader_lut.txt has been generated.") + return + + +parser = argparse.ArgumentParser(description='genOstreamOps.py: generates ostream operators for all typedefs in provided input file.') +parser.add_argument('-debug','--debug', help='Debug option for features not supported by CppHeaderParser', action='store_true') +requiredNamed=parser.add_argument_group('Required arguments') +requiredNamed.add_argument('-in','--in', help='Header file to be parsed', required=True) +requiredNamed.add_argument('-out','--out', help='Output file with ostream operators', required=True) +args = vars(parser.parse_args()) + +if __name__ == '__main__': + gen_cppheader_lut(args['in']) + parse_file("/tmp/cppheader_lut.txt",args['out']) + From c342215416ed452dba539796530da1aff00fe9b6 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 9 Oct 2019 15:27:43 -0400 Subject: [PATCH 07/23] Update CMakeLists.txt --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bf0fe6c06a..d0c5044c7d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,6 +18,7 @@ set ( KFD_LIB "kfdwrapper64" ) set ( KFD_LIB_SRC ${LIB_DIR}/kfd/kfd_wrapper.cpp ) +execute_process ( COMMAND sh -xc "${ROOT_DIR}/script/genOstreamOps.py -in ${HSA_KMT_INC_PATH}/hsakmttypes.h -out ${ROOT_DIR}/inc/roctracer_kfd.h" ) add_library ( ${KFD_LIB} SHARED ${KFD_LIB_SRC} ) target_include_directories ( ${KFD_LIB} PRIVATE ${LIB_DIR} ${ROOT_DIR} ${ROOT_DIR}/inc ${HSA_RUNTIME_INC_PATH} ${HSA_RUNTIME_HSA_INC_PATH} ${HSA_KMT_INC_PATH} ) target_link_libraries( ${KFD_LIB} PRIVATE c stdc++ ) From 14c933bedb1870e2da3c769305835564d4ba10c0 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 9 Oct 2019 15:28:59 -0400 Subject: [PATCH 08/23] Update genOstreamOps.py --- script/genOstreamOps.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/genOstreamOps.py b/script/genOstreamOps.py index b4effcab28..ea0fbacb95 100644 --- a/script/genOstreamOps.py +++ b/script/genOstreamOps.py @@ -98,7 +98,7 @@ FOOTER = \ rx_dict = { 'struct_name': re.compile(r'typedef (?P.*)\n'), - 'field_type': re.compile(r'\s+name\[raw_type\]=(?P.*)\n'), + 'field_type': re.compile(r'\s+name\[type\]=(?P.*)\n'), 'field_name': re.compile(r'\s+name\[name\]=(?P.*)\n'), 'array_size_val': re.compile(r'\s+name\[array_size\]=(?P.*)\n'), } @@ -151,7 +151,7 @@ def parse_file(infilepath,outfilepath): tmp_str=tmp_str.replace(field_type,field_type+"["+array_size_val+"]") f.write(tmp_str+"\n") tmp_str="" - if flag==1 and key == 'field_name': + if flag==1 and key == 'field_name' and "union" not in field_type: if tmp_str!="": f.write(tmp_str+"\n") tmp_str="" From 013cbe59db9d201fdd155858cbb6ba231b4d9597 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Thu, 10 Oct 2019 10:00:27 -0400 Subject: [PATCH 09/23] Create gen_ostream_ops.py --- script/gen_ostream_ops.py | 206 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 script/gen_ostream_ops.py diff --git a/script/gen_ostream_ops.py b/script/gen_ostream_ops.py new file mode 100644 index 0000000000..ea0fbacb95 --- /dev/null +++ b/script/gen_ostream_ops.py @@ -0,0 +1,206 @@ +#!/usr/bin/python + +import os, sys, re +import CppHeaderParser +import argparse + +LICENSE = \ +'/*\n' + \ +'Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved.\n' + \ +'\n' + \ +'Permission is hereby granted, free of charge, to any person obtaining a copy\n' + \ +'of this software and associated documentation files (the "Software"), to deal\n' + \ +'in the Software without restriction, including without limitation the rights\n' + \ +'to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n' + \ +'copies of the Software, and to permit persons to whom the Software is\n' + \ +'furnished to do so, subject to the following conditions:\n' + \ +'\n' + \ +'The above copyright notice and this permission notice shall be included in\n' + \ +'all copies or substantial portions of the Software.\n' + \ +'\n' + \ +'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n' + \ +'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n' + \ +'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n' + \ +'AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n' + \ +'LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n' + \ +'OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n' + \ +'THE SOFTWARE.\n' + \ +'*/\n' + +HEADER = \ +'#ifndef INC_ROCTRACER_KFD_H_\n' + \ +'#define INC_ROCTRACER_KFD_H_\n' + \ +'#include \n' + \ +'#include \n' + \ +'\n' + \ +'#include \n' + \ +'\n' + \ +'#include "roctracer.h"\n' + \ +'#include "hsakmt.h"\n' + \ +'\n' + \ +'namespace roctracer {\n' + \ +'namespace kfd_support {\n' + \ +'template \n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, const T& v) { return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, bool v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint8_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint16_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint32_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint64_t v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, bool* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint8_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint16_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint32_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'template<>\n' + \ +'struct output_streamer {\n' + \ +' inline static std::ostream& put(std::ostream& out, uint64_t* v) { out << std::hex << ""; return out; }\n' + \ +'};\n' + \ +'\n' + +FOOTER = \ +'// end ostream ops for KFD\n' + \ +'};};\n' + \ +'\n' + \ +'#include \n' + \ +'\n' + \ +'#endif // INC_ROCTRACER_KFD_H_\n' + \ +' \n' + +rx_dict = { + 'struct_name': re.compile(r'typedef (?P.*)\n'), + 'field_type': re.compile(r'\s+name\[type\]=(?P.*)\n'), + 'field_name': re.compile(r'\s+name\[name\]=(?P.*)\n'), + 'array_size_val': re.compile(r'\s+name\[array_size\]=(?P.*)\n'), +} + +def _parse_line(line): + + for key, rx in rx_dict.items(): + match = rx.search(line) + if match: + return key, match + return None, None + +def parse_file(infilepath,outfilepath): + f= open(outfilepath,"w+") + f.write("// automatically generated\n") + f.write(LICENSE) + f.write("/////////////////////////////////////////////////////////////////////////////") + f.write("\n") + f.write(HEADER) + f.write("// begin ostream ops for KFD\n") + + with open(infilepath, 'r') as file_object: + line = file_object.readline() + flag=0 + tmp_str="" + while line: + key, match = _parse_line(line) + if key == 'struct_name': + if tmp_str!="": + f.write(tmp_str+"\n") + tmp_str="" + if flag == 1: + f.write(" return out;\n") + f.write("}\n") + f.write("};\n") + flag=0 + struct_name = match.group('struct_name') + if ("anon" not in struct_name and "union" not in struct_name) or args['debug']: + f.write("template<>\n") + f.write("struct output_streamer<"+struct_name+"&> {\n") + f.write(" inline static std::ostream& put(std::ostream& out, "+struct_name+"& v)\n") + f.write("{\n") + flag=1; + if flag==1 and key == 'field_type': + field_type = match.group('field_type') + if field_type == "": + field_type="notype" + if flag==1 and key == 'array_size_val': + array_size_val = match.group('array_size_val') + tmp_str=tmp_str.replace(field_type,field_type+"["+array_size_val+"]") + f.write(tmp_str+"\n") + tmp_str="" + if flag==1 and key == 'field_name' and "union" not in field_type: + if tmp_str!="": + f.write(tmp_str+"\n") + tmp_str="" + field_name = match.group('field_name') + if field_name == "": + field_name="noname" + if (field_name!="noname" and field_type!="notype") or args['debug'] : + tmp_str=" roctracer::kfd_support::output_streamer<"+field_type+">::put(out,v."+field_name+")"+";"; + tmp_str=tmp_str.replace('<::', '<') + #f.write(tmp_str+"\n") + line = file_object.readline() + if tmp_str!="": + f.write(tmp_str+"\n") + tmp_str="" + if flag==1: + f.write(" return out;\n") + f.write("}\n") + f.write("};\n") + f.write(FOOTER) + f.close() + print ("File "+outfilepath+" has been generated.") + return + +def gen_cppheader_lut(infilepath): + try: + cppHeader = CppHeaderParser.CppHeader(infilepath) + except CppHeaderParser.CppParseError as e: + print(e) + sys.exit(1) + + f= open("/tmp/cppheader_lut.txt","w+") + for c in cppHeader.classes: + f.write("typedef %s\n"%(c)) + for l in range(len(cppHeader.classes[c]["properties"]["public"])): + for key in cppHeader.classes[c]["properties"]["public"][l].keys(): + f.write(" name[%s]=%s\n"%(key,cppHeader.classes[c]["properties"]["public"][l][key])) + f.close() + #print ("File /tmp/cppheader_lut.txt has been generated.") + return + + +parser = argparse.ArgumentParser(description='genOstreamOps.py: generates ostream operators for all typedefs in provided input file.') +parser.add_argument('-debug','--debug', help='Debug option for features not supported by CppHeaderParser', action='store_true') +requiredNamed=parser.add_argument_group('Required arguments') +requiredNamed.add_argument('-in','--in', help='Header file to be parsed', required=True) +requiredNamed.add_argument('-out','--out', help='Output file with ostream operators', required=True) +args = vars(parser.parse_args()) + +if __name__ == '__main__': + gen_cppheader_lut(args['in']) + parse_file("/tmp/cppheader_lut.txt",args['out']) + From 9b1bcd5b019f62c70b04a1a8bcf084ee75c9fa7f Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Thu, 10 Oct 2019 10:00:56 -0400 Subject: [PATCH 10/23] Delete genOstreamOps.py --- script/genOstreamOps.py | 206 ---------------------------------------- 1 file changed, 206 deletions(-) delete mode 100644 script/genOstreamOps.py diff --git a/script/genOstreamOps.py b/script/genOstreamOps.py deleted file mode 100644 index ea0fbacb95..0000000000 --- a/script/genOstreamOps.py +++ /dev/null @@ -1,206 +0,0 @@ -#!/usr/bin/python - -import os, sys, re -import CppHeaderParser -import argparse - -LICENSE = \ -'/*\n' + \ -'Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved.\n' + \ -'\n' + \ -'Permission is hereby granted, free of charge, to any person obtaining a copy\n' + \ -'of this software and associated documentation files (the "Software"), to deal\n' + \ -'in the Software without restriction, including without limitation the rights\n' + \ -'to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n' + \ -'copies of the Software, and to permit persons to whom the Software is\n' + \ -'furnished to do so, subject to the following conditions:\n' + \ -'\n' + \ -'The above copyright notice and this permission notice shall be included in\n' + \ -'all copies or substantial portions of the Software.\n' + \ -'\n' + \ -'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n' + \ -'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n' + \ -'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n' + \ -'AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n' + \ -'LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n' + \ -'OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n' + \ -'THE SOFTWARE.\n' + \ -'*/\n' - -HEADER = \ -'#ifndef INC_ROCTRACER_KFD_H_\n' + \ -'#define INC_ROCTRACER_KFD_H_\n' + \ -'#include \n' + \ -'#include \n' + \ -'\n' + \ -'#include \n' + \ -'\n' + \ -'#include "roctracer.h"\n' + \ -'#include "hsakmt.h"\n' + \ -'\n' + \ -'namespace roctracer {\n' + \ -'namespace kfd_support {\n' + \ -'template \n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, const T& v) { return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, bool v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint8_t v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint16_t v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint32_t v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint64_t v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, bool* v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint8_t* v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint16_t* v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint32_t* v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'template<>\n' + \ -'struct output_streamer {\n' + \ -' inline static std::ostream& put(std::ostream& out, uint64_t* v) { out << std::hex << ""; return out; }\n' + \ -'};\n' + \ -'\n' - -FOOTER = \ -'// end ostream ops for KFD\n' + \ -'};};\n' + \ -'\n' + \ -'#include \n' + \ -'\n' + \ -'#endif // INC_ROCTRACER_KFD_H_\n' + \ -' \n' - -rx_dict = { - 'struct_name': re.compile(r'typedef (?P.*)\n'), - 'field_type': re.compile(r'\s+name\[type\]=(?P.*)\n'), - 'field_name': re.compile(r'\s+name\[name\]=(?P.*)\n'), - 'array_size_val': re.compile(r'\s+name\[array_size\]=(?P.*)\n'), -} - -def _parse_line(line): - - for key, rx in rx_dict.items(): - match = rx.search(line) - if match: - return key, match - return None, None - -def parse_file(infilepath,outfilepath): - f= open(outfilepath,"w+") - f.write("// automatically generated\n") - f.write(LICENSE) - f.write("/////////////////////////////////////////////////////////////////////////////") - f.write("\n") - f.write(HEADER) - f.write("// begin ostream ops for KFD\n") - - with open(infilepath, 'r') as file_object: - line = file_object.readline() - flag=0 - tmp_str="" - while line: - key, match = _parse_line(line) - if key == 'struct_name': - if tmp_str!="": - f.write(tmp_str+"\n") - tmp_str="" - if flag == 1: - f.write(" return out;\n") - f.write("}\n") - f.write("};\n") - flag=0 - struct_name = match.group('struct_name') - if ("anon" not in struct_name and "union" not in struct_name) or args['debug']: - f.write("template<>\n") - f.write("struct output_streamer<"+struct_name+"&> {\n") - f.write(" inline static std::ostream& put(std::ostream& out, "+struct_name+"& v)\n") - f.write("{\n") - flag=1; - if flag==1 and key == 'field_type': - field_type = match.group('field_type') - if field_type == "": - field_type="notype" - if flag==1 and key == 'array_size_val': - array_size_val = match.group('array_size_val') - tmp_str=tmp_str.replace(field_type,field_type+"["+array_size_val+"]") - f.write(tmp_str+"\n") - tmp_str="" - if flag==1 and key == 'field_name' and "union" not in field_type: - if tmp_str!="": - f.write(tmp_str+"\n") - tmp_str="" - field_name = match.group('field_name') - if field_name == "": - field_name="noname" - if (field_name!="noname" and field_type!="notype") or args['debug'] : - tmp_str=" roctracer::kfd_support::output_streamer<"+field_type+">::put(out,v."+field_name+")"+";"; - tmp_str=tmp_str.replace('<::', '<') - #f.write(tmp_str+"\n") - line = file_object.readline() - if tmp_str!="": - f.write(tmp_str+"\n") - tmp_str="" - if flag==1: - f.write(" return out;\n") - f.write("}\n") - f.write("};\n") - f.write(FOOTER) - f.close() - print ("File "+outfilepath+" has been generated.") - return - -def gen_cppheader_lut(infilepath): - try: - cppHeader = CppHeaderParser.CppHeader(infilepath) - except CppHeaderParser.CppParseError as e: - print(e) - sys.exit(1) - - f= open("/tmp/cppheader_lut.txt","w+") - for c in cppHeader.classes: - f.write("typedef %s\n"%(c)) - for l in range(len(cppHeader.classes[c]["properties"]["public"])): - for key in cppHeader.classes[c]["properties"]["public"][l].keys(): - f.write(" name[%s]=%s\n"%(key,cppHeader.classes[c]["properties"]["public"][l][key])) - f.close() - #print ("File /tmp/cppheader_lut.txt has been generated.") - return - - -parser = argparse.ArgumentParser(description='genOstreamOps.py: generates ostream operators for all typedefs in provided input file.') -parser.add_argument('-debug','--debug', help='Debug option for features not supported by CppHeaderParser', action='store_true') -requiredNamed=parser.add_argument_group('Required arguments') -requiredNamed.add_argument('-in','--in', help='Header file to be parsed', required=True) -requiredNamed.add_argument('-out','--out', help='Output file with ostream operators', required=True) -args = vars(parser.parse_args()) - -if __name__ == '__main__': - gen_cppheader_lut(args['in']) - parse_file("/tmp/cppheader_lut.txt",args['out']) - From 30c43513781eee6591f0961951810f63e5447ac7 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 16 Oct 2019 16:40:40 -0400 Subject: [PATCH 11/23] Update kfdap.py Fix for handling any api return types. --- script/kfdap.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/script/kfdap.py b/script/kfdap.py index eb4cb521bc..d822cf2752 100755 --- a/script/kfdap.py +++ b/script/kfdap.py @@ -114,22 +114,26 @@ class API_TableParser: record = ""; cumulate = 0; self.full_fct = {} + rettype = "" + prev_line = "" for line in self.inp.readlines(): line = self.norm_line(line) line = self.fix_comment_line(line) if cumulate == 1: record += " " + line; else: record = line; - if self.is_start(line): cumulate = 1; continue; + if self.is_start(line): rettype = prev_line.strip(); cumulate = 1; prev_line = line; continue; if self.is_end(line): record = self.remove_ret_line(record); cumulate = 0; active = 1; - else: continue; + else: prev_line = line; continue; if active != 0: m = self.is_entry(record) if m: - mycall_full = "void " + m.group(1) + ' (' + m.group(2) + ')' + mycall_full = rettype + " " + m.group(1) + ' (' + m.group(2) + ')' mycall = m.group(1) self.full_fct[mycall] = mycall_full self.array.append(mycall) + rettype = ""; + prev_line = line ############################################################# # API declaration parser clas @@ -262,7 +266,6 @@ class API_DescrParser: # Return types self.api_rettypes.add(api_data[call]['ret']) - self.api_rettypes.discard('void') self.api_data = api_data self.ns_calls = ns_calls @@ -375,7 +378,8 @@ class API_DescrParser: if len(self.api_rettypes) != 0: self.content_h += ' union {\n' for ret_type in self.api_rettypes: - self.content_h += ' ' + ret_type + ' ' + ret_type + '_retval;\n' + if ret_type != 'void': + self.content_h += ' ' + ret_type + ' ' + ret_type + '_retval;\n' self.content_h += ' };\n' self.content_h += ' union {\n' return @@ -522,13 +526,13 @@ class API_DescrParser: self.content_cpp += '}\n\n'; if call != '-': - self.content_cpp += 'PUBLIC_API HSAKMT_STATUS ' + call + '(' + struct['args'] + ') { roctracer::kfd_support::' + call + '_callback(' + self.content_cpp += 'PUBLIC_API ' + struct['ret'] + " " + call + '(' + struct['args'] + ') { return roctracer::kfd_support::' + call + '_callback(' for i in range(0,len(struct['alst'])): if i == (len(struct['alst'])-1): - self.content_cpp += struct['alst'][i].replace("[]","") + self.content_cpp += struct['alst'][i].replace("[]","") else: self.content_cpp += struct['alst'][i].replace("[]","") + ', ' - self.content_cpp += '); return HSAKMT_STATUS_SUCCESS;} \n' + self.content_cpp += ');} \n' ############################################################# # main From 5ae9aa14926e8e6fa6fb4e145160e11d06b21a2c Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Tue, 22 Oct 2019 15:18:45 -0400 Subject: [PATCH 12/23] Update roctracer_kfd.h --- inc/roctracer_kfd.h | 606 +++++++++++++++++++++++--------------------- 1 file changed, 324 insertions(+), 282 deletions(-) diff --git a/inc/roctracer_kfd.h b/inc/roctracer_kfd.h index a06b75ff71..22cb46e2c9 100644 --- a/inc/roctracer_kfd.h +++ b/inc/roctracer_kfd.h @@ -1,3 +1,4 @@ +// automatically generated /* Copyright (c) 2018 Advanced Micro Devices, Inc. All rights reserved. @@ -19,7 +20,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - +///////////////////////////////////////////////////////////////////////////// #ifndef INC_ROCTRACER_KFD_H_ #define INC_ROCTRACER_KFD_H_ #include @@ -78,50 +79,139 @@ struct output_streamer { inline static std::ostream& put(std::ostream& out, uint64_t* v) { out << std::hex << ""; return out; } }; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, hsa_queue_t* v) { out << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, hsa_queue_t** v) { out << ""; return out; } -}; // begin ostream ops for KFD template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaQueueReport& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.VMID); + roctracer::kfd_support::output_streamer::put(out,v.QueueSize); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HSA_DEBUG_PROPERTIES& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.Value); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaNodeChange& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.Flags); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaDeviceStateChange& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.NodeId); + roctracer::kfd_support::output_streamer::put(out,v.Device); + roctracer::kfd_support::output_streamer::put(out,v.Flags); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HSA_LINKPROPERTY& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.LinkProperty); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaDbgWaveMsgAMDGen2& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.Value); + roctracer::kfd_support::output_streamer::put(out,v.Reserved2); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaMemoryRange& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.SizeInBytes); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaCounterProperties& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.NumBlocks); + roctracer::kfd_support::output_streamer::put(out,v.NumConcurrent); + roctracer::kfd_support::output_streamer::put(out,v.Blocks); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HSA_ENGINE_VERSION& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.Value); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaCComputeProperties& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); + return out; +} +}; +template<> struct output_streamer { inline static std::ostream& put(std::ostream& out, HsaVersionInfo& v) { - roctracer::kfd_support::output_streamer::put(out,v.KernelInterfaceMajorVersion); - roctracer::kfd_support::output_streamer::put(out,v.KernelInterfaceMinorVersion); + roctracer::kfd_support::output_streamer::put(out,v.KernelInterfaceMajorVersion); + roctracer::kfd_support::output_streamer::put(out,v.KernelInterfaceMinorVersion); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaSystemProperties& v) { - roctracer::kfd_support::output_streamer::put(out,v.NumNodes); - roctracer::kfd_support::output_streamer::put(out,v.PlatformOem); - roctracer::kfd_support::output_streamer::put(out,v.PlatformId); - roctracer::kfd_support::output_streamer::put(out,v.PlatformRev); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_CAPABILITY& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaCacheType& v) { - roctracer::kfd_support::output_streamer::put(out,v.Value); - roctracer::kfd_support::output_streamer::put(out,v.ui32.HotPluggable); - roctracer::kfd_support::output_streamer::put(out,v.ui32.HSAMMUPresent); - roctracer::kfd_support::output_streamer::put(out,v.ui32.SharedWithGraphics); - roctracer::kfd_support::output_streamer::put(out,v.ui32.QueueSizePowerOfTwo); - roctracer::kfd_support::output_streamer::put(out,v.ui32.QueueSize32bit); - roctracer::kfd_support::output_streamer::put(out,v.ui32.QueueIdleEvent); - roctracer::kfd_support::output_streamer::put(out,v.ui32.VALimit); - roctracer::kfd_support::output_streamer::put(out,v.ui32.WatchPointsSupported); - roctracer::kfd_support::output_streamer::put(out,v.ui32.WatchPointsTotalBits); - roctracer::kfd_support::output_streamer::put(out,v.ui32.DoorbellType); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Reserved); + roctracer::kfd_support::output_streamer::put(out,v.Value); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HSA_MEMORYPROPERTY& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.MemoryProperty); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaClockCounters& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.GPUClockCounter); + roctracer::kfd_support::output_streamer::put(out,v.CPUClockCounter); + roctracer::kfd_support::output_streamer::put(out,v.SystemClockCounter); + roctracer::kfd_support::output_streamer::put(out,v.SystemClockFrequencyHz); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaCounter& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.Type); + roctracer::kfd_support::output_streamer::put(out,v.CounterId); + roctracer::kfd_support::output_streamer::put(out,v.CounterSizeInBits); + roctracer::kfd_support::output_streamer::put(out,v.CounterMask); + roctracer::kfd_support::output_streamer::put(out,v.Flags); + roctracer::kfd_support::output_streamer::put(out,v.BlockIndex); return out; } }; @@ -154,8 +244,8 @@ struct output_streamer { roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzFCompute); roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzCCompute); roctracer::kfd_support::output_streamer::put(out,v.DrmRenderMinor); - roctracer::kfd_support::output_streamer::put(out,v.MarketingName); - roctracer::kfd_support::output_streamer::put(out,v.AMDName); + roctracer::kfd_support::output_streamer::put(out,v.MarketingName); + roctracer::kfd_support::output_streamer::put(out,v.AMDName); roctracer::kfd_support::output_streamer::put(out,v.uCodeEngineVersions); roctracer::kfd_support::output_streamer::put(out,v.DebugProperties); roctracer::kfd_support::output_streamer::put(out,v.HiveID); @@ -167,13 +257,13 @@ struct output_streamer { } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_MEMORYPROPERTY& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaSystemProperties& v) { - roctracer::kfd_support::output_streamer::put(out,v.MemoryProperty); - roctracer::kfd_support::output_streamer::put(out,v.ui32.HotPluggable); - roctracer::kfd_support::output_streamer::put(out,v.ui32.NonVolatile); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Reserved); + roctracer::kfd_support::output_streamer::put(out,v.NumNodes); + roctracer::kfd_support::output_streamer::put(out,v.PlatformOem); + roctracer::kfd_support::output_streamer::put(out,v.PlatformId); + roctracer::kfd_support::output_streamer::put(out,v.PlatformRev); return out; } }; @@ -181,64 +271,44 @@ template<> struct output_streamer { inline static std::ostream& put(std::ostream& out, HsaMemoryProperties& v) { - roctracer::kfd_support::output_streamer::put(out,v.HeapType); - roctracer::kfd_support::output_streamer::put(out,v.SizeInBytes); - roctracer::kfd_support::output_streamer::put(out,v.ui32.SizeInBytesLow); - roctracer::kfd_support::output_streamer::put(out,v.ui32.SizeInBytesHigh); + roctracer::kfd_support::output_streamer::put(out,v.HeapType); roctracer::kfd_support::output_streamer::put(out,v.Flags); - roctracer::kfd_support::output_streamer::put(out,v.Width); - roctracer::kfd_support::output_streamer::put(out,v.MemoryClockMax); - roctracer::kfd_support::output_streamer::put(out,v.VirtualBaseAddress); + roctracer::kfd_support::output_streamer::put(out,v.Width); + roctracer::kfd_support::output_streamer::put(out,v.MemoryClockMax); + roctracer::kfd_support::output_streamer::put(out,v.VirtualBaseAddress); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCacheType& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HSA_ENGINE_ID& v) { - roctracer::kfd_support::output_streamer::put(out,v.Value); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Data); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Instruction); - roctracer::kfd_support::output_streamer::put(out,v.ui32.CPU); - roctracer::kfd_support::output_streamer::put(out,v.ui32.HSACU); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Reserved); + roctracer::kfd_support::output_streamer::put(out,v.Value); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCacheProperties& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HSA_CAPABILITY& v) { - roctracer::kfd_support::output_streamer::put(out,v.ProcessorIdLow); - roctracer::kfd_support::output_streamer::put(out,v.CacheLevel); - roctracer::kfd_support::output_streamer::put(out,v.CacheSize); - roctracer::kfd_support::output_streamer::put(out,v.CacheLineSize); - roctracer::kfd_support::output_streamer::put(out,v.CacheLinesPerTag); - roctracer::kfd_support::output_streamer::put(out,v.CacheAssociativity); - roctracer::kfd_support::output_streamer::put(out,v.CacheLatency); - roctracer::kfd_support::output_streamer::put(out,v.CacheType); - roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); + roctracer::kfd_support::output_streamer::put(out,v.Value); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCComputeProperties& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaQueueInfo& v) { - roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_LINKPROPERTY& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.LinkProperty); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Override); - roctracer::kfd_support::output_streamer::put(out,v.ui32.NonCoherent); - roctracer::kfd_support::output_streamer::put(out,v.ui32.NoAtomics32bit); - roctracer::kfd_support::output_streamer::put(out,v.ui32.NoAtomics64bit); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Reserved); + roctracer::kfd_support::output_streamer::put(out,v.QueueDetailError); + roctracer::kfd_support::output_streamer::put(out,v.QueueTypeExtended); + roctracer::kfd_support::output_streamer::put(out,v.NumCUAssigned); + roctracer::kfd_support::output_streamer::put(out,v.CUMaskInfo); + roctracer::kfd_support::output_streamer::put(out,v.UserContextSaveArea); + roctracer::kfd_support::output_streamer::put(out,v.SaveAreaSizeInBytes); + roctracer::kfd_support::output_streamer::put(out,v.ControlStackTop); + roctracer::kfd_support::output_streamer::put(out,v.ControlStackUsedInBytes); + roctracer::kfd_support::output_streamer::put(out,v.SaveAreaHeader); + roctracer::kfd_support::output_streamer::put(out,v.Reserved2); return out; } }; @@ -246,74 +316,74 @@ template<> struct output_streamer { inline static std::ostream& put(std::ostream& out, HsaIoLinkProperties& v) { - roctracer::kfd_support::output_streamer::put(out,v.IoLinkType); - roctracer::kfd_support::output_streamer::put(out,v.VersionMajor); - roctracer::kfd_support::output_streamer::put(out,v.VersionMinor); - roctracer::kfd_support::output_streamer::put(out,v.NodeFrom); - roctracer::kfd_support::output_streamer::put(out,v.NodeTo); - roctracer::kfd_support::output_streamer::put(out,v.Weight); - roctracer::kfd_support::output_streamer::put(out,v.MinimumLatency); - roctracer::kfd_support::output_streamer::put(out,v.MaximumLatency); - roctracer::kfd_support::output_streamer::put(out,v.MinimumBandwidth); - roctracer::kfd_support::output_streamer::put(out,v.MaximumBandwidth); - roctracer::kfd_support::output_streamer::put(out,v.RecTransferSize); - roctracer::kfd_support::output_streamer::put(out,v.Flags); + roctracer::kfd_support::output_streamer::put(out,v.IoLinkType); + roctracer::kfd_support::output_streamer::put(out,v.VersionMajor); + roctracer::kfd_support::output_streamer::put(out,v.VersionMinor); + roctracer::kfd_support::output_streamer::put(out,v.NodeFrom); + roctracer::kfd_support::output_streamer::put(out,v.NodeTo); + roctracer::kfd_support::output_streamer::put(out,v.Weight); + roctracer::kfd_support::output_streamer::put(out,v.MinimumLatency); + roctracer::kfd_support::output_streamer::put(out,v.MaximumLatency); + roctracer::kfd_support::output_streamer::put(out,v.MinimumBandwidth); + roctracer::kfd_support::output_streamer::put(out,v.MaximumBandwidth); + roctracer::kfd_support::output_streamer::put(out,v.RecTransferSize); + roctracer::kfd_support::output_streamer::put(out,v.Flags); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaMemFlags& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaMemoryAccessFault& v) { - roctracer::kfd_support::output_streamer::put(out,v.ui32.NonPaged); - roctracer::kfd_support::output_streamer::put(out,v.ui32.CachePolicy); - roctracer::kfd_support::output_streamer::put(out,v.ui32.ReadOnly); - roctracer::kfd_support::output_streamer::put(out,v.ui32.PageSize); - roctracer::kfd_support::output_streamer::put(out,v.ui32.HostAccess); - roctracer::kfd_support::output_streamer::put(out,v.ui32.NoSubstitute); - roctracer::kfd_support::output_streamer::put(out,v.ui32.GDSMemory); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Scratch); - roctracer::kfd_support::output_streamer::put(out,v.ui32.AtomicAccessFull); - roctracer::kfd_support::output_streamer::put(out,v.ui32.AtomicAccessPartial); - roctracer::kfd_support::output_streamer::put(out,v.ui32.ExecuteAccess); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Reserved); - roctracer::kfd_support::output_streamer::put(out,v.Value); + roctracer::kfd_support::output_streamer::put(out,v.NodeId); + roctracer::kfd_support::output_streamer::put(out,v.VirtualAddress); + roctracer::kfd_support::output_streamer::put(out,v.Failure); + roctracer::kfd_support::output_streamer::put(out,v.Flags); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaQueueResource& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaEvent& v) { - roctracer::kfd_support::output_streamer::put(out,v.QueueId); - roctracer::kfd_support::output_streamer::put(out,*(v.Queue_DoorBell)); - roctracer::kfd_support::output_streamer::put(out,*(v.Queue_DoorBell_aql)); - roctracer::kfd_support::output_streamer::put(out,v.QueueDoorBell); - roctracer::kfd_support::output_streamer::put(out,*(v.Queue_write_ptr)); - roctracer::kfd_support::output_streamer::put(out,*(v.Queue_write_ptr_aql)); - roctracer::kfd_support::output_streamer::put(out,v.QueueWptrValue); - roctracer::kfd_support::output_streamer::put(out,*(v.Queue_read_ptr)); - roctracer::kfd_support::output_streamer::put(out,*(v.Queue_read_ptr_aql)); - roctracer::kfd_support::output_streamer::put(out,v.QueueRptrValue); + roctracer::kfd_support::output_streamer::put(out,v.EventId); + roctracer::kfd_support::output_streamer::put(out,v.EventData); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaQueueReport& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaMemMapFlags& v) { - roctracer::kfd_support::output_streamer::put(out,v.VMID); - out << ""; - roctracer::kfd_support::output_streamer::put(out,v.QueueSize); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaDbgWaveMsgAMDGen2& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaDbgWaveMessage& v) { - roctracer::kfd_support::output_streamer::put(out, v.Value); - roctracer::kfd_support::output_streamer::put(out, v.Reserved2); + roctracer::kfd_support::output_streamer::put(out,v.DbgWaveMsg); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaGraphicsResourceInfo& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.SizeInBytes); + roctracer::kfd_support::output_streamer::put(out,v.MetadataSizeInBytes); + roctracer::kfd_support::output_streamer::put(out,v.Reserved); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaEventData& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.EventType); + roctracer::kfd_support::output_streamer::put(out,v.HWData1); + roctracer::kfd_support::output_streamer::put(out,v.HWData2); + roctracer::kfd_support::output_streamer::put(out,v.HWData3); return out; } }; @@ -326,145 +396,18 @@ struct output_streamer { } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaDbgWaveMessage& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaPointerInfo& v) { - out << ""; - roctracer::kfd_support::output_streamer::put(out,v.DbgWaveMsg); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaSyncVar& v) -{ - out << ""; - roctracer::kfd_support::output_streamer::put(out,v.SyncVar.UserDataPtrValue); - roctracer::kfd_support::output_streamer::put(out,v.SyncVarSize); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaNodeChange& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Flags); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaDeviceStateChange& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NodeId); - roctracer::kfd_support::output_streamer::put(out,v.Device); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaAccessAttributeFailure& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NotPresent); - roctracer::kfd_support::output_streamer::put(out,v.ReadOnly); - roctracer::kfd_support::output_streamer::put(out,v.NoExecute); - roctracer::kfd_support::output_streamer::put(out,v.GpuAccess); - roctracer::kfd_support::output_streamer::put(out,v.ECC); - roctracer::kfd_support::output_streamer::put(out,v.Reserved); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaMemoryAccessFault& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NodeId); - roctracer::kfd_support::output_streamer::put(out,v.VirtualAddress); - roctracer::kfd_support::output_streamer::put(out,v. Failure); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaEventData& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.EventType); - roctracer::kfd_support::output_streamer::put(out,v.EventData.SyncVar); - roctracer::kfd_support::output_streamer::put(out,v.EventData.NodeChangeState); - roctracer::kfd_support::output_streamer::put(out,v.EventData.DeviceState); - roctracer::kfd_support::output_streamer::put(out,v.EventData.MemoryAccessFault); - roctracer::kfd_support::output_streamer::put(out,v.HWData1); - roctracer::kfd_support::output_streamer::put(out,v.HWData2); - roctracer::kfd_support::output_streamer::put(out,v.HWData3); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaEventDescriptor& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.EventType); - roctracer::kfd_support::output_streamer::put(out,v.NodeId); - roctracer::kfd_support::output_streamer::put(out,v.SyncVar); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaEvent& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.EventId); - roctracer::kfd_support::output_streamer::put(out,v.EventData); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaClockCounters& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.GPUClockCounter); - roctracer::kfd_support::output_streamer::put(out,v.CPUClockCounter); - roctracer::kfd_support::output_streamer::put(out,v.SystemClockCounter); - roctracer::kfd_support::output_streamer::put(out,v.SystemClockFrequencyHz); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_UUID& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Data1); - roctracer::kfd_support::output_streamer::put(out,v.Data2); - roctracer::kfd_support::output_streamer::put(out,v.Data3); - roctracer::kfd_support::output_streamer::put(out,v.Data4); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCounterFlags& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.ui32.Global); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Resettable); - roctracer::kfd_support::output_streamer::put(out,v.ui32.ReadOnly); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Stream); - roctracer::kfd_support::output_streamer::put(out,v.ui32.Reserved); - roctracer::kfd_support::output_streamer::put(out, v.Value); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCounter& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Type); - roctracer::kfd_support::output_streamer::put(out,v.CounterId); - roctracer::kfd_support::output_streamer::put(out,v.CounterSizeInBits); - roctracer::kfd_support::output_streamer::put(out,v.CounterMask); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - roctracer::kfd_support::output_streamer::put(out,v.BlockIndex); + roctracer::kfd_support::output_streamer::put(out,v.Type); + roctracer::kfd_support::output_streamer::put(out,v.Node); + roctracer::kfd_support::output_streamer::put(out,v.MemFlags); + roctracer::kfd_support::output_streamer::put(out,v.GPUAddress); + roctracer::kfd_support::output_streamer::put(out,v.SizeInBytes); + roctracer::kfd_support::output_streamer::put(out,v.NRegisteredNodes); + roctracer::kfd_support::output_streamer::put(out,v.NMappedNodes); + roctracer::kfd_support::output_streamer::put(out,v.RegisteredNodes); + roctracer::kfd_support::output_streamer::put(out,v.MappedNodes); return out; } }; @@ -473,19 +416,94 @@ struct output_streamer { inline static std::ostream& put(std::ostream& out, HsaCounterBlockProperties& v) { roctracer::kfd_support::output_streamer::put(out,v.BlockId); - roctracer::kfd_support::output_streamer::put(out,v.NumCounters); - roctracer::kfd_support::output_streamer::put(out,v.NumConcurrent); - roctracer::kfd_support::output_streamer::put(out,v.Counters[1]); + roctracer::kfd_support::output_streamer::put(out,v.NumCounters); + roctracer::kfd_support::output_streamer::put(out,v.NumConcurrent); + roctracer::kfd_support::output_streamer::put(out,v.Counters); return out; } }; template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCounterProperties& v) +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaEventDescriptor& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.EventType); + roctracer::kfd_support::output_streamer::put(out,v.NodeId); + roctracer::kfd_support::output_streamer::put(out,v.SyncVar); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaAccessAttributeFailure& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.NotPresent); + roctracer::kfd_support::output_streamer::put(out,v.ReadOnly); + roctracer::kfd_support::output_streamer::put(out,v.NoExecute); + roctracer::kfd_support::output_streamer::put(out,v.GpuAccess); + roctracer::kfd_support::output_streamer::put(out,v.ECC); + roctracer::kfd_support::output_streamer::put(out,v.Imprecise); + roctracer::kfd_support::output_streamer::put(out,v.ErrorType); + roctracer::kfd_support::output_streamer::put(out,v.Reserved); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HSA_UUID& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.Data1); + roctracer::kfd_support::output_streamer::put(out,v.Data2); + roctracer::kfd_support::output_streamer::put(out,v.Data3); + roctracer::kfd_support::output_streamer::put(out,v.Data4); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaQueueResource& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.QueueId); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaCounterFlags& v) +{ + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaUserContextSaveAreaHeader& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.ControlStackOffset); + roctracer::kfd_support::output_streamer::put(out,v.ControlStackSize); + roctracer::kfd_support::output_streamer::put(out,v.WaveStateOffset); + roctracer::kfd_support::output_streamer::put(out,v.WaveStateSize); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaCacheProperties& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.ProcessorIdLow); + roctracer::kfd_support::output_streamer::put(out,v.CacheLevel); + roctracer::kfd_support::output_streamer::put(out,v.CacheSize); + roctracer::kfd_support::output_streamer::put(out,v.CacheLineSize); + roctracer::kfd_support::output_streamer::put(out,v.CacheLinesPerTag); + roctracer::kfd_support::output_streamer::put(out,v.CacheAssociativity); + roctracer::kfd_support::output_streamer::put(out,v.CacheLatency); + roctracer::kfd_support::output_streamer::put(out,v.CacheType); + roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaMemFlags& v) { - roctracer::kfd_support::output_streamer::put(out,v.NumBlocks); - roctracer::kfd_support::output_streamer::put(out,v.NumConcurrent); - roctracer::kfd_support::output_streamer::put(out,v.Blocks[1]); return out; } }; @@ -493,9 +511,32 @@ template<> struct output_streamer { inline static std::ostream& put(std::ostream& out, HsaPmcTraceRoot& v) { - roctracer::kfd_support::output_streamer::put(out,v.TraceBufferMinSizeBytes); - roctracer::kfd_support::output_streamer::put(out,v.NumberOfPasses); - roctracer::kfd_support::output_streamer::put(out,v.TraceId); + roctracer::kfd_support::output_streamer::put(out,v.TraceBufferMinSizeBytes); + roctracer::kfd_support::output_streamer::put(out,v.NumberOfPasses); + roctracer::kfd_support::output_streamer::put(out,v.TraceId); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaGpuTileConfig& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.TileConfig); + roctracer::kfd_support::output_streamer::put(out,v.MacroTileConfig); + roctracer::kfd_support::output_streamer::put(out,v.NumTileConfigs); + roctracer::kfd_support::output_streamer::put(out,v.NumMacroTileConfigs); + roctracer::kfd_support::output_streamer::put(out,v.GbAddrConfig); + roctracer::kfd_support::output_streamer::put(out,v.NumBanks); + roctracer::kfd_support::output_streamer::put(out,v.NumRanks); + roctracer::kfd_support::output_streamer::put(out,v.Reserved); + return out; +} +}; +template<> +struct output_streamer { + inline static std::ostream& put(std::ostream& out, HsaSyncVar& v) +{ + roctracer::kfd_support::output_streamer::put(out,v.SyncVarSize); return out; } }; @@ -505,3 +546,4 @@ struct output_streamer { #include #endif // INC_ROCTRACER_KFD_H_ + From 93e03300473f767ba29cbeebcfad15532941d888 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Tue, 22 Oct 2019 15:22:59 -0400 Subject: [PATCH 13/23] Update gen_ostream_ops.py --- script/gen_ostream_ops.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/script/gen_ostream_ops.py b/script/gen_ostream_ops.py index ea0fbacb95..a8ea77fe85 100644 --- a/script/gen_ostream_ops.py +++ b/script/gen_ostream_ops.py @@ -158,7 +158,7 @@ def parse_file(infilepath,outfilepath): field_name = match.group('field_name') if field_name == "": field_name="noname" - if (field_name!="noname" and field_type!="notype") or args['debug'] : + if (field_name!="noname" and field_type!="notype" and not re.search("void",field_type)) or args['debug'] : tmp_str=" roctracer::kfd_support::output_streamer<"+field_type+">::put(out,v."+field_name+")"+";"; tmp_str=tmp_str.replace('<::', '<') #f.write(tmp_str+"\n") @@ -204,3 +204,4 @@ if __name__ == '__main__': gen_cppheader_lut(args['in']) parse_file("/tmp/cppheader_lut.txt",args['out']) + From 34fbe199771923fcc1bcf34f13a9f8c558b321d4 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 30 Oct 2019 17:01:39 -0400 Subject: [PATCH 14/23] Update gen_ostream_ops.py --- script/gen_ostream_ops.py | 68 +++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/script/gen_ostream_ops.py b/script/gen_ostream_ops.py index a8ea77fe85..eaf39277ab 100644 --- a/script/gen_ostream_ops.py +++ b/script/gen_ostream_ops.py @@ -28,18 +28,6 @@ LICENSE = \ '*/\n' HEADER = \ -'#ifndef INC_ROCTRACER_KFD_H_\n' + \ -'#define INC_ROCTRACER_KFD_H_\n' + \ -'#include \n' + \ -'#include \n' + \ -'\n' + \ -'#include \n' + \ -'\n' + \ -'#include "roctracer.h"\n' + \ -'#include "hsakmt.h"\n' + \ -'\n' + \ -'namespace roctracer {\n' + \ -'namespace kfd_support {\n' + \ 'template \n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, const T& v) { return out; }\n' + \ @@ -87,18 +75,10 @@ HEADER = \ '};\n' + \ '\n' -FOOTER = \ -'// end ostream ops for KFD\n' + \ -'};};\n' + \ -'\n' + \ -'#include \n' + \ -'\n' + \ -'#endif // INC_ROCTRACER_KFD_H_\n' + \ -' \n' - rx_dict = { 'struct_name': re.compile(r'typedef (?P.*)\n'), 'field_type': re.compile(r'\s+name\[type\]=(?P.*)\n'), + 'field_rawtype': re.compile(r'\s+name\[raw_type\]=(?P.*)\n'), 'field_name': re.compile(r'\s+name\[name\]=(?P.*)\n'), 'array_size_val': re.compile(r'\s+name\[array_size\]=(?P.*)\n'), } @@ -112,13 +92,23 @@ def _parse_line(line): return None, None def parse_file(infilepath,outfilepath): - f= open(outfilepath,"w+") + f = open(outfilepath,"w+") f.write("// automatically generated\n") f.write(LICENSE) - f.write("/////////////////////////////////////////////////////////////////////////////") f.write("\n") + HEADER_S = \ + '#ifndef INC_KFD_OSTREAM_OPS_H_\n' + \ + '#define INC_KFD_OSTREAM_OPS_H_\n' + \ + '#include \n' + \ + '\n' + \ + '#include "roctracer.h"\n' + \ + '#include "hsakmt.h"\n' + f.write(HEADER_S) + f.write('\n') + f.write('namespace roctracer {\n') + f.write('namespace kfd_support {\n') + f.write('// begin ostream ops for KFD \n') f.write(HEADER) - f.write("// begin ostream ops for KFD\n") with open(infilepath, 'r') as file_object: line = file_object.readline() @@ -127,6 +117,9 @@ def parse_file(infilepath,outfilepath): while line: key, match = _parse_line(line) if key == 'struct_name': + field_name="" + field_type="" + field_rawtype="" if tmp_str!="": f.write(tmp_str+"\n") tmp_str="" @@ -146,6 +139,10 @@ def parse_file(infilepath,outfilepath): field_type = match.group('field_type') if field_type == "": field_type="notype" + if flag==1 and key == 'field_rawtype': + field_rawtype = match.group('field_rawtype') + if field_rawtype == "": + field_rawtype="notype" if flag==1 and key == 'array_size_val': array_size_val = match.group('array_size_val') tmp_str=tmp_str.replace(field_type,field_type+"["+array_size_val+"]") @@ -158,10 +155,11 @@ def parse_file(infilepath,outfilepath): field_name = match.group('field_name') if field_name == "": field_name="noname" + if field_name!="" and field_type=="": + field_type=field_rawtype if (field_name!="noname" and field_type!="notype" and not re.search("void",field_type)) or args['debug'] : - tmp_str=" roctracer::kfd_support::output_streamer<"+field_type+">::put(out,v."+field_name+")"+";"; + tmp_str=" roctracer::kfd_support::output_streamer<"+field_type+">::put(out,v."+field_name+")"+";"; tmp_str=tmp_str.replace('<::', '<') - #f.write(tmp_str+"\n") line = file_object.readline() if tmp_str!="": f.write(tmp_str+"\n") @@ -170,9 +168,19 @@ def parse_file(infilepath,outfilepath): f.write(" return out;\n") f.write("}\n") f.write("};\n") + FOOTER = \ + '// end ostream ops for KFD \n' + FOOTER += '};};\n' + \ + '\n' + \ + '#endif // INC_KFD_OSTREAM_OPS_H_\n' + \ + ' \n' + FOOTER2 = '\n\n' + \ + '#endif // INC_BASIC_OSTREAM_OPS_H_\n' + \ + ' \n' f.write(FOOTER) f.close() print ("File "+outfilepath+" has been generated.") + return def gen_cppheader_lut(infilepath): @@ -182,26 +190,24 @@ def gen_cppheader_lut(infilepath): print(e) sys.exit(1) - f= open("/tmp/cppheader_lut.txt","w+") + f= open("cppheader_lut.txt","w+") for c in cppHeader.classes: f.write("typedef %s\n"%(c)) for l in range(len(cppHeader.classes[c]["properties"]["public"])): for key in cppHeader.classes[c]["properties"]["public"][l].keys(): f.write(" name[%s]=%s\n"%(key,cppHeader.classes[c]["properties"]["public"][l][key])) f.close() - #print ("File /tmp/cppheader_lut.txt has been generated.") return - parser = argparse.ArgumentParser(description='genOstreamOps.py: generates ostream operators for all typedefs in provided input file.') parser.add_argument('-debug','--debug', help='Debug option for features not supported by CppHeaderParser', action='store_true') requiredNamed=parser.add_argument_group('Required arguments') requiredNamed.add_argument('-in','--in', help='Header file to be parsed', required=True) requiredNamed.add_argument('-out','--out', help='Output file with ostream operators', required=True) + args = vars(parser.parse_args()) if __name__ == '__main__': gen_cppheader_lut(args['in']) - parse_file("/tmp/cppheader_lut.txt",args['out']) - + parse_file("cppheader_lut.txt",args['out']) From b9e7638ef984efec0c5746652d914b650506b85c Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 30 Oct 2019 17:16:54 -0400 Subject: [PATCH 15/23] Update roctracer_kfd.h --- inc/roctracer_kfd.h | 517 +------------------------------------------- 1 file changed, 2 insertions(+), 515 deletions(-) diff --git a/inc/roctracer_kfd.h b/inc/roctracer_kfd.h index 22cb46e2c9..b9a7431b1b 100644 --- a/inc/roctracer_kfd.h +++ b/inc/roctracer_kfd.h @@ -24,525 +24,12 @@ THE SOFTWARE. #ifndef INC_ROCTRACER_KFD_H_ #define INC_ROCTRACER_KFD_H_ #include -#include -#include +//#include #include "roctracer.h" #include "hsakmt.h" - -namespace roctracer { -namespace kfd_support { -template -struct output_streamer { - inline static std::ostream& put(std::ostream& out, const T& v) { return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, bool v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint8_t v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint16_t v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint32_t v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint64_t v) { out << std::hex << ""; return out; } -}; - -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, bool* v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint8_t* v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint16_t* v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint32_t* v) { out << std::hex << ""; return out; } -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, uint64_t* v) { out << std::hex << ""; return out; } -}; - -// begin ostream ops for KFD -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaQueueReport& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.VMID); - roctracer::kfd_support::output_streamer::put(out,v.QueueSize); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_DEBUG_PROPERTIES& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Value); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaNodeChange& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Flags); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaDeviceStateChange& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NodeId); - roctracer::kfd_support::output_streamer::put(out,v.Device); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_LINKPROPERTY& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.LinkProperty); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaDbgWaveMsgAMDGen2& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Value); - roctracer::kfd_support::output_streamer::put(out,v.Reserved2); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaMemoryRange& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.SizeInBytes); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCounterProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NumBlocks); - roctracer::kfd_support::output_streamer::put(out,v.NumConcurrent); - roctracer::kfd_support::output_streamer::put(out,v.Blocks); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_ENGINE_VERSION& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Value); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCComputeProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaVersionInfo& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.KernelInterfaceMajorVersion); - roctracer::kfd_support::output_streamer::put(out,v.KernelInterfaceMinorVersion); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCacheType& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Value); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_MEMORYPROPERTY& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.MemoryProperty); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaClockCounters& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.GPUClockCounter); - roctracer::kfd_support::output_streamer::put(out,v.CPUClockCounter); - roctracer::kfd_support::output_streamer::put(out,v.SystemClockCounter); - roctracer::kfd_support::output_streamer::put(out,v.SystemClockFrequencyHz); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCounter& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Type); - roctracer::kfd_support::output_streamer::put(out,v.CounterId); - roctracer::kfd_support::output_streamer::put(out,v.CounterSizeInBits); - roctracer::kfd_support::output_streamer::put(out,v.CounterMask); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - roctracer::kfd_support::output_streamer::put(out,v.BlockIndex); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaNodeProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NumCPUCores); - roctracer::kfd_support::output_streamer::put(out,v.NumFComputeCores); - roctracer::kfd_support::output_streamer::put(out,v.NumMemoryBanks); - roctracer::kfd_support::output_streamer::put(out,v.NumCaches); - roctracer::kfd_support::output_streamer::put(out,v.NumIOLinks); - roctracer::kfd_support::output_streamer::put(out,v.CComputeIdLo); - roctracer::kfd_support::output_streamer::put(out,v.FComputeIdLo); - roctracer::kfd_support::output_streamer::put(out,v.Capability); - roctracer::kfd_support::output_streamer::put(out,v.MaxWavesPerSIMD); - roctracer::kfd_support::output_streamer::put(out,v.LDSSizeInKB); - roctracer::kfd_support::output_streamer::put(out,v.GDSSizeInKB); - roctracer::kfd_support::output_streamer::put(out,v.WaveFrontSize); - roctracer::kfd_support::output_streamer::put(out,v.NumShaderBanks); - roctracer::kfd_support::output_streamer::put(out,v.NumArrays); - roctracer::kfd_support::output_streamer::put(out,v.NumCUPerArray); - roctracer::kfd_support::output_streamer::put(out,v.NumSIMDPerCU); - roctracer::kfd_support::output_streamer::put(out,v.MaxSlotsScratchCU); - roctracer::kfd_support::output_streamer::put(out,v.EngineId); - roctracer::kfd_support::output_streamer::put(out,v.VendorId); - roctracer::kfd_support::output_streamer::put(out,v.DeviceId); - roctracer::kfd_support::output_streamer::put(out,v.LocationId); - roctracer::kfd_support::output_streamer::put(out,v.LocalMemSize); - roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzFCompute); - roctracer::kfd_support::output_streamer::put(out,v.MaxEngineClockMhzCCompute); - roctracer::kfd_support::output_streamer::put(out,v.DrmRenderMinor); - roctracer::kfd_support::output_streamer::put(out,v.MarketingName); - roctracer::kfd_support::output_streamer::put(out,v.AMDName); - roctracer::kfd_support::output_streamer::put(out,v.uCodeEngineVersions); - roctracer::kfd_support::output_streamer::put(out,v.DebugProperties); - roctracer::kfd_support::output_streamer::put(out,v.HiveID); - roctracer::kfd_support::output_streamer::put(out,v.NumSdmaEngines); - roctracer::kfd_support::output_streamer::put(out,v.NumSdmaXgmiEngines); - roctracer::kfd_support::output_streamer::put(out,v.NumGws); - roctracer::kfd_support::output_streamer::put(out,v.Reserved); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaSystemProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NumNodes); - roctracer::kfd_support::output_streamer::put(out,v.PlatformOem); - roctracer::kfd_support::output_streamer::put(out,v.PlatformId); - roctracer::kfd_support::output_streamer::put(out,v.PlatformRev); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaMemoryProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.HeapType); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - roctracer::kfd_support::output_streamer::put(out,v.Width); - roctracer::kfd_support::output_streamer::put(out,v.MemoryClockMax); - roctracer::kfd_support::output_streamer::put(out,v.VirtualBaseAddress); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_ENGINE_ID& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Value); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_CAPABILITY& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Value); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaQueueInfo& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.QueueDetailError); - roctracer::kfd_support::output_streamer::put(out,v.QueueTypeExtended); - roctracer::kfd_support::output_streamer::put(out,v.NumCUAssigned); - roctracer::kfd_support::output_streamer::put(out,v.CUMaskInfo); - roctracer::kfd_support::output_streamer::put(out,v.UserContextSaveArea); - roctracer::kfd_support::output_streamer::put(out,v.SaveAreaSizeInBytes); - roctracer::kfd_support::output_streamer::put(out,v.ControlStackTop); - roctracer::kfd_support::output_streamer::put(out,v.ControlStackUsedInBytes); - roctracer::kfd_support::output_streamer::put(out,v.SaveAreaHeader); - roctracer::kfd_support::output_streamer::put(out,v.Reserved2); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaIoLinkProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.IoLinkType); - roctracer::kfd_support::output_streamer::put(out,v.VersionMajor); - roctracer::kfd_support::output_streamer::put(out,v.VersionMinor); - roctracer::kfd_support::output_streamer::put(out,v.NodeFrom); - roctracer::kfd_support::output_streamer::put(out,v.NodeTo); - roctracer::kfd_support::output_streamer::put(out,v.Weight); - roctracer::kfd_support::output_streamer::put(out,v.MinimumLatency); - roctracer::kfd_support::output_streamer::put(out,v.MaximumLatency); - roctracer::kfd_support::output_streamer::put(out,v.MinimumBandwidth); - roctracer::kfd_support::output_streamer::put(out,v.MaximumBandwidth); - roctracer::kfd_support::output_streamer::put(out,v.RecTransferSize); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaMemoryAccessFault& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NodeId); - roctracer::kfd_support::output_streamer::put(out,v.VirtualAddress); - roctracer::kfd_support::output_streamer::put(out,v.Failure); - roctracer::kfd_support::output_streamer::put(out,v.Flags); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaEvent& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.EventId); - roctracer::kfd_support::output_streamer::put(out,v.EventData); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaMemMapFlags& v) -{ - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaDbgWaveMessage& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.DbgWaveMsg); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaGraphicsResourceInfo& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.SizeInBytes); - roctracer::kfd_support::output_streamer::put(out,v.MetadataSizeInBytes); - roctracer::kfd_support::output_streamer::put(out,v.Reserved); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaEventData& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.EventType); - roctracer::kfd_support::output_streamer::put(out,v.HWData1); - roctracer::kfd_support::output_streamer::put(out,v.HWData2); - roctracer::kfd_support::output_streamer::put(out,v.HWData3); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaDbgWaveMessageAMD& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.WaveMsgInfoGen2); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaPointerInfo& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Type); - roctracer::kfd_support::output_streamer::put(out,v.Node); - roctracer::kfd_support::output_streamer::put(out,v.MemFlags); - roctracer::kfd_support::output_streamer::put(out,v.GPUAddress); - roctracer::kfd_support::output_streamer::put(out,v.SizeInBytes); - roctracer::kfd_support::output_streamer::put(out,v.NRegisteredNodes); - roctracer::kfd_support::output_streamer::put(out,v.NMappedNodes); - roctracer::kfd_support::output_streamer::put(out,v.RegisteredNodes); - roctracer::kfd_support::output_streamer::put(out,v.MappedNodes); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCounterBlockProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.BlockId); - roctracer::kfd_support::output_streamer::put(out,v.NumCounters); - roctracer::kfd_support::output_streamer::put(out,v.NumConcurrent); - roctracer::kfd_support::output_streamer::put(out,v.Counters); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaEventDescriptor& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.EventType); - roctracer::kfd_support::output_streamer::put(out,v.NodeId); - roctracer::kfd_support::output_streamer::put(out,v.SyncVar); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaAccessAttributeFailure& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.NotPresent); - roctracer::kfd_support::output_streamer::put(out,v.ReadOnly); - roctracer::kfd_support::output_streamer::put(out,v.NoExecute); - roctracer::kfd_support::output_streamer::put(out,v.GpuAccess); - roctracer::kfd_support::output_streamer::put(out,v.ECC); - roctracer::kfd_support::output_streamer::put(out,v.Imprecise); - roctracer::kfd_support::output_streamer::put(out,v.ErrorType); - roctracer::kfd_support::output_streamer::put(out,v.Reserved); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HSA_UUID& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.Data1); - roctracer::kfd_support::output_streamer::put(out,v.Data2); - roctracer::kfd_support::output_streamer::put(out,v.Data3); - roctracer::kfd_support::output_streamer::put(out,v.Data4); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaQueueResource& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.QueueId); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCounterFlags& v) -{ - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaUserContextSaveAreaHeader& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.ControlStackOffset); - roctracer::kfd_support::output_streamer::put(out,v.ControlStackSize); - roctracer::kfd_support::output_streamer::put(out,v.WaveStateOffset); - roctracer::kfd_support::output_streamer::put(out,v.WaveStateSize); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaCacheProperties& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.ProcessorIdLow); - roctracer::kfd_support::output_streamer::put(out,v.CacheLevel); - roctracer::kfd_support::output_streamer::put(out,v.CacheSize); - roctracer::kfd_support::output_streamer::put(out,v.CacheLineSize); - roctracer::kfd_support::output_streamer::put(out,v.CacheLinesPerTag); - roctracer::kfd_support::output_streamer::put(out,v.CacheAssociativity); - roctracer::kfd_support::output_streamer::put(out,v.CacheLatency); - roctracer::kfd_support::output_streamer::put(out,v.CacheType); - roctracer::kfd_support::output_streamer::put(out,v.SiblingMap); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaMemFlags& v) -{ - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaPmcTraceRoot& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.TraceBufferMinSizeBytes); - roctracer::kfd_support::output_streamer::put(out,v.NumberOfPasses); - roctracer::kfd_support::output_streamer::put(out,v.TraceId); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaGpuTileConfig& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.TileConfig); - roctracer::kfd_support::output_streamer::put(out,v.MacroTileConfig); - roctracer::kfd_support::output_streamer::put(out,v.NumTileConfigs); - roctracer::kfd_support::output_streamer::put(out,v.NumMacroTileConfigs); - roctracer::kfd_support::output_streamer::put(out,v.GbAddrConfig); - roctracer::kfd_support::output_streamer::put(out,v.NumBanks); - roctracer::kfd_support::output_streamer::put(out,v.NumRanks); - roctracer::kfd_support::output_streamer::put(out,v.Reserved); - return out; -} -}; -template<> -struct output_streamer { - inline static std::ostream& put(std::ostream& out, HsaSyncVar& v) -{ - roctracer::kfd_support::output_streamer::put(out,v.SyncVarSize); - return out; -} -}; -// end ostream ops for KFD -};}; - +#include "inc/kfd_ostream_ops.h" #include #endif // INC_ROCTRACER_KFD_H_ From becaf5d074dcb56a066842c037072acdddeb7058 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 30 Oct 2019 17:18:18 -0400 Subject: [PATCH 16/23] Update Makefile --- test/MatrixTranspose_test/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/MatrixTranspose_test/Makefile b/test/MatrixTranspose_test/Makefile index 30c37ea992..04fdbee6bb 100644 --- a/test/MatrixTranspose_test/Makefile +++ b/test/MatrixTranspose_test/Makefile @@ -1,6 +1,7 @@ ROOT_PATH = ../.. LIB_PATH = $(ROOT_PATH)/build ROC_LIBS = -L$(LIB_PATH) -lroctracer64 -lroctx64 +HSA_KMT_INC_PATH = /opt/rocm/include export LD_LIBRARY_PATH=$(LIB_PATH) ITERATIONS ?= 100 @@ -23,7 +24,7 @@ EXECUTABLE=./MatrixTranspose all: clean $(EXECUTABLE) -CXXFLAGS =-g -I$(ROOT_PATH) -I$(ROOT_PATH)/inc -I${CMAKE_PREFIX_PATH}/include -DLOCAL_BUILD=1 -DITERATIONS=$(ITERATIONS) +CXXFLAGS =-g -I$(ROOT_PATH) -I$(ROOT_PATH)/inc -I${HSA_KMT_INC_PATH} -DLOCAL_BUILD=1 -DITERATIONS=$(ITERATIONS) CXX=$(HIPCC) $(EXECUTABLE): $(OBJECTS) From 3a8ae2fff4cea14cc4e81ee14fda0d5f25efd489 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 30 Oct 2019 17:21:20 -0400 Subject: [PATCH 17/23] Update CMakeLists.txt --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d0c5044c7d..c4f2bd1b5c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,7 @@ set ( KFD_LIB "kfdwrapper64" ) set ( KFD_LIB_SRC ${LIB_DIR}/kfd/kfd_wrapper.cpp ) -execute_process ( COMMAND sh -xc "${ROOT_DIR}/script/genOstreamOps.py -in ${HSA_KMT_INC_PATH}/hsakmttypes.h -out ${ROOT_DIR}/inc/roctracer_kfd.h" ) +execute_process ( COMMAND sh -xc "${ROOT_DIR}/script/gen_ostream_ops.py -in ${HSA_KMT_INC_PATH}/hsakmttypes.h -out ${ROOT_DIR}/inc/kfd_ostream_ops.h" ) add_library ( ${KFD_LIB} SHARED ${KFD_LIB_SRC} ) target_include_directories ( ${KFD_LIB} PRIVATE ${LIB_DIR} ${ROOT_DIR} ${ROOT_DIR}/inc ${HSA_RUNTIME_INC_PATH} ${HSA_RUNTIME_HSA_INC_PATH} ${HSA_KMT_INC_PATH} ) target_link_libraries( ${KFD_LIB} PRIVATE c stdc++ ) From 0aa6df2b52e18bbba989986052b3d5b1d8340b05 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Wed, 30 Oct 2019 17:26:57 -0400 Subject: [PATCH 18/23] Update roctracer_kfd.h --- inc/roctracer_kfd.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/roctracer_kfd.h b/inc/roctracer_kfd.h index b9a7431b1b..0e5c2f324b 100644 --- a/inc/roctracer_kfd.h +++ b/inc/roctracer_kfd.h @@ -30,7 +30,7 @@ THE SOFTWARE. #include "roctracer.h" #include "hsakmt.h" #include "inc/kfd_ostream_ops.h" -#include +#include "inc/kfd_prof_str.h" #endif // INC_ROCTRACER_KFD_H_ From 1a62e1859318830a281d343da6e246168f5d5243 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Thu, 31 Oct 2019 10:48:42 -0400 Subject: [PATCH 19/23] Update roctracer_kfd.h --- inc/roctracer_kfd.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/inc/roctracer_kfd.h b/inc/roctracer_kfd.h index 0e5c2f324b..45113ce435 100644 --- a/inc/roctracer_kfd.h +++ b/inc/roctracer_kfd.h @@ -25,8 +25,6 @@ THE SOFTWARE. #define INC_ROCTRACER_KFD_H_ #include -//#include - #include "roctracer.h" #include "hsakmt.h" #include "inc/kfd_ostream_ops.h" From c17a5acb0694ff32b1f6d9660bc24dedbe694ac2 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Thu, 31 Oct 2019 10:51:53 -0400 Subject: [PATCH 20/23] Update MatrixTranspose.cpp --- test/MatrixTranspose_test/MatrixTranspose.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/test/MatrixTranspose_test/MatrixTranspose.cpp b/test/MatrixTranspose_test/MatrixTranspose.cpp index f0a3d58d3b..c8c835bd54 100644 --- a/test/MatrixTranspose_test/MatrixTranspose.cpp +++ b/test/MatrixTranspose_test/MatrixTranspose.cpp @@ -33,7 +33,6 @@ THE SOFTWARE. // kfd header file #include -#include #ifndef ITERATIONS # define ITERATIONS 100 From 79dc82177c5c6532da37e21f3737e04177d23d65 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Thu, 31 Oct 2019 11:13:49 -0400 Subject: [PATCH 21/23] Update Makefile --- test/MatrixTranspose_test/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/MatrixTranspose_test/Makefile b/test/MatrixTranspose_test/Makefile index 04fdbee6bb..33538902f8 100644 --- a/test/MatrixTranspose_test/Makefile +++ b/test/MatrixTranspose_test/Makefile @@ -1,7 +1,7 @@ ROOT_PATH = ../.. LIB_PATH = $(ROOT_PATH)/build ROC_LIBS = -L$(LIB_PATH) -lroctracer64 -lroctx64 -HSA_KMT_INC_PATH = /opt/rocm/include +HSA_KMT_INC_PATH ?= /opt/rocm/include export LD_LIBRARY_PATH=$(LIB_PATH) ITERATIONS ?= 100 From 5ef10332605b64226f1f5afe4bdc35c9b8cfcb74 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Thu, 7 Nov 2019 16:06:21 -0500 Subject: [PATCH 22/23] Update gen_ostream_ops.py New version of script generates all expected fields for KFD API. I checked all structs and made sure nested structs and unions, named or anonymous are handled properly. --- script/gen_ostream_ops.py | 177 ++++++++++++++++---------------------- 1 file changed, 74 insertions(+), 103 deletions(-) diff --git a/script/gen_ostream_ops.py b/script/gen_ostream_ops.py index eaf39277ab..693111547c 100644 --- a/script/gen_ostream_ops.py +++ b/script/gen_ostream_ops.py @@ -32,67 +32,104 @@ HEADER = \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, const T& v) { return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, bool v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint8_t v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint16_t v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint32_t v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint64_t v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ '\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, bool* v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint8_t* v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint16_t* v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint32_t* v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ -'template<>\n' + \ +'\ntemplate<>\n' + \ 'struct output_streamer {\n' + \ ' inline static std::ostream& put(std::ostream& out, uint64_t* v) { out << std::hex << ""; return out; }\n' + \ '};\n' + \ '\n' -rx_dict = { - 'struct_name': re.compile(r'typedef (?P.*)\n'), - 'field_type': re.compile(r'\s+name\[type\]=(?P.*)\n'), - 'field_rawtype': re.compile(r'\s+name\[raw_type\]=(?P.*)\n'), - 'field_name': re.compile(r'\s+name\[name\]=(?P.*)\n'), - 'array_size_val': re.compile(r'\s+name\[array_size\]=(?P.*)\n'), -} +structs_done={} +def process_struct(f,c,cppHeader,nname): -def _parse_line(line): + if c not in cppHeader.classes: + return + if c in structs_done: + return - for key, rx in rx_dict.items(): - match = rx.search(line) - if match: - return key, match - return None, None + structs_done[c]=1; + for l in range(len(cppHeader.classes[c]["properties"]["public"])): + key='name' + name="" + if key in cppHeader.classes[c]["properties"]["public"][l]: + name = cppHeader.classes[c]["properties"]["public"][l][key] + key2='type' + mtype="" + if key2 in cppHeader.classes[c]["properties"]["public"][l]: + mtype = cppHeader.classes[c]["properties"]["public"][l][key2] + key3='array_size' + array_size="" + if key3 in cppHeader.classes[c]["properties"]["public"][l]: + array_size=cppHeader.classes[c]["properties"]["public"][l][key3] + key4='property_of_class' + prop="" + if key4 in cppHeader.classes[c]["properties"]["public"][l]: + prop=cppHeader.classes[c]["properties"]["public"][l][key4] -def parse_file(infilepath,outfilepath): - f = open(outfilepath,"w+") + if mtype!="" and "union" not in mtype: + if array_size == "": + str=" roctracer::kfd_support::output_streamer<"+mtype+">::put(out,v."+name+");\n" + else: + str=" roctracer::kfd_support::output_streamer<"+mtype+"["+array_size+"]>::put(out,v."+name+");\n" + + if nname!="" and nname not in str: + #print("injecting ",nname, "in ", str) + str=str.replace("v.","v."+nname+".") + if "void" not in mtype: + f.write(str) + else: + nc=prop+"::" + process_struct(f,nc,cppHeader,name) + nc=prop+"::"+mtype+" " + process_struct(f,nc,cppHeader,name) + nc=c+"::" + process_struct(f,nc,cppHeader,name) + + +def gen_cppheader(infilepath,outfilepath): + try: + cppHeader = CppHeaderParser.CppHeader(infilepath) + except CppHeaderParser.CppParseError as e: + print(e) + sys.exit(1) + + f= open(outfilepath,"w+") f.write("// automatically generated\n") f.write(LICENSE) f.write("\n") @@ -105,71 +142,24 @@ def parse_file(infilepath,outfilepath): '#include "hsakmt.h"\n' f.write(HEADER_S) f.write('\n') - f.write('namespace roctracer {\n') + f.write('namespace roctracer {\n') f.write('namespace kfd_support {\n') f.write('// begin ostream ops for KFD \n') f.write(HEADER) - - with open(infilepath, 'r') as file_object: - line = file_object.readline() - flag=0 - tmp_str="" - while line: - key, match = _parse_line(line) - if key == 'struct_name': - field_name="" - field_type="" - field_rawtype="" - if tmp_str!="": - f.write(tmp_str+"\n") - tmp_str="" - if flag == 1: - f.write(" return out;\n") - f.write("}\n") - f.write("};\n") - flag=0 - struct_name = match.group('struct_name') - if ("anon" not in struct_name and "union" not in struct_name) or args['debug']: - f.write("template<>\n") - f.write("struct output_streamer<"+struct_name+"&> {\n") - f.write(" inline static std::ostream& put(std::ostream& out, "+struct_name+"& v)\n") - f.write("{\n") - flag=1; - if flag==1 and key == 'field_type': - field_type = match.group('field_type') - if field_type == "": - field_type="notype" - if flag==1 and key == 'field_rawtype': - field_rawtype = match.group('field_rawtype') - if field_rawtype == "": - field_rawtype="notype" - if flag==1 and key == 'array_size_val': - array_size_val = match.group('array_size_val') - tmp_str=tmp_str.replace(field_type,field_type+"["+array_size_val+"]") - f.write(tmp_str+"\n") - tmp_str="" - if flag==1 and key == 'field_name' and "union" not in field_type: - if tmp_str!="": - f.write(tmp_str+"\n") - tmp_str="" - field_name = match.group('field_name') - if field_name == "": - field_name="noname" - if field_name!="" and field_type=="": - field_type=field_rawtype - if (field_name!="noname" and field_type!="notype" and not re.search("void",field_type)) or args['debug'] : - tmp_str=" roctracer::kfd_support::output_streamer<"+field_type+">::put(out,v."+field_name+")"+";"; - tmp_str=tmp_str.replace('<::', '<') - line = file_object.readline() - if tmp_str!="": - f.write(tmp_str+"\n") - tmp_str="" - if flag==1: + for c in cppHeader.classes: + if "union" in c: + continue + f.write("\ntemplate<>\n") + f.write("struct output_streamer<"+c+"&> {\n") + f.write(" inline static std::ostream& put(std::ostream& out, "+c+"& v)\n") + f.write("{\n") + process_struct(f,c,cppHeader,"") f.write(" return out;\n") f.write("}\n") f.write("};\n") + FOOTER = \ - '// end ostream ops for KFD \n' + '// end ostream ops for KFD \n' FOOTER += '};};\n' + \ '\n' + \ '#endif // INC_KFD_OSTREAM_OPS_H_\n' + \ @@ -178,29 +168,11 @@ def parse_file(infilepath,outfilepath): '#endif // INC_BASIC_OSTREAM_OPS_H_\n' + \ ' \n' f.write(FOOTER) - f.close() - print ("File "+outfilepath+" has been generated.") - return - -def gen_cppheader_lut(infilepath): - try: - cppHeader = CppHeaderParser.CppHeader(infilepath) - except CppHeaderParser.CppParseError as e: - print(e) - sys.exit(1) - - f= open("cppheader_lut.txt","w+") - for c in cppHeader.classes: - f.write("typedef %s\n"%(c)) - for l in range(len(cppHeader.classes[c]["properties"]["public"])): - for key in cppHeader.classes[c]["properties"]["public"][l].keys(): - f.write(" name[%s]=%s\n"%(key,cppHeader.classes[c]["properties"]["public"][l][key])) f.close() return parser = argparse.ArgumentParser(description='genOstreamOps.py: generates ostream operators for all typedefs in provided input file.') -parser.add_argument('-debug','--debug', help='Debug option for features not supported by CppHeaderParser', action='store_true') requiredNamed=parser.add_argument_group('Required arguments') requiredNamed.add_argument('-in','--in', help='Header file to be parsed', required=True) requiredNamed.add_argument('-out','--out', help='Output file with ostream operators', required=True) @@ -208,6 +180,5 @@ requiredNamed.add_argument('-out','--out', help='Output file with ostream operat args = vars(parser.parse_args()) if __name__ == '__main__': - gen_cppheader_lut(args['in']) - parse_file("cppheader_lut.txt",args['out']) + gen_cppheader(args['in'],args['out']) From d4014f5d44614287b09752792623e460e06fd184 Mon Sep 17 00:00:00 2001 From: rkebichi <54912798+rkebichi@users.noreply.github.com> Date: Tue, 12 Nov 2019 09:55:46 -0500 Subject: [PATCH 23/23] Update gen_ostream_ops.py --- script/gen_ostream_ops.py | 44 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/script/gen_ostream_ops.py b/script/gen_ostream_ops.py index 693111547c..f98a83b35b 100644 --- a/script/gen_ostream_ops.py +++ b/script/gen_ostream_ops.py @@ -75,7 +75,7 @@ HEADER = \ '};\n' + \ '\n' -structs_done={} +structs_done = {} def process_struct(f,c,cppHeader,nname): if c not in cppHeader.classes: @@ -83,42 +83,42 @@ def process_struct(f,c,cppHeader,nname): if c in structs_done: return - structs_done[c]=1; + structs_done[c] = 1; for l in range(len(cppHeader.classes[c]["properties"]["public"])): - key='name' - name="" + key = 'name' + name = "" if key in cppHeader.classes[c]["properties"]["public"][l]: name = cppHeader.classes[c]["properties"]["public"][l][key] - key2='type' - mtype="" + key2 = 'type' + mtype = "" if key2 in cppHeader.classes[c]["properties"]["public"][l]: mtype = cppHeader.classes[c]["properties"]["public"][l][key2] - key3='array_size' - array_size="" + key3 = 'array_size' + array_size = "" if key3 in cppHeader.classes[c]["properties"]["public"][l]: - array_size=cppHeader.classes[c]["properties"]["public"][l][key3] - key4='property_of_class' - prop="" + array_size = cppHeader.classes[c]["properties"]["public"][l][key3] + key4 = 'property_of_class' + prop = "" if key4 in cppHeader.classes[c]["properties"]["public"][l]: - prop=cppHeader.classes[c]["properties"]["public"][l][key4] + prop = cppHeader.classes[c]["properties"]["public"][l][key4] - if mtype!="" and "union" not in mtype: + if mtype != "" and "union" not in mtype: if array_size == "": - str=" roctracer::kfd_support::output_streamer<"+mtype+">::put(out,v."+name+");\n" + str = " roctracer::kfd_support::output_streamer<"+mtype+">::put(out,v."+name+");\n" else: - str=" roctracer::kfd_support::output_streamer<"+mtype+"["+array_size+"]>::put(out,v."+name+");\n" + str = " roctracer::kfd_support::output_streamer<"+mtype+"["+array_size+"]>::put(out,v."+name+");\n" - if nname!="" and nname not in str: + if nname != "" and nname not in str: #print("injecting ",nname, "in ", str) - str=str.replace("v.","v."+nname+".") + str = str.replace("v.","v."+nname+".") if "void" not in mtype: f.write(str) else: - nc=prop+"::" + nc = prop+"::" process_struct(f,nc,cppHeader,name) - nc=prop+"::"+mtype+" " + nc = prop+"::"+mtype+" " process_struct(f,nc,cppHeader,name) - nc=c+"::" + nc = c+"::" process_struct(f,nc,cppHeader,name) @@ -129,7 +129,7 @@ def gen_cppheader(infilepath,outfilepath): print(e) sys.exit(1) - f= open(outfilepath,"w+") + f = open(outfilepath,"w+") f.write("// automatically generated\n") f.write(LICENSE) f.write("\n") @@ -173,7 +173,7 @@ def gen_cppheader(infilepath,outfilepath): return parser = argparse.ArgumentParser(description='genOstreamOps.py: generates ostream operators for all typedefs in provided input file.') -requiredNamed=parser.add_argument_group('Required arguments') +requiredNamed = parser.add_argument_group('Required arguments') requiredNamed.add_argument('-in','--in', help='Header file to be parsed', required=True) requiredNamed.add_argument('-out','--out', help='Output file with ostream operators', required=True)