Cuda 内联PTX汇编代码功能强大吗?

Cuda 内联PTX汇编代码功能强大吗?,cuda,Cuda,我看到一些代码示例,其中人们在C代码中使用内联PTX汇编代码。CUDA工具包中的文档提到PTX功能强大,为什么如此?如果我们在C代码中使用这样的代码,我们会得到什么好处?内联PTX允许您访问未通过CUDA intrinsincs公开的指令,并允许您应用编译器中缺少的或语言规范禁止的优化。有关使用内联PTX的有利示例,请参阅: 使用内联PTX的128位加法只需要四条指令,因为它可以直接访问进位标志。作为HLL,C/C++没有进位标志的表示,因为给定的硬件平台可能没有进位标志(例如MIPS)、单个

我看到一些代码示例,其中人们在C代码中使用内联PTX汇编代码。CUDA工具包中的文档提到PTX功能强大,为什么如此?如果我们在C代码中使用这样的代码,我们会得到什么好处?

内联PTX允许您访问未通过CUDA intrinsincs公开的指令,并允许您应用编译器中缺少的或语言规范禁止的优化。有关使用内联PTX的有利示例,请参阅:

使用内联PTX的128位加法只需要四条指令,因为它可以直接访问进位标志。作为HLL,C/C++没有进位标志的表示,因为给定的硬件平台可能没有进位标志(例如MIPS)、单个进位标志(例如x86、sm_2x)甚至多个进位标志。与128位加法和减法的4指令PTX版本不同,这些操作可以用C编码,如下所示:

#define SUBCcc(a,b,cy,t0,t1,t2) \
  (t0=(b)+cy, t1=(a), cy=t0<cy, t2=t1<t0, cy=cy+t2, t1-t0)
#define SUBcc(a,b,cy,t0,t1) \
  (t0=(b), t1=(a), cy=t1<t0, t1-t0)
#define SUBC(a,b,cy,t0,t1) \
  (t0=(b)+cy, t1=(a), t1-t0)
#define ADDCcc(a,b,cy,t0,t1) \
  (t0=(b)+cy, t1=(a), cy=t0<cy, t0=t0+t1, t1=t0<t1, cy=cy+t1, t0=t0)
#define ADDcc(a,b,cy,t0,t1) \
  (t0=(b), t1=(a), t0=t0+t1, cy=t0<t1, t0=t0)
#define ADDC(a,b,cy,t0,t1) \
  (t0=(b)+cy, t1=(a), t0+t1)

unsigned int cy, t0, t1, t2;

res.x = ADDcc  (augend.x, addend.x, cy, t0, t1);
res.y = ADDCcc (augend.y, addend.y, cy, t0, t1);
res.z = ADDCcc (augend.z, addend.z, cy, t0, t1);
res.w = ADDC   (augend.w, addend.w, cy, t0, t1);

res.x = SUBcc  (minuend.x, subtrahend.x, cy, t0, t1);
res.y = SUBCcc (minuend.y, subtrahend.y, cy, t0, t1, t2);
res.z = SUBCcc (minuend.z, subtrahend.z, cy, t0, t1, t2);
res.w = SUBC   (minuend.w, subtrahend.w, cy, t0, t1);
定义子合同(a、b、cy、t0、t1、t2)\
这个问题有点像问“一根绳子长吗?”。没有一个明确的答案。在某些情况下,明确控制编译器发出的PTX指令是有利的或必要的,而在其他情况下则不是。PTX仍然只是GPU将运行的代码的中间表示形式。我希望有一些示例可以展示PTX的威力,这会让我信服。我承认这是一个一般性的问题,但我需要一些例子来说服自己,使用PTX可以给你一些CUDA-C无法提供的额外威力。内联PTX可以让你访问未通过CUDA内部函数公开的指令,并让你应用优化,这些优化要么是在comp中缺乏的,要么是语言规范禁止使用内联PTX。有关使用内联PTX有利的工作示例,请参阅:Hey njuffa@,将该评论升级为回答:-)@ArchaEastware:谢谢,完成。我错过了原始海报上的澄清,他只是在寻找一个具体的例子,而我通过内联PTX指向128位算术的指针应该很符合要求。性能呢?这样的代码注入能提高性能吗?在我提到的例子中,内联PTX的使用使所需的指令数量最小化。如果应用程序的指令吞吐量有限,这有助于提高应用程序的性能。显然,人们只希望在提供明显好处的地方使用这种低级接口,但这适用于在任何平台上使用内联汇编。有关过早优化的标准警告适用。