在测量OpenCL内核的执行时间时,我遇到了奇怪的行为。内核需要三个缓冲区作为输入。我在主机代码中创建这些缓冲区,并使用CL_MEM_COPY_HOST_PTR对它们进行初始化。然后我通过OpenCL事件测量内核执行时间。但是,当我省略CL_MEM_COPY_HOST_PTR时,内核执行时间下降到三分之一。未初始化缓冲区时内核执行时间下降
到目前为止,我发现这个问题与OpenCL编译器的优化有关。它看起来像编译器注意到缓冲区没有被初始化,并相应地优化了内核。如果我提供标志“-cl-opt-disable”,则初始化和不初始化缓冲区之间的执行时间没有区别。但禁用所有优化显然不是我打算做的。
有没有办法阻止编译器注意到缓冲区在没有禁用所有优化的情况下未被初始化?不幸的是,只写入一个字节到缓冲区中并没有这样做。
在此先感谢!
您使用的是clenqueuewrite还是clenqueuemap?也许你正在做这些额外的副本? –
所以你试图微调一些东西,并希望编译器不要以不同的方式优化内核?那么您可以测试它,而不会将内存从主机复制到GPU的潜在瓶颈?你确定那不是已经发生了什么?也许它更快,因为内存只是保持在GPU上缓存? (这可能没有意义,我不了解OpenCL,主要是优化和硬件的工作原理)。 –