OpenMP編程學習筆記四

來源:互聯網
上載者:User

single的用法。

parallel的目的就是能夠讓多個CPU協調處理問題,從而提高運行效能。例如,如下的代碼,各個CPU都會執行一次。

#pragma omp parallel

{

printf("test OpenMP/n");

}

更多的時候,我們可能希望這種代碼只要在一個CPU上執行就行了,以便減少CPU的功耗。這時可以使用single。

測試代碼如下:

void testSingle()
{
    omp_set_num_threads( 4 );

#pragma omp parallel
    {
        printf("test OpenMP/n");
#pragma omp single
        {
            printf("test OpenMP single/n");
            printf("execute thread ID is %d/n", omp_get_thread_num());
        }
    }
}

 

一個運行結果如下:

test OpenMP
test OpenMP
test OpenMP
test OpenMP
test OpenMP single
execute thread ID is 0

 

另外一個運行結果:

test OpenMP
test OpenMP single
execute thread ID is 1

test OpenMP
test OpenMP
test OpenMP

 

可以看出,在一個parallel region內,single代碼塊始終只會被執行一次。

不加single的一個運行結果為:

test OpenMP
test OpenMP single
execute thread ID is 0
test OpenMP
test OpenMP single
execute thread ID is 2
test OpenMP
test OpenMP single
execute thread ID is 1
test OpenMP
test OpenMP single
execute thread ID is 3

 

其實,"test OpenMP"被輸出多次,這個是比較難理解的。因為一個CPU已經處理過了,就不應該由別的

CPU再去處理。可能是OpenMP的最初模型就是如此,或者這個本身就是OpenMP的設計缺陷,所以增加

single directive來迴避這一點。如果使用者只希望一段代碼由一個CPU來處理,就使用single ,

畢竟這是一個崇尚低功耗的年代。

 

single程式碼片段可以由任何一個CPU或者thread執行,如果想讓固定的CPU或者thread運行一段代碼,可以使用

master。master的局限性就在於只能由ID為0的thread執行該程式碼片段。測試代碼:

void testMaster()
{
 omp_set_num_threads( 4 );

#pragma omp parallel
 {
  printf("test OpenMP/n");
#pragma omp master
  {
   printf("test OpenMP master/n");
   printf("execute thread ID is %d/n", omp_get_thread_num());
  }
 }
}

運行結果為:

test OpenMP
test OpenMP master
execute thread ID is 0
test OpenMP
test OpenMP
test OpenMP

運行N次,"execute thread ID is 0"總是被輸出。master到底有何用處,能夠解決什麼實際問題,我還不能理解。

需要繼續深入學習。

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.