Declspec A Struct,在创建缓冲区以发送到 OpenCL 内核时
Posted
技术标签:
【中文标题】Declspec A Struct,在创建缓冲区以发送到 OpenCL 内核时【英文标题】:Declspec A Struct, when Creating a buffer to send into OpenCL kernel 【发布时间】: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? 【参考方案1】:听起来您可能想要做的是在 16 位字节边界对齐数据。应该是这样的:
_declspec(align(16)) struct pos
2Floats posi;
请注意,数字不是数据的大小,而是您需要的对齐方式。在幕后,我确信 OpenCL 正在尝试使用一些需要内存对齐的 SIMD 操作。如果您可以提供您尝试调用的函数的名称,我相信文档说明了必要的对齐方式。大多数 SIMD 操作需要在 16 位边界上对齐。
再一次,因为数字询问的是字节边界而不是数据的大小,所以 2float 有多大并不重要。但是,它们是两个 32 位浮点数,因此是 8 个字节。
【讨论】:
以上是关于Declspec A Struct,在创建缓冲区以发送到 OpenCL 内核时的主要内容,如果未能解决你的问题,请参考以下文章
struct.unpack() struct.error: unpack 需要 124 字节的缓冲区
c# - 如何调用分配输出缓冲区以在c#中返回数据的非托管c++函数?
Python 可写缓冲区/内存视图到数组/字节数组/ctypes 字符串缓冲区