Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah klausa `omp ordered` memastikan pelaksanaan berurutan dalam gelung selari dalam OpenMP?

Bagaimanakah klausa `omp ordered` memastikan pelaksanaan berurutan dalam gelung selari dalam OpenMP?

Susan Sarandon
Lepaskan: 2024-10-25 10:42:31
asal
270 orang telah melayarinya

How does the `omp ordered` clause ensure sequential execution within a parallel loop in OpenMP?

Memahami Klausa yang dipesan omp

Klausa tertib omp OpenMP menyelaras pelaksanaan urutan untuk memastikan pelaksanaan berurutan bahagian kod dalam gelung selari. Berbilang utas dilaksanakan serentak sehingga mereka menemui rantau yang dipesan, tempat mereka menyegerakkan dan meneruskan dalam susunan yang sama seperti yang mereka lakukan dalam gelung bersiri.

Pertimbangkan kod ini:

<code class="cpp">vector<int> v;

#pragma omp parallel for ordered schedule(dynamic, anyChunkSizeGreaterThan1)
for (int i = 0; i < n; ++i){
    ...
    ...
    ...
#pragma omp ordered
    v.push_back(i);
}</code>
Salin selepas log masuk

Kod ini memastikan bahawa vektor v diisi dengan senarai tertib yang mengandungi n elemen.

Penyegerakan Benang

Apabila benang menemui blok tertib omp, mereka mesti menunggu urutan melaksanakan lelaran terendah yang mungkin. Penyegerakan ini penting kerana ia mengekalkan susunan pelaksanaan yang dinyatakan dalam gelung bersiri. Pustaka masa jalan OpenMP biasanya memberikan lelaran terendah kepada urutan pertama yang sedia untuk dilaksanakan.

Pengaruh Penjadualan

Sementara klausa tertib boleh digunakan dengan kedua-dua dinamik dan penjadualan statik, penjadualan dinamik adalah disyorkan. Dengan penjadualan statik, lelaran benang ditakrifkan sebagai praditentukan, yang boleh membawa kepada melahu benang jika lelaran terendah diberikan kepada urutan yang telah melengkapkan lelarannya.

Dengan penjadualan dinamik, lelaran ditetapkan pada masa jalanan, mengurangkan kemungkinan benang melahu. Walau bagaimanapun, ia memperkenalkan beberapa overhed, jadi ia hanya perlu dipertimbangkan jika masa yang dibelanjakan untuk penjadualan dinamik boleh diabaikan berbanding dengan masa pelaksanaan wilayah yang dipesan.

Pelaksanaan Tertib dengan Berbilang Benang

Untuk menggambarkan pelaksanaan tertib, pertimbangkan senario dengan tiga utas dan sembilan lelaran, dengan setiap urutan bertanggungjawab untuk tiga lelaran. Jadual statik dengan saiz ketulan 1 akan menghasilkan garis masa pelaksanaan berikut:

tid  List of     Timeline
     iterations
0    0,3,6       ==o==o==o
1    1,4,7       ==.o==o==o
2    2,5,8       ==..o==o==o
Salin selepas log masuk

Dengan penjadualan dinamik, garis masa pelaksanaan akan rawak, kerana senarai lelaran yang diberikan kepada setiap utas tidak akan bersifat deterministik .

Dengan menggunakan penjadualan dinamik dengan klausa tersusun, anda mencapai konkurensi sambil mengekalkan susunan pelaksanaan yang betul dalam gelung selari.

Atas ialah kandungan terperinci Bagaimanakah klausa `omp ordered` memastikan pelaksanaan berurutan dalam gelung selari dalam OpenMP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan