• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 
16 #include "tensorflow/core/profiler/internal/gpu/cupti_wrapper.h"
17 
18 #include <type_traits>
19 
20 namespace tensorflow {
21 namespace profiler {
22 
ActivityDisable(CUpti_ActivityKind kind)23 CUptiResult CuptiWrapper::ActivityDisable(CUpti_ActivityKind kind) {
24   return cuptiActivityDisable(kind);
25 }
26 
ActivityEnable(CUpti_ActivityKind kind)27 CUptiResult CuptiWrapper::ActivityEnable(CUpti_ActivityKind kind) {
28   return cuptiActivityEnable(kind);
29 }
30 
ActivityFlushAll(uint32_t flag)31 CUptiResult CuptiWrapper::ActivityFlushAll(uint32_t flag) {
32   return cuptiActivityFlushAll(flag);
33 }
34 
ActivityGetNextRecord(uint8_t * buffer,size_t valid_buffer_size_bytes,CUpti_Activity ** record)35 CUptiResult CuptiWrapper::ActivityGetNextRecord(uint8_t* buffer,
36                                                 size_t valid_buffer_size_bytes,
37                                                 CUpti_Activity** record) {
38   return cuptiActivityGetNextRecord(buffer, valid_buffer_size_bytes, record);
39 }
40 
ActivityGetNumDroppedRecords(CUcontext context,uint32_t stream_id,size_t * dropped)41 CUptiResult CuptiWrapper::ActivityGetNumDroppedRecords(CUcontext context,
42                                                        uint32_t stream_id,
43                                                        size_t* dropped) {
44   return cuptiActivityGetNumDroppedRecords(context, stream_id, dropped);
45 }
46 
ActivityConfigureUnifiedMemoryCounter(CUpti_ActivityUnifiedMemoryCounterConfig * config,uint32_t count)47 CUptiResult CuptiWrapper::ActivityConfigureUnifiedMemoryCounter(
48     CUpti_ActivityUnifiedMemoryCounterConfig* config, uint32_t count) {
49   return cuptiActivityConfigureUnifiedMemoryCounter(config, count);
50 }
51 
ActivityRegisterCallbacks(CUpti_BuffersCallbackRequestFunc func_buffer_requested,CUpti_BuffersCallbackCompleteFunc func_buffer_completed)52 CUptiResult CuptiWrapper::ActivityRegisterCallbacks(
53     CUpti_BuffersCallbackRequestFunc func_buffer_requested,
54     CUpti_BuffersCallbackCompleteFunc func_buffer_completed) {
55   return cuptiActivityRegisterCallbacks(func_buffer_requested,
56                                         func_buffer_completed);
57 }
58 
GetDeviceId(CUcontext context,uint32 * deviceId)59 CUptiResult CuptiWrapper::GetDeviceId(CUcontext context, uint32* deviceId) {
60   return cuptiGetDeviceId(context, deviceId);
61 }
62 
GetTimestamp(uint64_t * timestamp)63 CUptiResult CuptiWrapper::GetTimestamp(uint64_t* timestamp) {
64   return cuptiGetTimestamp(timestamp);
65 }
66 
Finalize()67 CUptiResult CuptiWrapper::Finalize() { return cuptiFinalize(); }
68 
EnableCallback(uint32_t enable,CUpti_SubscriberHandle subscriber,CUpti_CallbackDomain domain,CUpti_CallbackId cbid)69 CUptiResult CuptiWrapper::EnableCallback(uint32_t enable,
70                                          CUpti_SubscriberHandle subscriber,
71                                          CUpti_CallbackDomain domain,
72                                          CUpti_CallbackId cbid) {
73   return cuptiEnableCallback(enable, subscriber, domain, cbid);
74 }
75 
EnableDomain(uint32_t enable,CUpti_SubscriberHandle subscriber,CUpti_CallbackDomain domain)76 CUptiResult CuptiWrapper::EnableDomain(uint32_t enable,
77                                        CUpti_SubscriberHandle subscriber,
78                                        CUpti_CallbackDomain domain) {
79   return cuptiEnableDomain(enable, subscriber, domain);
80 }
81 
Subscribe(CUpti_SubscriberHandle * subscriber,CUpti_CallbackFunc callback,void * userdata)82 CUptiResult CuptiWrapper::Subscribe(CUpti_SubscriberHandle* subscriber,
83                                     CUpti_CallbackFunc callback,
84                                     void* userdata) {
85   return cuptiSubscribe(subscriber, callback, userdata);
86 }
87 
Unsubscribe(CUpti_SubscriberHandle subscriber)88 CUptiResult CuptiWrapper::Unsubscribe(CUpti_SubscriberHandle subscriber) {
89   return cuptiUnsubscribe(subscriber);
90 }
91 
DeviceEnumEventDomains(CUdevice device,size_t * array_size_bytes,CUpti_EventDomainID * domain_array)92 CUptiResult CuptiWrapper::DeviceEnumEventDomains(
93     CUdevice device, size_t* array_size_bytes,
94     CUpti_EventDomainID* domain_array) {
95   return cuptiDeviceEnumEventDomains(device, array_size_bytes, domain_array);
96 }
97 
DeviceGetEventDomainAttribute(CUdevice device,CUpti_EventDomainID event_domain,CUpti_EventDomainAttribute attrib,size_t * value_size,void * value)98 CUptiResult CuptiWrapper::DeviceGetEventDomainAttribute(
99     CUdevice device, CUpti_EventDomainID event_domain,
100     CUpti_EventDomainAttribute attrib, size_t* value_size, void* value) {
101   return cuptiDeviceGetEventDomainAttribute(device, event_domain, attrib,
102                                             value_size, value);
103 }
104 
DisableKernelReplayMode(CUcontext context)105 CUptiResult CuptiWrapper::DisableKernelReplayMode(CUcontext context) {
106   return cuptiDisableKernelReplayMode(context);
107 }
108 
EnableKernelReplayMode(CUcontext context)109 CUptiResult CuptiWrapper::EnableKernelReplayMode(CUcontext context) {
110   return cuptiEnableKernelReplayMode(context);
111 }
112 
DeviceGetNumEventDomains(CUdevice device,uint32_t * num_domains)113 CUptiResult CuptiWrapper::DeviceGetNumEventDomains(CUdevice device,
114                                                    uint32_t* num_domains) {
115   return cuptiDeviceGetNumEventDomains(device, num_domains);
116 }
117 
EventDomainEnumEvents(CUpti_EventDomainID event_domain,size_t * array_size_bytes,CUpti_EventID * event_array)118 CUptiResult CuptiWrapper::EventDomainEnumEvents(
119     CUpti_EventDomainID event_domain, size_t* array_size_bytes,
120     CUpti_EventID* event_array) {
121   return cuptiEventDomainEnumEvents(event_domain, array_size_bytes,
122                                     event_array);
123 }
124 
EventDomainGetNumEvents(CUpti_EventDomainID event_domain,uint32_t * num_events)125 CUptiResult CuptiWrapper::EventDomainGetNumEvents(
126     CUpti_EventDomainID event_domain, uint32_t* num_events) {
127   return cuptiEventDomainGetNumEvents(event_domain, num_events);
128 }
129 
EventGetAttribute(CUpti_EventID event,CUpti_EventAttribute attrib,size_t * value_size,void * value)130 CUptiResult CuptiWrapper::EventGetAttribute(CUpti_EventID event,
131                                             CUpti_EventAttribute attrib,
132                                             size_t* value_size, void* value) {
133   return cuptiEventGetAttribute(event, attrib, value_size, value);
134 }
135 
EventGetIdFromName(CUdevice device,const char * event_name,CUpti_EventID * event)136 CUptiResult CuptiWrapper::EventGetIdFromName(CUdevice device,
137                                              const char* event_name,
138                                              CUpti_EventID* event) {
139   return cuptiEventGetIdFromName(device, event_name, event);
140 }
141 
EventGroupDisable(CUpti_EventGroup event_group)142 CUptiResult CuptiWrapper::EventGroupDisable(CUpti_EventGroup event_group) {
143   return cuptiEventGroupDisable(event_group);
144 }
145 
EventGroupEnable(CUpti_EventGroup event_group)146 CUptiResult CuptiWrapper::EventGroupEnable(CUpti_EventGroup event_group) {
147   return cuptiEventGroupEnable(event_group);
148 }
149 
EventGroupGetAttribute(CUpti_EventGroup event_group,CUpti_EventGroupAttribute attrib,size_t * value_size,void * value)150 CUptiResult CuptiWrapper::EventGroupGetAttribute(
151     CUpti_EventGroup event_group, CUpti_EventGroupAttribute attrib,
152     size_t* value_size, void* value) {
153   return cuptiEventGroupGetAttribute(event_group, attrib, value_size, value);
154 }
155 
EventGroupReadEvent(CUpti_EventGroup event_group,CUpti_ReadEventFlags flags,CUpti_EventID event,size_t * event_value_buffer_size_bytes,uint64_t * event_value_buffer)156 CUptiResult CuptiWrapper::EventGroupReadEvent(
157     CUpti_EventGroup event_group, CUpti_ReadEventFlags flags,
158     CUpti_EventID event, size_t* event_value_buffer_size_bytes,
159     uint64_t* event_value_buffer) {
160   return cuptiEventGroupReadEvent(event_group, flags, event,
161                                   event_value_buffer_size_bytes,
162                                   event_value_buffer);
163 }
164 
EventGroupSetAttribute(CUpti_EventGroup event_group,CUpti_EventGroupAttribute attrib,size_t value_size,void * value)165 CUptiResult CuptiWrapper::EventGroupSetAttribute(
166     CUpti_EventGroup event_group, CUpti_EventGroupAttribute attrib,
167     size_t value_size, void* value) {
168   return cuptiEventGroupSetAttribute(event_group, attrib, value_size, value);
169 }
170 
EventGroupSetsCreate(CUcontext context,size_t event_id_array_size_bytes,CUpti_EventID * event_id_array,CUpti_EventGroupSets ** event_group_passes)171 CUptiResult CuptiWrapper::EventGroupSetsCreate(
172     CUcontext context, size_t event_id_array_size_bytes,
173     CUpti_EventID* event_id_array, CUpti_EventGroupSets** event_group_passes) {
174   return cuptiEventGroupSetsCreate(context, event_id_array_size_bytes,
175                                    event_id_array, event_group_passes);
176 }
177 
EventGroupSetsDestroy(CUpti_EventGroupSets * event_group_sets)178 CUptiResult CuptiWrapper::EventGroupSetsDestroy(
179     CUpti_EventGroupSets* event_group_sets) {
180   return cuptiEventGroupSetsDestroy(event_group_sets);
181 }
182 
183 // CUPTI metric API
DeviceEnumMetrics(CUdevice device,size_t * arraySizeBytes,CUpti_MetricID * metricArray)184 CUptiResult CuptiWrapper::DeviceEnumMetrics(CUdevice device,
185                                             size_t* arraySizeBytes,
186                                             CUpti_MetricID* metricArray) {
187   return cuptiDeviceEnumMetrics(device, arraySizeBytes, metricArray);
188 }
189 
DeviceGetNumMetrics(CUdevice device,uint32_t * num_metrics)190 CUptiResult CuptiWrapper::DeviceGetNumMetrics(CUdevice device,
191                                               uint32_t* num_metrics) {
192   return cuptiDeviceGetNumMetrics(device, num_metrics);
193 }
194 
MetricGetIdFromName(CUdevice device,const char * metric_name,CUpti_MetricID * metric)195 CUptiResult CuptiWrapper::MetricGetIdFromName(CUdevice device,
196                                               const char* metric_name,
197                                               CUpti_MetricID* metric) {
198   return cuptiMetricGetIdFromName(device, metric_name, metric);
199 }
200 
MetricGetNumEvents(CUpti_MetricID metric,uint32_t * num_events)201 CUptiResult CuptiWrapper::MetricGetNumEvents(CUpti_MetricID metric,
202                                              uint32_t* num_events) {
203   return cuptiMetricGetNumEvents(metric, num_events);
204 }
205 
MetricEnumEvents(CUpti_MetricID metric,size_t * event_id_array_size_bytes,CUpti_EventID * event_id_array)206 CUptiResult CuptiWrapper::MetricEnumEvents(CUpti_MetricID metric,
207                                            size_t* event_id_array_size_bytes,
208                                            CUpti_EventID* event_id_array) {
209   return cuptiMetricEnumEvents(metric, event_id_array_size_bytes,
210                                event_id_array);
211 }
212 
MetricGetAttribute(CUpti_MetricID metric,CUpti_MetricAttribute attrib,size_t * value_size,void * value)213 CUptiResult CuptiWrapper::MetricGetAttribute(CUpti_MetricID metric,
214                                              CUpti_MetricAttribute attrib,
215                                              size_t* value_size, void* value) {
216   return cuptiMetricGetAttribute(metric, attrib, value_size, value);
217 }
218 
MetricGetValue(CUdevice device,CUpti_MetricID metric,size_t event_id_array_size_bytes,CUpti_EventID * event_id_array,size_t event_value_array_size_bytes,uint64_t * event_value_array,uint64_t time_duration,CUpti_MetricValue * metric_value)219 CUptiResult CuptiWrapper::MetricGetValue(CUdevice device, CUpti_MetricID metric,
220                                          size_t event_id_array_size_bytes,
221                                          CUpti_EventID* event_id_array,
222                                          size_t event_value_array_size_bytes,
223                                          uint64_t* event_value_array,
224                                          uint64_t time_duration,
225                                          CUpti_MetricValue* metric_value) {
226   return cuptiMetricGetValue(device, metric, event_id_array_size_bytes,
227                              event_id_array, event_value_array_size_bytes,
228                              event_value_array, time_duration, metric_value);
229 }
230 
GetResultString(CUptiResult result,const char ** str)231 CUptiResult CuptiWrapper::GetResultString(CUptiResult result,
232                                           const char** str) {
233   return cuptiGetResultString(result, str);
234 }
235 
GetContextId(CUcontext context,uint32_t * context_id)236 CUptiResult CuptiWrapper::GetContextId(CUcontext context,
237                                        uint32_t* context_id) {
238   return cuptiGetContextId(context, context_id);
239 }
240 
GetStreamIdEx(CUcontext context,CUstream stream,uint8_t per_thread_stream,uint32_t * stream_id)241 CUptiResult CuptiWrapper::GetStreamIdEx(CUcontext context, CUstream stream,
242                                         uint8_t per_thread_stream,
243                                         uint32_t* stream_id) {
244   return cuptiGetStreamIdEx(context, stream, per_thread_stream, stream_id);
245 }
246 
247 }  // namespace profiler
248 }  // namespace tensorflow
249