Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么GPU上的Tensorflow模型推断会导致如此多的CUDA Cuefventrecord API调用?_Tensorflow_Cuda_Nvidia - Fatal编程技术网

为什么GPU上的Tensorflow模型推断会导致如此多的CUDA Cuefventrecord API调用?

为什么GPU上的Tensorflow模型推断会导致如此多的CUDA Cuefventrecord API调用?,tensorflow,cuda,nvidia,Tensorflow,Cuda,Nvidia,我在一个GPU(特斯拉P100)上运行Tensorflow对象检测模型(其中一个)。为了检查性能瓶颈,我使用Nvidianvprof评测工具评测我的对象检测应用程序(在几帧上执行对象检测)。分析结果如下所示 ======== Profiling result: 2 Type Time(%) Time Calls Avg Min Max Name 3 API calls: 32.13% 15

我在一个GPU(特斯拉P100)上运行Tensorflow对象检测模型(其中一个)。为了检查性能瓶颈,我使用Nvidia
nvprof
评测工具评测我的对象检测应用程序(在几帧上执行对象检测)。分析结果如下所示

======== Profiling result:
  2             Type  Time(%)      Time     Calls       Avg       Min       Max  Name
  3       API calls:   32.13%  15.2177s    434480  35.025us  5.1550us  954.27ms  cudaLaunchKernel
  4                    30.20%  14.3065s    942706  15.175us     361ns  77.372ms  cuEventRecord
  5                    13.39%  6.34349s    117067  54.186us  2.7000us  5.4721ms  cudaFuncGetAttributes
  6                     6.26%  2.96509s    575202  5.1540us     562ns  1.2027ms  cuEventQuery
  7                     6.16%  2.91725s     67072  43.494us  7.2690us  77.337ms  cuMemcpyDtoHAsync
...

通过查看英伟达可视化剖析器,我发现对象检测应用程序包含多个线程。其中几个线程一直在调用CUDA驱动程序API调用。分析结果显示

cuEventRecord
API调用的持续时间约为cuda运行时+驱动程序活动总持续时间的30%。我想知道这个
cuEventRecord
API调用是否与探查器有关:
nvprof
。如果不是,这些
cuEventRecord
调用是否会导致tensorflow模型推断的性能下降,以及调用这些
cuEventRecord
API有什么意义?

我想知道这个
cuEventRecord
API调用是否与 使用探查器执行以下操作:nvprof

事实并非如此

如果不是,这些
cuEventRecord
调用是否会导致tensorflow模型推断的性能下降

它们是Tensorflow正常运行的一部分

使用这些cuEventRecord API调用有什么意义


据我所知,Tensorflow设计了一个高度流水线化的设备代码路径,该路径依赖于广泛使用事件、流同步和流回调函数,以确保GPU保持占用状态,并以正确的顺序安排、上传和下载计算的不同阶段。。这很可能就是您在这里看到的。

这些不是唯一的CPU端计时吗?在GPU方面,内核启动可能会主导所有时间?如果将CPU频率调整为较低的值,会发生什么情况?@huseyintugrulbuyukisik,是的,我上面显示的统计数据是关于CPU端API计时(CUDA运行时或驱动程序API持续时间)。我猜想这些代码> CuviVista//Cord.API不应该来自NVPROF,正如我在英伟达可视化剖析器中看到的,它们是从普通CPU线程调用的,并与CUDALAUCHCHNEAR API调用交错。TysFROW反复地测量以尽可能快地启动新内核,交换一些CPU时间。谢谢,如果我正确理解了您的答案,Tensorflow将使用这些事件管理API(例如,cuEventRecord)来协调并发内核执行并确保高设备利用率。它们不用于tensorflow分析或nvprof分析。这是我的解释--