优化问题,需要具体问题具体分析,基本原则以下三点:
1.获取设备信息 device info:
//获取硬件设备中物理层有几个计算单元
cl_ulong maxComputeUnits = device .getInfo<CL_DEVICE_MAX_COMPUTE_UNITS>();
//获取work group 最大 size 这个等价于一个compute unit 能并发处理的最大线程数
cl_ulong maxWorkGroupSize = device.getInfo<CL_DEVICE_MAX_WORK_GROUP_SIZE>();
我的1060N卡,这两个参数值:
maxComputeUnits :10
maxWorkGroupSize :1024
那么理论上,我的卡跑一次,最大计算量为10240;
且我们在设置local size这个参数时,几个维度相乘的积不能超过1024.
例如(32,32),(16,16,4)
2.获取设备具体的最小颗粒度:
https://www.cnblogs.com/zenny-chen/p/3252061.html
从上面这篇文章里学到了:maxWorkGroupSize :1024
只是一个work group可以并发处理1024个work item运行
真正是在并行计算的workitem是由最小线程并行粒度决定的
我