在学习CUB库的radix sort时,会出现一系列一开始看起来奇怪的数字。现将其含义解释如下。
出现不同数字代表的含义
这是由于16bit合并为32bit和小端方式决定的。
-
65537
在同一个线程中,一个数的sub_counter为0,即0000,0000,0000,0001,注意为小端存放方式,其存放方式为0000,0001,0000,0000;一个sub_counter为1,即0000,0000,0000,0001,其存放方式为0000,0001,0000,0000。但是其counter_lane相同。那么,将会组成一个32位数字,存放为:0000,0001,0000,0000;0000,0001,0000,0000。那么此32位数字为0000,0000,0000,0001;0000,0000,0000,0001,即65537.
131072
一个线程中,两个数的sub_counter都为1,且counterlane相同,此时数值为0000,0000,0000,0000;0000,0000,0000,0010.但是cuda为小端方式存储,存储为0000,0000,0000,0000;00000,0010,0000,0000.当把这32位数字看成一个整体时,其真实值变为0x00010000,即2^17=1310721
在同一个线程中,其sub_counter为0,但是其又不在同一个counter_lane中。则有0000,0000,0000,0001,存储为0000,0001,0000,0000;假如又遇到的下一个16bits全为0,即0000,0000,0000,0000,则整个32bits存储为0000,0001,0000,0000;0000,0000,0000,0000,那么其值实际为0000,0000,0000,0000;0000,0000,0000,0001,即为12
在同一个线程中,其sub_counter都2为0,同时两个数的counter_lane相等,则有0000,0000,0000,0010,存放方式为:0000,0010,0000,0000;假如又遇到的下一个16bits全为0,即0000,0000,0000,0000,则整个32bits存储为0000,0010,0000,0000;0000,0000,0000,0000,那么其值实际为0000,0000,0000,0000;0000,0000,0000,0010,即为265536
在同一个线程中,一个数的sub_counter为1,另外一个数字和此数不在同一个counter_lane中,则此时二进制为:0000,0000,0000,0000;0000,0000,0000,0001,存储方式为:0000,0000,0000,0000;0000,0001,0000,0000(按16bits分开存储哦),和并成32bits后,其值为0000,0000,0000,0001;0000,0000,0000,0000,即65536。-
小结如下: