2012-06-02 59 views
0

我做了一個wcf服務,它以azure的web角色託管。角色的實例是特大型的(它只是一個實例),它有8個內核。我在這個服務中有兩種方法。方法是計算矩陣乘法,其中一個用順序編程,另一個用並行(使用Parallel.For) 結果是順序編程比並行編程快。難道我做錯了什麼? 我被監測處理器的工作,當我開始並行計算,使用所有的內核,但結果是不是更好? 下面是並行編程矩陣乘法Windows Azure中的並行編程

ParallelOptions p = new ParallelOptions(); 
      p.MaxDegreeOfParallelism=8; 
Parallel.For(0, n,p, i => 
       { 
        for (int j = 0; j < n; j++) 
        { 

         suma = 0; 


         for (int k = 0; k < n; k++) 
         { 

          suma = (matricaA[i, k] * matricaB[k, j]); 

         } 
         proizvod[i, j] = suma; 

        } 
       } 
+1

嗯,可能需要看到所有的代碼,包括串行。我只能想象你的代碼沒有運行你認爲的那樣。 – Dave

+0

我在我的本地機器上部署到Azure之前測試了代碼,它工作的很好... – Selvirrr

+0

嗯,那當然是非常不尋常的。我們在Azure中的4個和8個核心實例上運行大規模並行工作負載,並且預期的加速確實存在。如果是我,我會嘗試另一個超級簡單的並行VS串行場景,看看這是否表現出相同的行爲。我會進行一些登錄以更好地理解執行的路徑。在4核心機器上執行此操作可能也值得您嘗試,因爲您只能在1個四核心插槽上執行操作,而在8核心操作系統上執行此操作。 – Dave

回答

0

我的代碼不知道問題的確切原因。但這裏是我的建議:使用遠程桌面登錄到雲計算機。創建一個並行執行矩陣計算的控制檯應用程序。然後在雲計算機上運行控制檯應用程序。使用資源監視器檢查CPU使用情況。如果CPU使用率通常接近100%,那麼您可以確信代碼邏輯是正確的。

由於您使用的是WCF,請注意默認情況下WCF可以同時使用多個線程處理多個請求。因此,您的服務器可能同時計算多個矩陣,而不是使用多個線程計算單個矩陣。通常,計算繁重的工作是在沒有WCF的工作角色上完成的,他們在這裏逐一執行。

+0

我製作了控制檯應用程序,就像您建議的那樣,並且我監視CPU使用情況,當我將線程數設置爲8時使用100%,設置爲4個線程時約爲50%...我無法發現有什麼問題...我的代碼有問題嗎?謝謝... \ – Selvirrr

+0

感謝大家試圖幫助我,我解決了這個問題。以下示例http://msdn.microsoft.com/en-us/library/dd460713.aspx。我在另一個函數中移動了矩陣乘法的代碼(就像在這個例子中)並在主函數中調用,我得到了想要的結果。 – Selvirrr