作者fishlinghu (令狐瑜)
看板C_and_CPP
标题Re: [问题] OpenCL GPU benchmark
时间Sat Oct 22 20:21:10 2016
: hmmmm,
: 你没有放程式码,只能猜测你没有检查return value,
: 例如事实上他从clGetPlatformIDs或clGetDeviceIDs就失败了,
: 或者你的Kernel Source在clBuildProgram编译过程中有错误,
: 所以clCreateContext或後面的操作也都只是在面对invalid argument
: 在kernel内超出存取范围也会让kernel直接跳掉。
我有检查return value
应该是没有错误
: memory transferring time看你data size有多大,因为也不知道你用的是哪个API
: 是clEnqueueWriteBuffer吗? 还是SVM?
我是先用writebuffer把资料从host写到device
kernel长这样
做的事情只是把data从source copy到destination
__kernel void bw(__global unsigned char* src, __global unsigned char* dst)
{
int xid = get_global_id(0) + get_global_size(0) * get_global_id(1) + get_global_size(0) * get_global_size(1) * get_global_id(2);
dst[xid] = src[xid];
}
然後在host program那边测试kernel执行时间
除出来1XXX GB/s
而且数字很飘
更惨的是data变小
执行时间也没变小很多
感觉一定是哪边测错了
: 搞不好因为Intel Graphic的data传很快而没有像是PCIe的瓶颈。
: 因此还是得将程式码摊开,把程式印出讯息秀出来才知道问题
我code有放GitHub
有兴趣的人可以看一下
不过有点乱乱的= =
https://github.com/fishlinghu/OpenCL/blob/master/gpu_cache_profile_3.cpp
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 128.61.97.245
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1477138875.A.66F.html
1F:推 LPH66: xid 计算是不是应该要有 get_global_id(1)? 10/22 20:50
2F:→ LPH66: 你的中间项是两个 get_global_size() 相乘 10/22 20:50
3F:→ LPH66: 喔, 我看错了 orz 10/22 20:51
4F:推 VictorTom: 弱弱问一句 clGetDeviceInfo() 不就可以问cache/line 10/25 23:12
5F:→ VictorTom: size了吗?_? 10/25 23:14
6F:推 sOuOr: 原po可能想练习自己测试? 不然照你说上网也可以查啊XDD 10/27 04:48