簡體   English   中英

確定在CPU和CUDA上進行模塊化乘法的延遲和吞吐量

[英]Determining latency and throughput for modular multiplication on CPU and CUDA

我需要確定CUDA和CPU(i5 750)上(無符號)模塊化乘法的延遲和吞吐量。

對於我在這份文檔中找到的CPU,第121頁,對於桑迪橋,我並不確定要使用哪一個,但是對於“ MUL IMUL r32”,我得到了4個周期的等待時間,互惠吞吐量等於2。然后“ DIV r64”的延遲時間為30-94,rec.thr。 22-76。

最壞的情況是:

  • 潛伏期94 + 4

  • 記錄 76 + 2

對? 盡管我使用OpenSSL來執行它們,但我可以肯定它們在最低級別始終運行簡單的模塊化乘法。

關於CUDA,目前我正在PTX中執行模塊化乘法:將2 32b數相乘,將結果保存在64b寄存器中,將32b模數加載到64b寄存器中,然后進行64b模數運算。

如果您在此處參閱第76頁,他們說Fermi 2.x上32b整數乘法的吞吐量為16(每個MP每個時鍾周期)。 關於模,他們只是說:“在計算能力為2.x的設備上的20條指令以下” ...

到底是什么意思? 最壞的情況是每MP延遲時間每個模有20個周期? 和吞吐量? 每個MP多少個模數?

編輯:

如果我有一個warp,那么只有warp的前16個線程必須執行32b乘法(每個MP每個周期16個),該怎么辦? 盡管下半年不執行任何操作,但GPU會忙一兩個周期嗎?

[由於您還在NVIDIA論壇( http://devtalk.nvidia.com)上問了同樣的問題,所以我只是將在此處給出的答案復制到了StackOverflow。 通常,在多個平台上提問時,交叉引用會很有幫助。]

對於像GPU這樣的吞吐量架構,延遲是毫無意義的。 確定您感興趣的任何操作的吞吐量數字的最簡單方法是在計划目標的設備上進行測量。 據我所知,這就是為您引用的CPU文檔生成表的方式。

要檢查機器代碼,您可以使用cuobjdump --dump-sass來反匯編機器代碼(SASS)以進行模運算。 當我對sm_20執行此操作時,對於32 / 32-> 32位無符號模,我總共計算了16條指令。 從指令混合來看,我估計在整個GPU上,Tesla C2050的吞吐量約為每秒200億次操作(請注意,這是一個估計值,而不是一個可測量的數字!)。

至於稱為子程序的64 / 64-> 64位無符號模,我最近在使用CUDA 5.0的C2050上測量了每秒64億次操作的吞吐量。

您可能需要研究Montgomery和Barrett的用於模乘的算法,而不是使用除法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM