【发布时间】:2015-07-31 04:17:00
【问题描述】:
我是 OpenCL 的新手,最近我偶然发现了一些对我来说没有意义的东西。
我正在使用 Intel 驱动程序(在 linux 机器上工作)并且设备是 Xeon Phi 协处理器。
问题是当我给local_item_size作为参数时
clEnqueueNDRangeKernel(commandQueue,
forceKernel, 1,
&localItemSize, &globalItemSize,
NULL, 0, NULL, &kernelDone);
以及在内核中打印全局线程 id 时
int tid = get_global_id(0);
线程 id 从 1 开始,而不是从 0。
当我没有描述我的 local_item_size 并以 NULL 作为参数时,它似乎从 0 开始正确计数。
目前我正在我的代码中通过从get_global_id(0) 的返回值中减去 1 来解决此问题,以使我的代码正常工作..
简短地说:当我说我的local_item_size 是什么时,tid 从 1 开始。当我给 NULL 时,它从 0 开始。
尺寸设置代码:
// Global item size
if (n <= NUM_THREADS) {
globalItemSize = NUM_THREADS;
localItemSize = 16;
} else if (n % NUM_THREADS != 0) {
globalItemSize = (n / NUM_THREADS + 1) * NUM_THREADS;
} else {
globalItemSize = n;
}
// Local item size
localItemSize = globalItemSize / NUM_THREADS;
【问题讨论】:
-
localItemSize/globalItemSize的值是多少?您可能应该显示更多代码。 -
// Global item size if (n <= NUM_THREADS) { globalItemSize = NUM_THREADS; localItemSize = 16; } else if (n % NUM_THREADS != 0) { globalItemSize = (n / NUM_THREADS + 1) * NUM_THREADS; } else { globalItemSize = n; } // Local item size localItemSize = globalItemSize / NUM_THREADS;NUM_THREADS 固定为 256。 -
我已将代码添加到您的问题中。通常,当所有代码都在问题中并且格式正确时,它可以帮助我们帮助您。
标签: opencl