2016-02-29 92 views

回答

2

因爲沒有用於加載和存儲到CUDA內存層次結構的內在函數,所以不會將它們視爲內在函數。 NVPTX使用加載或存儲指令的指針操作數上的地址空間來確定應該生成哪個PTX指令。

負載的指針address space 1將轉化爲ld.global.<type>,同時在指針address space 3(共享存儲器)來進行的負荷將導致ld.shared.<type>指令。加載到通用指針,即address space 0中的指針將導致ld.<type>指令。

該翻譯發生在NVPTX後端的指令選擇期間。看看./llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp來了解如何在NVPTX中進行指令選擇。例如在SDNode *NVPTXDAGToDAGISel::SelectLoad(SDNode *N)中加載指令被處理。