Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCL编译器错误(动态分配)_C_Opencl - Fatal编程技术网

OpenCL编译器错误(动态分配)

OpenCL编译器错误(动态分配),c,opencl,C,Opencl,我在编译OpenCL内核时遇到问题,无法解释为什么会这样 我得到以下错误: Cannot select: 0x7ff1a9871610: i64,ch = dynamic_stackalloc 0x7ff1ab114cb0, 0x7ff1a9870f10, 0x7ff1a9870710 [ORD=12] [ID=21] 0x7ff1a9870f10: i64 = bitcast 0x7ff1a9871710 [ID=19] 0x7ff1a9871710: v2i32 = IGILIS

我在编译OpenCL内核时遇到问题,无法解释为什么会这样

我得到以下错误:

Cannot select: 0x7ff1a9871610: i64,ch = dynamic_stackalloc 0x7ff1ab114cb0, 0x7ff1a9870f10, 0x7ff1a9870710 [ORD=12] [ID=21]
  0x7ff1a9870f10: i64 = bitcast 0x7ff1a9871710 [ID=19]
    0x7ff1a9871710: v2i32 = IGILISD::MOVSWZ 0x7ff1a9870d10, 0x7ff1a986eb10, 0x7ff1a986eb10, 0x7ff1a986eb10 [ID=15]
      0x7ff1a9870d10: i32 = Constant<8> [ID=12]
      0x7ff1a986eb10: i32 = Constant<0> [ID=9]
      0x7ff1a986eb10: i32 = Constant<0> [ID=9]
      0x7ff1a986eb10: i32 = Constant<0> [ID=9]
  0x7ff1a9870710: i64 = bitcast 0x7ff1a9871110 [ID=18]
    0x7ff1a9871110: v2i32 = IGILISD::MOVSWZ 0x7ff1a986eb10, 0x7ff1a986eb10, 0x7ff1a986eb10, 0x7ff1a986eb10 [ID=14]
      0x7ff1a986eb10: i32 = Constant<0> [ID=9]
      0x7ff1a986eb10: i32 = Constant<0> [ID=9]
      0x7ff1a986eb10: i32 = Constant<0> [ID=9]
      0x7ff1a986eb10: i32 = Constant<0> [ID=9]
In function: mmul
ERROR: Build Program (-11)

block_b是内核的一个参数

..,__local int* restrict block_b)
有什么想法吗?它与数组值c[j]和移位运算符的组合有关。 我可以用这行代码编译内核

valuec[j] = 0
还是用台词

   uchar hello = 0;
   uchar valc = hello ^ ((block_b[(k+i) + block_size * ty] >> (8*j)) & 0xff) ;
但不是用台词

   uchar hello = valuec[j];
   uchar valc = hello ^ ((block_b[(k+i) + block_size * ty] >> (8*j)) & 0xff) ;
或者使用valuec[j]绝对等于0的行

    for (int i = 0 ; i < bytes ; i++) [
        valuec[i]=0;
     }
    uchar hello = valuec[j];
    uchar valc = hello ^ ((block_b[(k+i) + block_size * ty] >> (8*j)) & 0xff) ;

这是哪个OpenCL平台?这看起来像是内部编译器故障,而不是语法错误,因此这可能是实现中的错误,而不是代码中的问题。您是否在其他OpenCL平台上尝试过该代码?OpenCL 1.2。我将在1.1上试用,实际上,我的意思是,在Windows/OS X/Linux上,您的目标设备是什么,例如NVIDIA、AMD、Intel等。同一平台中不同版本的OpenCL可能不会有什么不同。目前运行在名称:Iris版本:OpenCL C 1.2上,我还不知道在没有看到整个内核的情况下,我将使用哪个GPU部署IMHO,如果您没有使用-cl opt disable构建它,我们无法确定这些行是否确实导致了错误问题-cl opt disable删除优化。我有一个例子,编译器基本上是在优化整个内核,当我从末尾删除一行时,我很长时间都认为是这一行导致了错误,即使它完全是另一行。
   uchar hello = 0;
   uchar valc = hello ^ ((block_b[(k+i) + block_size * ty] >> (8*j)) & 0xff) ;
   uchar hello = valuec[j];
   uchar valc = hello ^ ((block_b[(k+i) + block_size * ty] >> (8*j)) & 0xff) ;
    for (int i = 0 ; i < bytes ; i++) [
        valuec[i]=0;
     }
    uchar hello = valuec[j];
    uchar valc = hello ^ ((block_b[(k+i) + block_size * ty] >> (8*j)) & 0xff) ;