重新解释OpenCL1.0中的参数时出现问题
是否可以重新解释已传递到OpenCL内核中的参数。例如,如果传入一个整数数组,但我想将索引16处的整数解释为浮点(不要问为什么!),那么我会认为这是可行的重新解释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
__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。对不起,是的!。我将对问题进行编辑以反映这一点。非常感谢您抽出时间来帮忙