是否可以重新解释已传递到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;
}
无论constArray[16]中有什么,总是在im[0]中导致零。
问候,
马克。
OpenCL包含as_typen
运算符家族,用于重新解释从一种类型到另一种类型的值强制转换。如果我理解这个问题,你应该能够做一些类似的事情
__kernel void Test(__global float* im, __constant int* constArray)
{
float x = as_float(constArray[16]);
im[0] = x;
}