越來越快的迴圈

來源:互聯網
上載者:User

    隨著多核電腦變得越來越普遍,令人煩惱的是迴圈不能利用這些多餘的核心資源。不過幸運的是微軟的帥哥靚女為我們解決了這種困惑,他們已採取措施使我們迴圈可以利用這些額外的核心資源。我將展示一個程式碼範例,示範.NET 4.0中的一個新的功能叫做Task Parallel Library。有了這個庫,可以非常容易編寫託管語言來使用多核心。這樣我們就可以編寫並行任務的代碼,它可以同時運行在可用的處理器上。一般來說,這樣可以顯著地加快了代碼啟動並執行速度。

這裡有一個並行樣本的代碼:

using System;namespace ParallelForSample{  public class SingleCore  {    public static void Calculate(int calcVal)    {      Utility util = new Utility();      util.Start();      int[,] G = new int[calcVal, calcVal];      for (int k = 0; k < calcVal; k++)        for (int i = 0; i < calcVal; i++)          for (int j = 0; j < calcVal; j++)            G[i, j] = Math.Min(G[i, j], G[i, k] + G[k, j]);      util.Stop();    }  }}

正如你可以看到,這是一個相當簡單的類 - 它用了三個迴圈填充數組。現在,使用TPL(Task Parallel Library)重寫這段代碼:

using System;using System.Threading.Tasks;namespace ParallelForSample{  public class MultiCore  {    public static void Calculate(int calcVal)    {      Utility util = new Utility();      util.Start();      int[,] G = new int[calcVal, calcVal];      Parallel.For(0, calcVal,        delegate(int k)        {          Parallel.For(0, calcVal, delegate(int i)          {            for (int j = 0; j < calcVal; j++)              G[i, j] = Math.Min(G[i, j], G[i, k] + G[k, j]);          });        }      );      util.Stop();    }  }}正如你可以看到,這是文法是稍有不同。 for迴圈分解成Parallel.For。這需要一個委託,實際上執行迴圈的行為的是這個委託。如果你下載並運行該樣本,您可以觀察到不同的行為和不同的迴圈計時。
不過需要有一個多核的機器,才可以看到這種差距,如果是一台單核的機器,你是觀察不到的。
以下是譯者加:
我的電腦配置如:
 
運行結果:
 
我們可以看到差距接近10秒之多。
代碼:/Files/zhuqil/parallelforsample.zip
原文:faster-faster-loops

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.