Assembly 向cuda中的二进制文件添加伪指令

Assembly 向cuda中的二进制文件添加伪指令,assembly,cuda,Assembly,Cuda,我试图在CUDA文件中标记一个代码区域,然后在GPGPU Sim(一种流行的CUDA代码模拟器)中进行模拟。我想向CUDA添加一条伪指令,然后在模拟器中捕获它。我以前在X86指令集中也这样做过,但这里的工作方式不同。我在X86中实现这一点的方法是向.C文件添加内联汇编代码,如下所示: __asm__ __volatile__ (".byte 0x60;\n") 这将在汇编代码中引入“错误”指令。我正试图向CUDA文件添加这样一个“糟糕”的指令。有什么建议吗?你到底尝试了什么,结果如何?as

我试图在CUDA文件中标记一个代码区域,然后在GPGPU Sim(一种流行的CUDA代码模拟器)中进行模拟。我想向CUDA添加一条伪指令,然后在模拟器中捕获它。我以前在X86指令集中也这样做过,但这里的工作方式不同。我在X86中实现这一点的方法是向.C文件添加内联汇编代码,如下所示:

  __asm__ __volatile__ (".byte 0x60;\n")

这将在汇编代码中引入“错误”指令。我正试图向CUDA文件添加这样一个“糟糕”的指令。有什么建议吗?

你到底尝试了什么,结果如何?
as
pxtas
之间的一个区别是后者是一个编译器,而不仅仅是一个汇编程序。例如,它执行死代码消除。另一个区别是,
0x60
可能映射到一条有效的x86指令(我没有检查),但它肯定不是GPU的有效指令,GPU的指令长度通常为8字节。我不确定CUDA的内联PTX支持是否允许
.byte
作为代码的一部分。我知道我以前使用内联PTX插入过标记,但我记不起我使用了什么罕见的指令。@njuffa谢谢。我只是想在一些说明周围添加一些标记。类似于“nop”指令的东西,这样我就可以在模拟器中检测到它。您可以尝试这样做:通过内联PTX插入一条no-op指令,然后使用-Xptxas-O0编译以禁用
ptxas
优化。我不确定这是否会保留no op指令。作为代码优化的一部分,
ptxas
将删除所有死代码,特别是没有数据依赖关系的指令,并且在执行指令调度时,它还将更改指令顺序。这使得在机器代码中添加标记变得困难。作为编译器,
ptxas
不提供CPU上的汇编程序
As
所提供的控制级别。无操作的问题是编译器可能还会在代码中插入一些无操作。那么就不可能检测出编译器插入的是no op还是我插入的op。我认为您可以使用“asm volatile”强制编译器,而不是将其优化掉。对吗?PTX指令pmevent.mask可以与内联程序集一起插入。此指令采用16位立即数,因此可以检测到2^16编码。此指令是no op的一种变体,可将16位数据驱动至PMS系统。一些探查器使用此指令,但它不是由编译器生成的。编译器可以移动指令,但不应删除指令。有关更多信息,请参阅。