在OpenCL 1.0中重新解释参数时出现问题

时间:2011-06-07 12:03:50

标签: opencl

是否可以重新解释已传递到OpenCL内核的参数。例如,如果我有一个整数数组被传入,但我想将索引16处的整数解释为float(不要问为什么!)然后我会认为这会起作用。

__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;
}
无论constArray [16]中有什么内容,

总是在im [0]中得到零。

此致

标记。

1 个答案:

答案 0 :(得分:1)

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

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