是否可以重新解释已传递到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]中得到零。
此致
标记。
答案 0 :(得分:1)
OpenCL包含as_typen
运算符系列,用于将值从一种类型重新解释为另一种类型。如果我理解这个问题,你应该可以做一些像
__kernel void Test(__global float* im, __constant int* constArray)
{
float x = as_float(constArray[16]);
im[0] = x;
}