【发布时间】:2015-01-15 14:01:38
【问题描述】:
我似乎记得得到提示,我应该尽量避免在 CUDA 内核中使用 char,因为 SM 喜欢 32 位整数。使用它们会有一些速度损失吗?例如,是不是做的比较慢
int a[4];
int b = a[0] + a[1] + a[2] + a[3];
a[1] = a[3];
a2[0] = a[0]
比
char a[4];
char b = a[0] + a[1] + a[2] + a[3];
a[1] = a[3];
a2[0] = a[0]
在内核代码中?
注意事项:
- 我对使用 char 值进行算术运算、执行比较以及将它们读取和写入内存的惩罚感兴趣。
【问题讨论】:
-
使用
char将需要在对它们执行算术运算时从 8 位转换为 32 位并返回。它不完全是 slow (查看您的设备功能),但它也不是免费的。除非您出于特定原因(内存使用等)需要char,否则我建议尽可能使用int。 -
这取决于
a的使用方式。您的示例代码实际上并没有做任何事情,因此很难推测您的用例。回答这个问题确实需要知道a在内存中的位置。 -
@JaredHoberock:我希望我能解释一下。
-
@ParkYoung-Bae:嗯,这要多少钱?另外,如果我不对它们进行算术运算怎么办(与示例不同?)
-
关于内存的读写:使用共享内存和char有点棘手。访问共享内存时,如果步长不为 4,您将遇到共享内存库冲突。在实际 GPU 上,共享内存的粒度可以设置为 4 或 8 字节。
标签: c++ c performance types cuda