nvcc是否具有等效于fsingle精度常数的值



gcc允许-fsingle精度常数,以省去手动将f添加到每个文字常数的麻烦。nvcc中有什么方便的等价物吗?

我相信对于较新的体系结构(或者至少对于编译器驱动程序或设备C编译器)来说答案是否定的

旧的基于Open64的编译器支持大量的命令行选项(尽管许多选项什么都没做)。可能通过-Xcompiler=-fshort-double将所有双精度计算强制转换为单精度。编译器在编译到缺少本机双精度支持的sm_10、sm_11和sm_12目标时,会自动为双精度浮点执行此操作。旧的编译器仍然用于计算1.x目标,所以这仍然是可能的。

新的cicc LVVM前端(用于计算能力>1.x的设备)支持更短的参数列表,并且它们没有记录在AFAIK中。我自己的浏览显示了以下控制代码生成和输出的选项:

-generate-line-info
-device-c
-kernel-params-are-restrict
-restrict
-disable-inlining
-Wno-memory-space
-disable-llc-opts
-show-src
-g
-O3
-O0
-fmad=0
-fmad=1
-prec-div=0
-prec-div=1
-prec-sqrt=0
-prec-sqrt=1
-ftz=0
-ftz=1
-m64
-m32

所以我认为你运气不好。然而,如果真的想这样做,那么可能有空间自己编写一个LLVM传递,将双精度常数转换为cicc发射的IR中的浮点值。这个问题看起来像是有人在问或多或少相同的事情,可能会给你一个起点。

最新更新