2012-04-05 27 views
2

我是OpenCL的新手,我正在編寫一個RSA保理應用程序。理想情況下,應用程序應該可以在NV和AMD GPU目標上運行,但是我沒有找到一種簡單的方法來確定每個GPU上的內核/流處理器總數。OpenCL - 如何在每個核心上產生一個單獨的數學過程

是否有一種簡單的方法可以確定在任何硬件平臺上有多少個總內核/流處理器,然後在每個可用內核上產生一個保理線程?目標RSA模數將位於共享內存中,並且每個因數分解線程都使用對模數的Rho分解攻擊。

此外,任何想法,如果OpenCL支持類似於GNU MP的多精度數學庫,存儲大型半素數?

在此先感謝

+0

我建議您將第二個問題轉換爲單獨的問題。 – 2012-04-05 23:04:24

回答

2

在GPU上,你不產卵一個線程每個核心,就像您在CPU上。相反,你想要啓動比核心更多的線程。我不擔心給定目標平臺上可用的核心數量。相反,不要專注於最適合你的問題。

2

要添加到Roger的答案中,之所以希望擁有比核心更多的線程,是因爲GPU實現了非常高效的context switching來隱藏memory latency。通常,就處理器接收所請求的數據所花費的時間而言,每個存儲器訪問是非常昂貴的操作。但是如果一個線程正在等待一個內存事務,它可以被「暫停」,並且另一個線程可以被激活來在此期間進行計算(或其他內存訪問)。所以如果你有足夠的線程,你可以隱藏內存訪問延遲,你的軟件可以在硬件的全部計算能力下運行(否則很少發生)。

我會在羅傑的帖子中發表評論,但它的大小超出了限制。

相關問題