我正在研究不同的排序算法,並嘗試考慮如何將它們移植到GPU時,如果我有這種排序的想法而沒有實際排序。這是我的內核的樣子:快速破解排序:我是否正確地執行此操作?
__global__ void noSort(int *inarr, char *outarr, int size)
{
int idx = threadIdx.x + blockIdx.x * blockDim.x;
if (idx < size)
outarr[inarr[idx]] = 1;
}
然後在主機側,我只是打印數組索引,其中outarr[i] == 1
。現在有效地,上面的代碼可以用來對整數列表進行排序,並且這可能比實際排序的算法更快。
這合法嗎?
謝謝你指出一些很好的資源。由於我計劃編寫一個程序來使用多個GPU進行排序,所以有點離題了。有使用多個GPU對大量數字進行排序的實現嗎?我認爲NVidia網站的分類Networks代碼示例在單個GPU上工作。或者說,讓我這樣說...在實際世界中它可能有多大用處? – Sayan
我不知道有任何多GPU排序代碼,但它絕對有可能構建一個。最簡單的做法是在每個設備上使用現有的(單GPU)排序並將結果合併在一起,可能使用P2P副本來加速GPU間的通信。 – wnbell