Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah klausa `omp ordered` memastikan pelaksanaan berurutan dalam gelung selari dalam 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>
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
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!