Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
重新解释OpenCL1.0中的参数时出现问题_Opencl - Fatal编程技术网

重新解释OpenCL1.0中的参数时出现问题

重新解释OpenCL1.0中的参数时出现问题,opencl,Opencl,是否可以重新解释已传递到OpenCL内核中的参数。例如,如果传入一个整数数组,但我想将索引16处的整数解释为浮点(不要问为什么!),那么我会认为这是可行的 __kernel void Test(__global float* im, __constant int* constArray) { float x = *( (__constant float*) &constArray[16] ); im[0] = x; } 但是,当我下次尝试使用命令队列时,我得到一个CL_INVA

是否可以重新解释已传递到OpenCL内核中的参数。例如,如果传入一个整数数组,但我想将索引16处的整数解释为浮点(不要问为什么!),那么我会认为这是可行的

__kernel void Test(__global float* im, __constant int* constArray)
{
  float x = *( (__constant float*) &constArray[16] );
  im[0] = x;
}
但是,当我下次尝试使用命令队列时,我得到一个CL_INVALID_COMMAND_QUEUE错误,这意味着上面的代码执行了非法操作

有没有人建议上述内容有什么问题,和/或如何实现重新解释

我现在尝试:

__kernel void Test(__global float* im, __constant int* constArray)
{
  float x = as_float(0x3f800000);
  im[0] = x;
}
这确实给了im[0]1.0f。但是,

__kernel void Test(__global float* im, __constant int* constArray)
{
  float x = as_float(constArray[16]);
  im[0] = x;
}
无论常量数组[16]中的内容是什么,im[0]中的结果始终为零

问候,

标记。

OpenCL包含用于将值从一种类型重新解释为另一种类型的运算符系列。如果我理解了这个问题,你应该可以做如下的事情

__kernel void Test(__global float* im, __constant int* constArray)
{
  float x = as_float(constArray[16]);
  im[0] = x;
}

谢谢你的回复。我尝试了as_float,虽然这不会导致无效的命令队列,但结果始终为零。更改传递到内核的数据类型似乎有些奇怪。这似乎并不取决于数据是常数还是全局的。使用的是哪个工具包、操作系统和硬件?Ubuntu 64位、NVidia Quadro 6000、NVidia驱动程序270.41.19希望在最后两种情况下,您实际上是将x定义为浮点?oops。对不起,是的!。我将对问题进行编辑以反映这一点。非常感谢您抽出时间来帮忙