内核增加后GPU驱动程序不响应 我是OpenCL的新手,我想实际的并行筛选这个筛子,C++代码在这里:

内核增加后GPU驱动程序不响应 我是OpenCL的新手,我想实际的并行筛选这个筛子,C++代码在这里:,opencl,Opencl,我不知怎的没有从中得到好的结果,事实上CPU版本在比较之后要快得多。我试图使用NDRangekernel来避免编写嵌套循环,并可能提高性能,但当我在函数中给出更高的限制数时,GPU驱动程序停止响应,程序崩溃。也许我的NDRangekernel配置不好,有人能帮我吗?我可能没有得到正确的NDRange,这里是关于我的GPU的信息 CL_装置名称:GeForce GT 740M CL_设备供应商:NVIDIA公司 CL_驱动程序_版本:397.31 CL_设备类型:CL_设备类型\u GPU

我不知怎的没有从中得到好的结果,事实上CPU版本在比较之后要快得多。我试图使用NDRangekernel来避免编写嵌套循环,并可能提高性能,但当我在函数中给出更高的限制数时,GPU驱动程序停止响应,程序崩溃。也许我的NDRangekernel配置不好,有人能帮我吗?我可能没有得到正确的NDRange,这里是关于我的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报告