OPENCL全球/本地工作尺寸选择
OpenCL global/local work size choice
我正在学习使用opencl。现在,我的任务非常简单,将一个大阵列复制到另一个大数组。假设A [301] [300] [300]对B [301] [300] [300]。这只是一项测试,让我了解什么是全球工作规模和本地工作规模。我使用svm将float8矢量阵列传递到内核。
__global float8* dts,
__global float8* dts_from_file
1。我似乎必须选择全局工作大小>数组大小,在我的测试用例
中size_t globalWorkSize[3] = { 128, 128, 256 };
(128*128*256*8)> 301*300*300。否则,我将获得截短的输出。我是对的还是只是对全球工作规模的定义感到困惑?仅供参考,
CL_DEVICE_ADDRESS_BITS=64
CL_DEVICE_MAX_WORK_GROUP_SIZE=256
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS=3
CL_DEVICE_MAX_WORK_ITEM_SIZES[0,1,2]=256, 256, 256
2。是本地工作尺寸是否受cl_kernel_work_group_size = 256?
限制size_t localWorkSize[3] = { 4,8,8 };
,就我将4更改为更大的值,将会有clenqueuendrangekernel错误cl_invalid_work_group_size,因为4*8*8 = 256?
3。多个设备的全球/本地工作大小(CPU GPU)如何,我需要为每个设备指定不同的工作大小吗?
预先感谢。
总本地工作大小不能超过cl_device_max_work_group_size,并且每个工作都不能超过cl_device_max_max_work_item_sizes。在您的情况下,使用本地工作大小{4、8、8}是可以的。
全球工作规模中的每个人都必须是本地工作规模的倍数。当您的内核过程仅处理一个数据时,您必须将全球工作尺寸设置为大于数组大小,并在内核中添加一个检查
if (get_global_id(0) < array_size_x) { ... }
couse每个项目都可以处理更多数据,您必须在不同的情况下进行不同的检查。
每个设备的工作尺寸不同,必须独立设置。使不同的设备同时运行相同的内核并非易事。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 导入库可以跨dll版本工作吗
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- QTreeView幻灯片多选后无法使用单击选择
- 以螺旋方式打印矩阵的程序.(工作不好)
- 我的代码在第 4 个选择后停止工作
- OpenCV 3.2 在抓取时提供选择超时,但 fscyber 可以工作
- C++中的递归选择不能完全正常工作
- OPENCL全球/本地工作尺寸选择
- 运算符 = 重载C++有选择地工作
- 是选择 QSqlQuery 未按预期工作
- 选择排序C++无法正常工作
- libmicrohttpd的MHD_resume_connection()在外部选择时不能正常工作
- vector insert中重载模板函数选择(模式匹配)是如何工作的
- 选择在 Windows 7 上无法正常工作
- 选择返回零,但有更多的数据和recv工作太
- 在c++中,当常量也可以工作时,编译器为什么选择非常量函数