22
22
#include < string>
23
23
#include < cstring>
24
24
25
- #if defined(__GXX_ABI_VERSION)
26
- #define HAVE_GCC_ABI_DEMANGLE
27
- #endif
28
-
29
- #if defined(HAVE_GCC_ABI_DEMANGLE)
30
- #include < cxxabi.h>
31
- #endif // HAVE_GCC_ABI_DEMANGLE
25
+ #include " utils/demangle.hpp"
32
26
33
27
namespace KokkosTools ::KernelTimer {
34
28
35
- inline char * demangleName (char * kernelName) {
36
- #if defined(HAVE_GCC_ABI_DEMANGLE)
37
- int status = -1 ;
38
- char * demangledKernelName =
39
- abi::__cxa_demangle (kernelName, NULL , NULL , &status);
40
- if (status == 0 ) {
41
- free (kernelName);
42
- kernelName = demangledKernelName;
43
- }
44
- #endif // HAVE_GCC_ABI_DEMANGLE
45
- return kernelName;
46
- }
47
-
48
29
inline double seconds () {
49
30
struct timeval now;
50
31
gettimeofday (&now, NULL );
@@ -62,15 +43,7 @@ enum KernelExecutionType {
62
43
class KernelPerformanceInfo {
63
44
public:
64
45
KernelPerformanceInfo (std::string kName , KernelExecutionType kernelType)
65
- : kType (kernelType) {
66
- kernelName = (char *)malloc (sizeof (char ) * (kName .size () + 1 ));
67
- strcpy (kernelName, kName .c_str ());
68
-
69
- callCount = 0 ;
70
- time = 0 ;
71
- }
72
-
73
- ~KernelPerformanceInfo () { free (kernelName); }
46
+ : kernelName(std::move(kName )), kType (kernelType) {}
74
47
75
48
KernelExecutionType getKernelType () const { return kType ; }
76
49
@@ -95,7 +68,7 @@ class KernelPerformanceInfo {
95
68
96
69
double getTimeSq () { return timeSq; }
97
70
98
- char * getName () const { return kernelName; }
71
+ const std::string& getName () const { return kernelName; }
99
72
100
73
void addCallCount (const uint64_t newCalls) { callCount += newCalls; }
101
74
@@ -112,15 +85,9 @@ class KernelPerformanceInfo {
112
85
copy ((char *)&kernelNameLength, &entry[nextIndex], sizeof (kernelNameLength));
113
86
nextIndex += sizeof (kernelNameLength);
114
87
115
- if (strlen (kernelName) > 0 ) {
116
- free (kernelName);
117
- }
118
-
119
- kernelName = (char *)malloc (sizeof (char ) * (kernelNameLength + 1 ));
120
- copy (kernelName, &entry[nextIndex], kernelNameLength);
121
- kernelName[kernelNameLength] = ' \0 ' ;
88
+ this ->kernelName = std::string (&entry[nextIndex], kernelNameLength);
122
89
123
- kernelName = demangleName (kernelName);
90
+ kernelName = demangleNameKokkos (kernelName);
124
91
125
92
nextIndex += kernelNameLength;
126
93
@@ -152,7 +119,7 @@ class KernelPerformanceInfo {
152
119
}
153
120
154
121
void writeToBinaryFile (FILE* output) {
155
- const uint32_t kernelNameLen = ( uint32_t ) strlen ( kernelName);
122
+ const uint32_t kernelNameLen = kernelName. size ( );
156
123
const uint32_t recordLen = sizeof (uint32_t ) + sizeof (char ) * kernelNameLen +
157
124
sizeof (uint64_t ) + sizeof (double ) +
158
125
sizeof (double ) + sizeof (uint32_t );
@@ -163,7 +130,7 @@ class KernelPerformanceInfo {
163
130
copy (&entry[nextIndex], (char *)&kernelNameLen, sizeof (kernelNameLen));
164
131
nextIndex += sizeof (kernelNameLen);
165
132
166
- copy (&entry[nextIndex], kernelName, kernelNameLen);
133
+ copy (&entry[nextIndex], kernelName. c_str () , kernelNameLen);
167
134
nextIndex += kernelNameLen;
168
135
169
136
copy (&entry[nextIndex], (char *)&callCount, sizeof (callCount));
@@ -191,7 +158,7 @@ class KernelPerformanceInfo {
191
158
snprintf (indentBuffer, 256 , " %s " , indent);
192
159
193
160
fprintf (output, " %s\" kernel-name\" : \" %s\" ,\n " , indentBuffer,
194
- kernelName);
161
+ kernelName. c_str () );
195
162
// fprintf(output, "%s\"region\" : \"%s\",\n", indentBuffer,
196
163
// regionName);
197
164
fprintf (output, " %s\" call-count\" : %llu,\n " , indentBuffer,
@@ -216,12 +183,12 @@ class KernelPerformanceInfo {
216
183
}
217
184
}
218
185
219
- char * kernelName;
186
+ std::string kernelName;
220
187
// const char* regionName;
221
- uint64_t callCount;
222
- double time;
223
- double timeSq;
224
- double startTime;
188
+ uint64_t callCount = 0 ;
189
+ double time = 0 ;
190
+ double timeSq = 0 ;
191
+ double startTime = 0 ;
225
192
KernelExecutionType kType ;
226
193
};
227
194
0 commit comments