OpenMP編程學習筆記二

來源:互聯網
上載者:User

      OpenMP是協助程式人員能夠方便編寫並行程式的一種解決方案,程式編寫人員主要的任務還是放在問題的空間結構與邏輯結構上。如何能夠使程式並行運行,是OpenMP解決的問題(演算法問題)。

      OpenMP是通過將任務分配到不同的線程上完成的。

1. 設定線程數目omp_set_num_threads()
API。可以設定OpenMP能夠控制的並行線程數目。一般情況下,該數目等於處理器核心數。當然可以不等於。在使用OpenMP時,可以最先調用該API。如果不調用該API,可以使用num_threads() clause。

2. 最基本的平行處理:

2.1. #pragma omp parallel

#include <stdio.h>

#include <omp.h>

 

int main()

{

    #pragma omp parallel

    printf("OpenMP parallel threads test/n");

}

 

運行該代碼,可以看見,"OpenMP parallel threads test“ 被輸出的次數等於設定的thread的數目,也就是說,#pragma omp parallel之後的第一個代碼塊,將會分配給各個核去執行。可以改寫上面的代碼為:

#include <stdio.h>

#include <omp.h>

 

int
main()

{

    #pragma omp parallel

    {

        printf("OpenMP
parallel threads test/n");
        printf("OpenMP PARALLEL THREADS TEST/n");

    }

}

 

雖然這個例子很簡單,但它能夠協助理解OpenMP核心思想:將代碼最終分配到不同的核(線程)上去運行。

 

2.2. #pragma omp parallel for

當在#pragma omp parallel 後增加for時,不再是將後面的程式碼片段簡單的交給不同的核去執行(這樣的話,就沒有必要這麼多此一舉),而是將for 迴圈這個整體迴圈任務交給不同的核去做。也就是說,每個核負責運行一部分循壞任務。這樣,就可以加速迴圈處理,從而使得程式提高了時間方面的效能。OpenMP負責拆分for迴圈然後分配,有好幾種不同的拆分演算法。由於迴圈變數是由各個線程共用的,所以在多重循壞中,環變數如何保持同步,結果如何保持正確,是掌握for的關鍵。

 

 

 

聯繫我們

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