【问题标题】:What are Reserved Data Types in OpenCL?OpenCL 中的保留数据类型是什么?
【发布时间】:2017-07-21 17:16:27
【问题描述】:

我想编写一个采用 float3 数据类型并返回 bool4 数据类型的内核。我查看了规范,booln 没有像 floatn 那样列在 Built-in Vector Data Types 下,而是列在下面保留数据类型,所以我尝试这样使用它:

( __global const float3 *vectors , __global bool4 *booleans)

但它返回错误Unknown type name 'bool4'。那么什么是保留数据类型,我该如何使用它们呢?

【问题讨论】:

  • 我看了,还是没看懂,不能用为什么要写在规范里?以及使用 bool4 的替代方法是什么?
  • bool4 未保留。如果 n 不是 2 的幂,似乎 typen 是保留的。所以 float3 是保留的,但你可以简单地使用 float4。
  • 您的意思是使用 float4 而不是 bool4?这将非常低效,因为我会将其复制到主机内存中。

标签: c opencl


【解决方案1】:

保留数据类型cannot be used by applications as user-defined type names

  • float3floatn 是保留的,n 不是 2 的幂。所以我建议使用 float4 并且与最后一个组件无关

    李>
  • bool4 保留,booln 保留所有 n。不过,您仍然可以使用char4

如果内存大小真的很重要,您可以使用以下内容:

union {
    char raw;
    struct st {
        unsigned int i : 1; // bit field to use only one bit
    } c[4];
} my_bool4;

然后使用 my_bool4.c[i] 访问 [0,3] 中的所有 i,或使用 my_bool4.raw 和位掩码访问每个组件。

这样,my_bool4 将只有 1 个字节长,而不是 char4 的 4 个字节长(嗯,这取决于编译器,但您要求提供 1 个字节)。

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 2010-10-04
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多