时间测量在gpu中的执行和分配

时间:2016-09-19 22:16:58

标签: java opencl gpu jocl

我使用OpenCL和JOCL在GPU上执行并行内核。

我想知道:

1 /是否有任何函数可以在工作项和工作组中了解内核大小以及如何在我的Nvidia GPU平台中执行它?

2 /有没有可能知道没有GPU / CPU数据传输的内核执行时间,因为?我用过java工具System.currentTimeMillis(); 在启动内核之前和之后,它包括数据传输时间。

3 /更准确地说是否有可能知道每个GPU核心的执行时间?

1 个答案:

答案 0 :(得分:0)

1)在内核中,

get_global_size(0) gives number of items in x dimension
get_global_size(1) gives number of item arrays in y dimension
get_global_size(2) gives number of item matrices in z dimension

总数是它们的乘法,但如果内核只启动1-dim那么只有第一个函数就足够了。

get_local_size(0 or 1 or 2);

为组中的项目提供相同的内容,而不是总项目。

get_num_groups (0 or 1 or 2)

类似,但总共给出了组数。

尺寸数取自

 int dims=get_work_dim ()

2)来自主机代码的基于事件的性能查询:

http://www.jocl.org/cloth/docs/doc-utils/org/jocl/utils/Events.html

computeExecutionTimeMs(org.jocl.cl_event事件)           计算给定事件的执行时间,以毫秒为单位。

1),2)和3)分析器

可以显示所有除了"每个核心"(但提供" Lanes&#34的信息;它们可能不会始终映射到同一个核心,但您可以看到单个线程在做什么)部分。 https://developer.nvidia.com/nvidia-nsight-visual-studio-edition视觉效果和表格提供了有关瓶颈和内核热点的足够信息