我正在使用nvcc编译一个CUDA内核。不幸的是,nvcc似乎不支持uint8_t
,尽管它确实支持int8_t
(!)。出于可移植性、可读性和理智的原因,我宁愿不使用unsigned char
。还有别的好办法吗?
为了避免任何可能的误解,这里有一些细节。
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2010 NVIDIA Corporation
Built on Mon_Jun__7_18:56:31_PDT_2010
Cuda compilation tools, release 3.1, V0.2.1221
含码
int8_t test = 0;
很好,但是代码包含
uint8_t test = 0;
抛出一个错误消息,如
test.cu(8): error: identifier "uint8_t" is undefined
发布于 2010-11-15 14:07:32
C99整数类型不是“编译器定义的”-它们是在<stdint.h>
中定义的。
尝试:
#include <stdint.h>
发布于 2010-11-15 14:07:30
typedef unsigned char uint8_t;
发布于 2010-11-15 14:08:42
这与Mac使用的没有什么不同:
typedef unsigned char uint8_t;
您对unsigned char
的可移植性有什么担心?如果关注的是一个char
可能不代表8位存储,那么您可以按照以下方式包含一个静态断言:
typedef int Assert8BitChar[(CHAR_BIT == 8)? 0 : -1];
这将在违反假设时导致编译错误。
https://stackoverflow.com/questions/4189243
复制