[问题] openCL kernal中如何知道index属于谁?

楼主: hardman1110 (笨小孩)   2017-08-22 16:32:42
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
vc2017
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
OpenCL
问题(Question):
我在kernal中传入3个大小不同的一维阵列
我如何知道get_global_id(0) 回传的index是属于谁的?
喂入的资料(Input):
三个大小不同的一维阵列,a_Cost为输出
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
__kernel void CostDataMat_kernel(__global const int a_RangeUpScale, __global
const int a_ImgWidth, __global const int a_ImgHeight, __global const char
*a_Left, __global const char *a_Right, __global int *a_Cost) {
// Get the index of the current element to be processed
int index = get_global_id(0);
int ImgSize = a_ImgWidth*a_ImgHeight;
int layer = index/ImgSize;
int layer_mod = index%ImgSize;
int i = layer_mod/a_ImgWidth;
int j = layer_mod%a_ImgWidth;
int Y_Abs = 0;
int Cb_Abs = 0;
int Cr_Abs = 0;
// Do the operation
Y_Abs = abs(a_Left[layer_mod*3] - a_Right[layer_mod*3]);
Cr_Abs = abs(a_Left[layer_mod*3+1] - a_Right[layer_mod*3+1]);
Cb_Abs = abs(a_Left[layer_mod*3+2] - a_Right[layer_mod*3+2]);
if(j >= a_RangeUpScale)
{
a_Cost[index] = Y_Abs + ((Cr_Abs + Cb_Abs)>>1);
}
else
{
if(layer < j+1)
{
a_Cost[index] = Y_Abs + ((Cr_Abs + Cb_Abs)>>1);
}
else
{
a_Cost[index] = -1;
}
}
}
补充说明(Supplement):
另外想请教各位大大,如何知道kernal有哪些函数可以用 ex: abs 等等的
作者: LPH66 (-6.2598534e+18f)   2017-08-22 17:04:00
index 是 kernel 的编号, 不是阵列的编号kernel 做事的概念是“几号 kernel 去拿阵列的哪几格做事”只是一般来说会因为方便让 kernel 以自己编号去取元素当然其他状况也有可能是会成一个 kernel 抓很多格做事这时去取哪几格时就要自己去算哪个 kernel 该取哪几格另外你最后的问题, 去找 OpenCL 标准文件里面写得很清楚或者我印象中有看过一个是把各种函数整理成的 cheat sheet(包含 host 端和 kernel 端的函数都有)
楼主: hardman1110 (笨小孩)   2017-08-22 17:11:00
我传进去的阵列型态大小都不一样,我该如何知道切了多少kernal(work item) 然后每个work item包含每个阵列的哪几格?
作者: LPH66 (-6.2598534e+18f)   2017-08-22 17:25:00
这是你在决定的事; 你要决定每个 work item 的工作量是多少每个人要怎么拿到他所要的工作量做事
楼主: hardman1110 (笨小孩)   2017-08-22 17:26:00
查到clEnqueueNDRangeKernel可控制要切多少workitem
作者: LPH66 (-6.2598534e+18f)   2017-08-22 17:26:00
有的时候甚至可以写说“几号以后不用做那边的事”之类的
楼主: hardman1110 (笨小孩)   2017-08-22 17:45:00
这样说起来我要index以哪个阵列为主就enqueue那个阵列的size噜?

Links booklink

Contact Us: admin [ a t ] ucptt.com