大型提交->;OpenCL内核中的启动延迟

大型提交->;OpenCL内核中的启动延迟,opencl,Opencl,我看到一个内核被提交到AMD GPU和实际执行之间存在巨大的延迟。我的程序正在执行阻塞写入/读取(blocking=CL_TRUE),以确保I/O不会干扰内核。然后,我使用clGetEventProfilingInfo获取有关内核排队、提交、开始和结束的信息。下面的数据(和代码)显示,内核大约需要5秒钟提交,然后运行5秒钟。通常,提交的时间会随着运行时间的变化而变化。我已经看过很多关于内核执行延迟的论坛帖子(例如),但似乎没有解决方案。我已经检查过GPU是否处于低功耗模式。有没有其他人看到过这种

我看到一个内核被提交到AMD GPU和实际执行之间存在巨大的延迟。我的程序正在执行阻塞写入/读取(blocking=CL_TRUE),以确保I/O不会干扰内核。然后,我使用clGetEventProfilingInfo获取有关内核排队、提交、开始和结束的信息。下面的数据(和代码)显示,内核大约需要5秒钟提交,然后运行5秒钟。通常,提交的时间会随着运行时间的变化而变化。我已经看过很多关于内核执行延迟的论坛帖子(例如),但似乎没有解决方案。我已经检查过GPU是否处于低功耗模式。有没有其他人看到过这种情况,或者对如何诊断它有什么建议

write 131.000000 ms
kernel queued->submitted 0.022348 ms
kernel submitted->started 5553.957663 ms
kernel started->ended 5529.893060 ms
read 39.000000 ms

1306       cl_ulong end, queued, start, submit;
1307       clGetEventProfilingInfo(jniContext->exec_event,
1308               CL_PROFILING_COMMAND_QUEUED, sizeof(queued), &queued, NULL);
1309       clGetEventProfilingInfo(jniContext->exec_event,
1310               CL_PROFILING_COMMAND_SUBMIT, sizeof(submit), &submit, NULL);
1311       clGetEventProfilingInfo(jniContext->exec_event,
1312               CL_PROFILING_COMMAND_START, sizeof(start), &start, NULL);
1313       clGetEventProfilingInfo(jniContext->exec_event,
1314               CL_PROFILING_COMMAND_END, sizeof(end), &end, NULL);

跟进:从最新版本的驱动程序(2013年5月29日发布的v13.4)升级到最新的测试版驱动程序(2013年11月22日发布)后,我们不再看到此性能问题。此问题发生在使用AMD A10-6700的64位Centos上,但是如果您看到此问题并且使用了不同的芯片组,我建议您升级到最新的测试版驱动程序,看看是否可以解决此问题。

您可以添加用于测量的代码吗?完整的代码我的意思是,当你启动内核时,等等。当然,完整的代码可以在:我看到你一次只运行一个内核。您经常会在第一次调用内核时看到大量计时结果。许多OpenCL实现将某些操作推迟到最后一刻,这项工作可能会导致第一次运行比后续运行花费更长的时间。要对内核进行基准测试,您可能需要多次运行它。有些人称之为“预热GPU”。@dithermaster是的,在发布代码后不久,我在内核周围添加了一个循环,但发现没有什么不同。然而,我刚刚升级到最新的测试版amd驱动程序,修复了一切。