我有興趣瞭解使用多個處理器乘以大整數modulo(大)常量的時間複雜度。歸結起來基本上只是整數乘法,因爲除法和餘數也可以用乘法實現(例如reciprocal multiplication或Barrett reduction)。在多個處理器上進行大整數模乘運算的最快運行時間是多少?
我知道currently known integer multiplication algorithms的運行時間大致以下限o(n * log n)
爲界。我的研究未能發現這是否適用於單核或多核機器。但是,我認爲這是針對單核機器的,因爲這些算法似乎採用了分而治之的方法。
現在我的問題是,在m
內核上實現的並行整數乘法算法的時間複雜度的當前已知下限是多少?給定足夠的核心,可以在o(n)
或更低的下限內實現時間複雜度? (即,如果m
取決於n
?)這裏o(n)
描述了手頭整數的輸入大小。
到目前爲止,在我的研究中,我已經閱讀了幾篇聲明使用並行FFT乘法加速的論文。不幸的是,這些僅僅宣稱經驗加速(例如,「在這樣和那樣的計算機上使用6個核心的速度提高了56%」),然後未能解釋在時間複雜度範圍內表達的理論加速。
我知道「最快」的整數乘法算法尚未找到,這是一個unsolved problem in computer science。我只是在詢問目前已知的這種並行算法的邊界。
更新#1:用戶@delnan鏈接到關於NC complexity class的維客頁面。該wiki頁面提到整數乘法在NC中,這意味着在O(n^k)
處理器上存在O((log n)^c)
算法。這有助於更接近答案。現在還沒有得到答覆的部分是整數乘法的常數是多少,並行算法是否適用於這個目的?
更新#2:根據this PDF file來自康奈爾大學的計算機科學課程的15第12頁,在NC複雜類整數乘法需要O(log n)
時間O(n^2)
處理器。它還解釋了一個關於如何去解決這個問題的算法。我很快就會爲這個問題寫一個正確的答案。
爲了滿足我的好奇心,最後一個問題是:可能有人知道「剛纔」O(n)
,O(sqrt(n))
或O(log n)
處理器的當前已知時間複雜性嗎?
你可能在[cs.se]有更多的運氣,或者失敗了,[cstheory.se](我發現很難判斷我無法回答的問題的級別)。 – delnan 2014-10-01 11:54:52
對於O(n)處理器:我似乎無法找到正確的引用,但我強烈的期望是存在運行時間爲O(polylog n)的基於FFT的方法,因爲FFT自然並行到n處理器。這種方法可以縮減到更少的處理器數量。 – 2014-10-01 20:30:09
謝謝@DavidEisenstat。你是對的,因爲FFT是一個分而治之的算法,它可以並行運行在[polylogarithmic time](http://en.wikipedia.org/wiki/Time_complexity#Polylogarithmic_time)中。在'O(n * log n)'FFT算法的情況下,這在'O(n)'處理器上變成'O(log n)'時間(參見[this PDF](http: /www.cs.berkeley.edu/~demmel/cs170_spr07/LectureNotes/Lecture_Parallelism_DC.pdf))。我不確定這會如何影響所有當前已知的乘法算法,但可以肯定地說使用FFT的算法將堅持FFT的當前已知的下限。 – webdevelopersdiary 2014-10-02 05:53:17