【问题标题】:Declspec A Struct, when Creating a buffer to send into OpenCL kernelDeclspec A Struct,在创建缓冲区以发送到 OpenCL 内核时
【发布时间】:2016-03-08 21:00:35
【问题描述】:

我尝试通过论坛搜索此内容,但找不到任何内容。我想将一个结构传递给我的 OpenCL 文件,但似乎无法理解 declspec_align 函数。基本上,我有两个结构,这就是我尝试这样做的方式:

struct 2Floats {
  float x, y;
}

_declspec(align(8)) struct pos {
    _declspec(align(8)) 2Floats posi;
}

但这似乎没有正确传递,我只是想知道是否有人可以告诉我 Id 传递了多少字节?我以为浮点数是 4,但似乎我错了。

【问题讨论】:

  • 您要调用 OpenCL 中的哪个 api?

标签: c++ c struct opencl


【解决方案1】:

听起来您可能想要做的是在 16 位字节边界对齐数据。应该是这样的:

_declspec(align(16)) struct pos {
    2Floats posi;
}

请注意,数字不是数据的大小,而是您需要的对齐方式。在幕后,我确信 OpenCL 正在尝试使用一些需要内存对齐的 SIMD 操作。如果您可以提供您尝试调用的函数的名称,我相信文档说明了必要的对齐方式。大多数 SIMD 操作需要在 16 位边界上对齐。

再一次,因为数字询问的是字节边界而不是数据的大小,所以 2float 有多大并不重要。但是,它们是两个 32 位浮点数,因此是 8 个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多