内核增加后GPU驱动程序不响应 我是OpenCL的新手,我想实际的并行筛选这个筛子,C++代码在这里:
我不知怎的没有从中得到好的结果,事实上CPU版本在比较之后要快得多。我试图使用NDRangekernel来避免编写嵌套循环,并可能提高性能,但当我在函数中给出更高的限制数时,GPU驱动程序停止响应,程序崩溃。也许我的NDRangekernel配置不好,有人能帮我吗?我可能没有得到正确的NDRange,这里是关于我的GPU的信息内核增加后GPU驱动程序不响应 我是OpenCL的新手,我想实际的并行筛选这个筛子,C++代码在这里:,opencl,Opencl,我不知怎的没有从中得到好的结果,事实上CPU版本在比较之后要快得多。我试图使用NDRangekernel来避免编写嵌套循环,并可能提高性能,但当我在函数中给出更高的限制数时,GPU驱动程序停止响应,程序崩溃。也许我的NDRangekernel配置不好,有人能帮我吗?我可能没有得到正确的NDRange,这里是关于我的GPU的信息 CL_装置名称:GeForce GT 740M CL_设备供应商:NVIDIA公司 CL_驱动程序_版本:397.31 CL_设备类型:CL_设备类型\u GPU
- CL_装置名称:GeForce GT 740M
- CL_设备供应商:NVIDIA公司
- CL_驱动程序_版本:397.31
- CL_设备类型:CL_设备类型\u GPU
- CL_设备最大计算单位:2
- CL\ U设备\最大工作\项目\尺寸:3
- CL\ U设备\最大工作\项目\尺寸:1024/1024/64
- CL_设备最大工作组大小:1024
- CL_设备最大时钟频率:1032 MHz
- CL_设备_地址_位:32
- CL_设备最大内存分配大小:512 MB
- CL_设备_全局_内存大小:2048 MB
- CL\ U设备\错误\纠正\支持:否
- CL\ U设备\本地\成员\类型:本地
- CL_设备_本地_内存大小:48 KB
- CL\ U设备\最大\常数\缓冲区\大小:64 KB
- CL_设备_队列_属性:
-CL\u队列\u超出\u顺序\u执行模式\u启用 - CL_设备\u队列\u属性:CL_队列\u分析\u启用
- CL\ U设备\图像\支持:1
- CL\ U设备\最大\读取\图像\参数:256
- CL\ U设备\最大\写入\图像\参数:16 这是我的NDRange代码 queue.enqueueNDRangeKernel(add,cl::NDRange(1,1),cl::NDRange((limit*limit)-1,(limit*limit)-1),cl::NullRange,NULL,&事件)
__kernel void sieveofAktin(const int limit, __global bool* sieve)
{
int x = get_global_id(0);
int y = get_global_id(1);
//printf("%d \n", x);
int n = (4 * x * x) + (y * y);
if (n <= limit && (n % 12 == 1 || n % 12 == 5))
sieve[n] ^= true;
n = (3 * x * x) + (y * y);
if (n <= limit && n % 12 == 7)
sieve[n] ^= true;
n = (3 * x * x) - (y * y);
if (x > y && n <= limit && n % 12 == 11)
sieve[n] ^= true;
for (int r = 5; r * r < limit; r++) {
if (sieve[r]) {
for (int i = r * r; i < limit; i += r * r)
sieve[i] = false;
}
}
}
\uuuuu内核无效sieveofAktin(常量整数限制,\uuuuu全局布尔*sieve)
{
int x=获取全局id(0);
int y=获取全局id(1);
//printf(“%d\n”,x);
int n=(4*x*x)+(y*y);
如果(n您的代码中有很多分支,我怀疑这可能会影响您在GPU上的性能
如果不仔细研究算法,我不确定这有多可能,但理想情况下,您希望重写代码以使用尽可能少的分支。或者,您可以完全研究其他算法
至于锁定,我需要查看更多的主机代码才能知道发生了什么,但有可能您超出了平台/设备的各种限制。您是否在检查您调用的每个OpenCL函数的错误?您在该代码中有很多分支,我怀疑这可能会影响您在GPU上的性能。请看第6章详细介绍了这会影响性能的原因
如果不仔细研究算法,我不确定这有多可能,但理想情况下,您希望重写代码以使用尽可能少的分支。或者,您可以完全研究其他算法
至于锁定,我需要查看更多的主机代码才能知道发生了什么,但有可能您超出了平台/设备的各种限制。您是否正在检查您调用的每个OpenCL函数的错误?无论您的算法或实现有多好或有多差,驱动程序都应该始终响应。无响应很可能是一个bug。请在处提交bug报告。无论您的算法或实现有多好或有多差,驱动程序都应始终响应。无响应很可能是一个bug。请在处提交bug报告