关于字节的顺序问题

1. Little endian:将低序字节存储在起始地址
2. Big endian:将高序字节存储在起始地址
不知道CUDA是如何定义的,感觉上是1?那么如何兼容不同的操作系统呢?

NV的卡似乎是低序的,如果CPU是高序的,我想应该在内核内读取内存后做一个转换,可以写一个__device__的函数做一下字节交换!

CUDA是little endian的,和X86一样。

可以参考如下网页的说明:
http://www.ncsa.illinois.edu/UserInfo/Training/Workshops/CUDA/presentations/tutorial-CUDA.html

http://www.cnblogs.com/dorothychai/archive/2009/04/24/2268163.html

http://www.lingcc.com/2010/02/26/10701/

祝您编码愉快~

首先说,田总的前半部分说法是完全正确的。

其次,田总的后半部分的确没错,不够如果我们不想费事,不用写kernel, 因为CUDA已经提供了相应的intrinsic.

即:如果需要对一个不同endianess的uint32_t进行字节顺序调换,您无需单独写__device__ function, 您可以直接就地使用__byte_perm()这个intrinsic function来调换, 它会被编译为一条直接就地插入的指令。

如果楼主还有其他问题,欢迎继续访问论坛。
例如:如果楼主还需要理解如何调换位顺序,可以考虑使用__brev这个intrinsic,也是会就地编译为单条指令,在2.x+上。

建议楼主多看看手册。没坏处。当然也可以不看。

此外,需要为你纠正的是,不是OS定义了尾端顺序,而是硬件。举个例子,你用的x86 cpu是little endian, 你不可能载入某特定OS的,将x86改成big endian的,这是不可能的。

感谢来访。