【发布时间】:2014-04-25 06:58:51
【问题描述】:
CL_DEVICE_NAME = GeForce GT 630
CL_DEVICE_TYPE = CL_DEVICE_TYPE_GPU
CL_PLATFORM_NAME:NVIDIA CUDA
size_t global_item_size = 8;
size_t local_item_size = 1;
clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, NULL);
这里不允许在内核中打印。因此,如何确保我所有的 8 个内核并行运行?
额外信息(关于我的问题): 对于内核,我将 8X8 大小的输入和输出数组作为缓冲区传递。根据工作项编号,我正在解决该行并将结果保存在输出缓冲区中。然后我正在阅读结果。
如果我正在运行 AMD 平台 SDK,我在内核中添加 print 语句
#pragma OPENCL EXTENSION cl_amd_printf : enable
因此我可以清楚地看到,如果我使用的是 4 核机器,我的前 4 个内核是并行运行的,然后其余的将并行运行,这表明它正在并行解决最大 4 个。
但是,我的 CL_DEVICE_TYPE_GPU 怎样才能看到相同的结果?
任何帮助/指针/建议将不胜感激。
【问题讨论】:
-
您如何使用
printf验证您是否有并行执行? -
@jprice 抱歉回复晚了。 printf 对于每 4 个项目以随机顺序出现。如果我在每个工作项中运行大函数/循环,printf 序列将类似于 (0,1,3,2,2,3,1,0,1,2,3,0 .....) 如果有的话第一个工作项完成然后它将被替换为下一个,例如 4/5/... 相应地。这是一个合适的方法吗?
-
@jprice,AMD 平台的速度提高了大约 3.5 倍。但对于 GPU,加速会有所不同。因此我需要验证有多少项目是并行进行的?
标签: parallel-processing opencl