我看到人們在C代碼中使用內聯PTX彙編代碼的一些代碼示例。 CUDA工具包中的Doc提到PTX功能強大,爲何如此?如果我們在C代碼中使用這些代碼,我們會得到什麼好處?Inline PTX彙編代碼是否強大?
回答
內嵌PTX,您可以訪問通過CUDA intrinsincs不暴露說明,並讓您應用在編譯器要麼缺乏或語言規範禁止優化。對於使用內嵌PTX有利的工作示例,請參閱: 128 bit integer on cuda?
使用內聯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);
加法和減法以上可能編譯成的人數約三至四倍由相應的內嵌PTX版本使用的指令。
性能如何?這樣的代碼注入是否會提升性能? –
在我指出的例子中,使用內聯PTX可以最小化所需的指令數量。如果應用程序的指令吞吐量有限,這有助於應用程序的性能顯然,只有在它提供了明顯的好處的情況下,纔會使用這樣的低級接口,但這適用於在任何平臺上使用內聯彙編。關於過早優化的標準警告適用。 – njuffa
- 1. 彙編代碼是否跨平臺?
- 2. 這段彙編代碼是否無效?
- 3. parasoft C++測試 - 編譯inline彙編代碼
- 4. 是否有程序將x86代碼更改爲彙編代碼?
- 5. 彙編代碼
- 6. 在NVIDIA GPU上編譯ptx代碼?
- 7. 是否有反彙編程序生成可編譯的彙編源代碼?
- 8. 是否有可能強制內聯彙編代碼中的特定寄存器?
- 9. 寫彙編代碼的C++
- 10. iOS彙編代碼
- 11. 彙編代碼MOVS
- 12. C++彙編代碼
- 13. 彙編代碼C
- 14. x86彙編代碼
- 15. ARM彙編代碼
- 16. GMP-彙編代碼?編譯代碼
- 17. 彙編&C - 翻譯C'S代碼彙編
- 18. 反編譯彙編代碼
- 19. IA32彙編代碼Y86彙編代碼:leal指令
- 20. 轉換GCC彙編代碼爲armasm彙編代碼
- 21. 彙編代碼中的.arm是什麼?
- 22. 是否可以在Google Go代碼中包含內聯彙編?
- 23. 操作系統是否與彙編代碼交互?
- 24. 是否有任何8051彙編語言C代碼轉換器
- 25. Xcode是否爲Swift文件生成彙編代碼?
- 26. 是否可以將彙編代碼包含到php腳本中?
- 27. gcov是否提供彙編語言代碼的代碼覆蓋率分析
- 28. C++代碼片段的彙編代碼
- 29. C++代碼中的彙編代碼
- 30. 彙編代碼到C代碼
這個問題有點像問「是長根繩子嗎?」。沒有確切的答案。在某些情況下,對編譯器發出的PTX指令有明確的控制是有利的或必要的,以及其他情況下不適用的情況。 PTX仍然只是GPU運行代碼的中間代表。 – talonmies
我期待的一些例子,其中可以顯示PTX的權力,這將說服我。我承認,這是一般的問題,但我需要一些例子,在那裏我可以說服自己,用PTX爲您提供了CUDA-C不能給 –
內嵌PTX,您可以訪問通過CUDA intrinsincs不暴露說明一些額外的力量,讓你申請編譯器缺乏或語言規範禁止的優化。對於使用內聯PTX有利的工作示例,請參閱:http://stackoverflow.com/questions/6162140/128-bit-integer-on-cuda/6220499#6220499 – njuffa