【发布时间】:2021-02-27 20:37:21
【问题描述】:
我有下一个代码
#include <stdio.h>
#include <cuda.h>
#include <cuda_runtime.h>
__global__ void cuda_test() {
int result;
asm(
".reg .u32 r1;\n\t"
"add.cc.u32 r1, 0, 0;\n\t"
"subc.u32 %0, 0, 0; \n\t"
:"=r"(result)
);
printf("r= %x\n", result);
}
int main() {
cuda_test<<<1, 1>>>();
cudaDeviceSynchronize();
return 0;
}
此代码打印
r= ffffffff
为什么?据我所知,操作add.cc.u32 r1, 0, 0 必须将进位标志设置为0。我的印象是subc.u32 操作使用了CC.CF 的倒数。但从文档来看,它不应该是这样的。
【问题讨论】: