字节顺序和OpenCL传输

时间:2014-02-24 03:26:25

标签: opencl endianness

在OpenCL中,从CPU客户端到GPU服务器端的转移是通过clEnqueueReadBuffer(...) / clEnqueueWriteBuffer(...)完成的。但是,文档未指定是否在底层驱动程序中进行任何与字节序相关的转换。

我正在开发x86-64和NVIDIA显卡 - 这两个小端,所以我不会遇到潜在的问题。

转换是否发生,或者我是否需要自己进行转换?

3 个答案:

答案 0 :(得分:0)

您可以查询设备字节顺序(使用clGetDeviceInfo并检查CL_DEVICE_ENDIAN_LITTLE),但我不知道允许透明转换的方式。

答案 1 :(得分:0)

转移不会进行任何转换。运行时不知道数据的类型。

您可能只期望在内核参数上进行转换。

答案 2 :(得分:0)

这一点,INMHO规范并不令人满意。 首先很清楚指针,即指针引用的数据可以是主机或设备字节顺序,并且可以通过指针属性声明这一点,默认字节顺序是设备的顺序。 因此,根据这一点,开发人员必须处理它们作为内核输入提供的字节序。 但是,与“附录B - 可移植性”相比,实施可能会或可能不会自动转换内核参数的字节顺序,并且开发人员应查看供应商的文档,以防主机和设备字节顺序不同。 对不起,我是直接的,但是什么狗屎。我的意思是OpenXX规范的目的是使它们能够编写跨平台代码。但是,如果存在可能因实现而异的重要问题,则这是不可能的。 接下来的一点是,这对OpenCL / OpenGL互操作意味着什么。 在OpenGL中,像VBO这样的缓冲区对象的数据必须是主机字节顺序。那么在OpenCL和OpenGL之间共享这样的缓冲区的情况。是否必须在OpenCL内核处理它们之前和之后转换它的数据?