簡體   English   中英

並行性的限制(求職面試問題)

[英]The limits of parallelism (job-interview question)

給定無限數量的處理單元和無限的空間,是否可以在合理的時間內解決O(n!)復雜性的問題?

O(n!)問題的典型示例是蠻力搜索:嘗試所有排列(有序組合)。

確實是。 考慮嚴格的NP形式的旅行推銷員問題:考慮到此從每個點到另一個點的旅行費用清單,您可以將旅行費用匯總為K嗎? 使用Intel的新型無限核CPU,您只需為每個可能的排列分配一個核,然后累加成本(這是很快的),並查看是否有任何核表示成功。

更一般而言,NP中的問題是決策問題,因此可以在多項式時間內驗證潛在解決方案(即有效),因此(由於潛在解決方案是可枚舉的),可以用足夠多的CPU有效地解決任何此類問題。

聽起來您真正要問的是,是否可以在非確定性機器上將O(n!)復雜性的問題簡化為O(n ^ a)。 換句話說,Not-P = NP。 這個問題的答案是否定的,有一些不是NP的Not-P問題。 例如,一個有限的停止問題(詢問程序是否最多停止n!個步驟)。

問題是分發工作並收集結果。

如果所有CPU都可以一次讀取同一塊內存,並且每個CPU都有一個已知的唯一CPU-ID,則可以使用該ID選擇一個排列,並且可以在恆定時間內解決分配問題。

但是,收集結果將很棘手。 每個CPU都可以與其(數字)鄰居進行比較,然后將該結果與兩個最近鄰居的結果進行比較,等等。這將是一個O(log(n!))進程。 我不確定,但是我懷疑O(log(n!))是超多項式,所以我認為這不是解決方案。

如果問題是檢查復雜性O(n!)問題的排列/答案之一,那么您當然可以使用無限數量的處理器來高效地完成此任務。

原因是您可以輕松地以對數效率分布問題的原子部分(例如,問題的原子部分可能是要檢查的排列之一)。

舉一個簡單的例子,可以將處理器設置為“二叉樹”。 您可能是根本原因,並且讓處理器將問題的排列(或問題的最小部分)傳遞給葉處理器以解決,最終您將在log(n!)中解決問題。時間。

請記住,將排列交付給處理器需要很長時間。 問題本身的每個部分實際上都會立即得到解決。

編輯:根據以下評論修復了我的帖子。

不,N! 甚至比NP還高 認為無限的並行性可以解決多項式時間中的NP問題,通常認為這是“合理的”時間復雜度N! 在這種設置下,問題仍然高於多項式。

您提到搜索是一個“典型”問題,但實際上您是否真的被問到搜索問題? 如果是這樣,那么是的,搜索通常是可並行化的,但是據我所知,O(n!)原則上並不意味着可用的並發程度,不是嗎? 您可能會遇到一個完全串行的O(n!)問題,這意味着無限的計算機將無濟於事。 我曾經遇到一個異常的O(n ^ 4)問題,實際上是完全串行的。

因此,首先要考慮可用的並發性,恕我直言,您應該在采訪中獲得提出阿姆達爾定律的要點。 下一個潛在的陷阱是處理器間通信,通常是算法的性質。 例如,考慮以下應用程序類列表: http : //view.eecs.berkeley.edu/wiki/Dwarf_Mine FWIW我前面提到的O(n ^ 4)代碼屬於FSM類別。

另一個有點相關的軼事:我聽說一位超級計算機供應商的工程師聲稱,如果將他們10%的CPU時間用在MPI庫中,他們會認為並行化取得了可喜的成就(盡管這可能只限於代碼中的代碼)。計算化學領域)。

這就像問是否有無數的猴子在帶文字處理器的防猴計算機上打字能弄出莎士比亞的所有著作; 給了無限的時間。 現實主義者不會說,因為條件在物理上是不可能的。 理想主義者會說“是”。 從理論上講,這是有可能發生的。 由於軟件工程(軟件工程,而不是計算機科學)專注於我們可以看到和觸摸的真實系統,因此答案是否定的。 如果您懷疑我,那就去構建它並證明我錯了! 恕我直言。

有時正確的答案是:“您的代碼庫會出現多少次?” 但是在這種情況下,確實有答案。

正確的答案是“否”,因為使用完美的並行處理無法解決所有問題。 例如,一個類似旅行推銷員的問題必須遵循一條路徑,才能考慮行程的第二步。

假設城市是一個完全連通的矩陣,如果您想為疲倦的推銷員顯示所有可能的非循環路線,則會遇到O(n!)問題,該問題可以分解為O(n)* O( (n-1)!)問題。 問題在於,您需要先考慮一條路徑(在等式的O(n)側),然后才能考慮其余路徑(在等式的O((n-1)!)側)。

由於某些計算必須在其他計算之前執行,因此無法在單個散布/聚集通道中將結果完美散布。 這意味着解決方案將等待必須開始“下一步”之前的計算結果。 這是關鍵,因為對現有局部解決方案的需求為進行計算提供了“瓶頸”。

既然我們已經證明了我們可以使這些CPU無限快速地,無限地等待(即使它們自己在等待),那么我們知道運行時不能為O(1),我們只需要選擇一個N較大,以確保運行時間不可接受。

不考慮安裝成本(例如,可能...將一系列值分配給處理單元),然后是。 在這種情況下,任何小於無窮大的值都可以在相等數量的處理單元上進行一次並發迭代。

但是,設置是非常重要的事情。

每個問題都可以由一個CPU解決,但是誰將這些工作交付給所有無限CPU呢? 通常,此任務是集中的,因此,如果我們有無限的工作要交付給所有無限的CPU,則可能需要花費無限的時間來完成。

暫無
暫無

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

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