C_and_CPP 板


LINE

开发平台(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 等等的 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.34.230.27
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1503390765.A.64C.html ※ 编辑: hardman1110 (114.34.230.27), 08/22/2017 16:50:46
1F:推 LPH66: index 是 kernel 的编号, 不是阵列的编号 08/22 17:04
2F:→ LPH66: kernel 做事的概念是「几号 kernel 去拿阵列的哪几格做事」 08/22 17:06
3F:→ LPH66: 只是一般来说会因为方便让 kernel 以自己编号去取元素 08/22 17:06
4F:→ LPH66: 当然其他状况也有可能是会成一个 kernel 抓很多格做事 08/22 17:07
5F:→ LPH66: 这时去取哪几格时就要自己去算哪个 kernel 该取哪几格 08/22 17:07
6F:→ LPH66: 另外你最後的问题, 去找 OpenCL 标准文件里面写得很清楚 08/22 17:09
7F:→ LPH66: 或者我印象中有看过一个是把各种函数整理成的 cheat sheet 08/22 17:09
8F:→ LPH66: (包含 host 端和 kernel 端的函数都有) 08/22 17:09
9F:→ hardman1110: 我传进去的阵列型态大小都不一样,我该如何知道切了 08/22 17:11
10F:→ hardman1110: 多少kernal(work item) 然後每个work item包含每个 08/22 17:12
11F:→ hardman1110: 阵列的哪几格? 08/22 17:13
12F:推 LPH66: 这是你在决定的事; 你要决定每个 work item 的工作量是多少 08/22 17:25
13F:→ LPH66: 每个人要怎麽拿到他所要的工作量做事 08/22 17:25
14F:→ hardman1110: 查到clEnqueueNDRangeKernel可控制要切多少workitem 08/22 17:26
15F:→ LPH66: 有的时候甚至可以写说「几号以後不用做那边的事」之类的 08/22 17:26
16F:→ hardman1110: 但每个workitem对应到阵列哪一段就不清楚原理了 08/22 17:26
17F:→ LPH66: 然後再 enqueue 你要的数量的 workitem 去做事 08/22 17:26
18F:→ LPH66: 例如如果我要一个 workitem 做一格, 那就是照编号取元素 08/22 17:27
19F:→ LPH66: 如果我要一个 workitem 做两格, 那可以编号乘二再取两格 08/22 17:27
20F:→ LPH66: 重点是你要搞懂你是怎麽分配工作下去的 08/22 17:28
21F:→ LPH66: 一个简单的比方是你请了一堆工读生分担工作 08/22 17:29
22F:→ LPH66: 那你总要告诉工读生「你的工作范围在哪里」 08/22 17:29
23F:→ LPH66: 而做出一个简单易懂的分配方式就是你在问的"对应" 08/22 17:29
24F:→ LPH66: 让每个工读生能只从自己分到的编号直接领到工作做 08/22 17:30
25F:→ hardman1110: 这样说起来我要index以哪个阵列为主就enqueue那个阵 08/22 17:45
26F:→ hardman1110: 列的size噜? 08/22 17:45







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP