Migrasi dari OpenMP ke Runtime Konkurensi

Runtime Konkurensi memungkinkan berbagai model pemrograman. Model-model ini dapat tumpang tindih atau melengkapi model pustaka lain. Dokumen di bagian ini membandingkan OpenMP dengan Runtime Konkurensi dan memberikan contoh tentang cara memigrasikan kode OpenMP yang ada untuk menggunakan Runtime Konkurensi.

Model pemrograman OpenMP didefinisikan oleh standar terbuka dan memiliki pengikatan yang terdefinisi dengan baik ke bahasa pemrograman Fortran dan C/C++. OpenMP versi 2.0 dan 2.5, yang didukung oleh pengkompilasi Microsoft C++, sangat cocok untuk algoritma paralel yang berulang; artinya, mereka melakukan iterasi paralel atas array data. OpenMP 3.0 mendukung tugas non-berulang selain tugas berulang.

OpenMP paling efisien ketika tingkat paralelisme telah ditentukan sebelumnya dan cocok dengan sumber daya yang tersedia pada sistem. Model OpenMP adalah kecocokan yang sangat baik untuk komputasi performa tinggi, di mana masalah komputasi yang sangat besar didistribusikan di seluruh sumber daya pemrosesan satu komputer. Dalam skenario ini, lingkungan perangkat keras umumnya diperbaiki dan pengembang dapat secara wajar mengharapkan untuk memiliki akses eksklusif ke semua sumber daya komputasi ketika algoritma dijalankan.

Namun, lingkungan komputasi yang kurang dibatasi mungkin bukan kecocokan yang baik untuk OpenMP. Misalnya, masalah rekursif (seperti algoritma quicksort atau mencari pohon data) lebih sulit diterapkan dengan menggunakan OpenMP 2.0 dan 2.5. Runtime Konkurensi melengkapi kemampuan OpenMP dengan menyediakan Pustaka Agen Asinkron dan Pustaka Pola Paralel (PPL). Pustaka Agen Asinkron mendukung paralelisme tugas kasar; PPL mendukung tugas paralel yang lebih halus. Runtime Konkurensi menyediakan infrastruktur yang diperlukan untuk melakukan operasi secara paralel sehingga Anda dapat fokus pada logika aplikasi Anda. Namun, karena Concurrency Runtime memungkinkan berbagai model pemrograman, overhead penjadwalannya bisa lebih besar daripada pustaka konkurensi lainnya seperti OpenMP. Oleh karena itu, kami sarankan Anda menguji performa secara bertahap saat Mengonversi kode OpenMP yang ada untuk menggunakan Concurrency Runtime.

Kapan harus Bermigrasi dari OpenMP ke Runtime Konkurensi

Mungkin menguntungkan untuk memigrasikan kode OpenMP yang ada untuk menggunakan Runtime Konkurensi dalam kasus berikut.

Kasus Keuntungan dari Runtime Konkurensi
Anda memerlukan kerangka kerja pemrograman bersamaan yang dapat diperluas. Banyak fitur dalam Concurrency Runtime dapat diperluas. Anda juga dapat menggabungkan fitur yang ada untuk menyusun fitur baru. Karena OpenMP mengandalkan arahan kompilator, openMP tidak dapat dengan mudah diperpanjang.
Aplikasi Anda akan mendapat manfaat dari pemblokiran kooperatif. Ketika tugas memblokir karena memerlukan sumber daya yang belum tersedia, Runtime Konkurensi dapat melakukan tugas lain saat tugas pertama menunggu sumber daya.
Aplikasi Anda akan mendapat manfaat dari penyeimbangan beban dinamis. Runtime Konkurensi menggunakan algoritma penjadwalan yang menyesuaikan alokasi sumber daya komputasi saat beban kerja berubah. Di OpenMP, ketika penjadwal mengalokasikan sumber daya komputasi ke wilayah paralel, alokasi sumber daya tersebut diperbaiki di seluruh komputasi.
Anda memerlukan dukungan penanganan pengecualian. PPL memungkinkan Anda menangkap pengecualian baik di dalam maupun di luar wilayah atau perulangan paralel. Di OpenMP, Anda harus menangani pengecualian di dalam wilayah atau perulangan paralel.
Anda memerlukan mekanisme pembatalan. PPL memungkinkan aplikasi untuk membatalkan tugas individual dan pohon pekerjaan paralel. OpenMP mengharuskan aplikasi untuk menerapkan mekanisme pembatalannya sendiri.
Anda memerlukan kode paralel untuk diselesaikan dalam konteks yang berbeda dari awalnya. Runtime Konkurensi memungkinkan Anda memulai tugas dalam satu konteks, lalu menunggu atau membatalkan tugas tersebut dalam konteks lain. Di OpenMP, semua pekerjaan paralel harus diselesaikan dalam konteks dari mana ia dimulai.
Anda memerlukan dukungan penelusuran kesalahan yang ditingkatkan. Visual Studio menyediakan jendela Parallel Stacks dan Parallel Tasks sehingga Anda dapat dengan lebih mudah men-debug aplikasi multithreaded.

Untuk informasi selengkapnya tentang men-debug dukungan untuk Runtime Konkurensi, lihat Menggunakan Jendela Tugas, Menggunakan Jendela Tumpukan Paralel, dan Panduan: Men-debug Aplikasi Paralel.

Kapan Tidak Bermigrasi dari OpenMP ke Runtime Konkurensi

Kasus berikut menjelaskan kapan mungkin tidak sesuai untuk memigrasikan kode OpenMP yang ada untuk menggunakan Concurrency Runtime.

Kasus Penjelasan
Aplikasi Anda sudah memenuhi kebutuhan Anda. Jika Anda puas dengan performa aplikasi dan dukungan penelusuran kesalahan saat ini, migrasi mungkin tidak sesuai.
Badan perulangan paralel Anda melakukan sedikit pekerjaan. Overhead penjadwal tugas Runtime Konkurensi mungkin tidak mengatasi manfaat mengeksekusi tubuh perulangan secara paralel, terutama ketika tubuh perulangan relatif kecil.
Aplikasi Anda ditulis dalam C. Karena Concurrency Runtime menggunakan banyak fitur C++, mungkin tidak cocok ketika Anda tidak dapat menulis kode yang memungkinkan aplikasi C untuk sepenuhnya menggunakannya.

Cara: Mengonversi paralel OpenMP untuk Perulangan untuk Menggunakan Runtime Konkurensi

Mengingat perulangan dasar yang menggunakan paralel OpenMP dan untuk arahan, menunjukkan cara mengonversinya untuk menggunakan konkurensi Runtime Konkurensi::p arallel_untuk algoritma.

Cara: Mengonversi Perulangan OpenMP yang Menggunakan Pembatalan untuk Menggunakan Runtime Konkurensi
Mengingat paralelOpenMP untuk perulangan yang tidak mengharuskan semua perulangan berjalan, menunjukkan cara mengonversinya untuk menggunakan mekanisme pembatalan Runtime Konkurensi.

Cara: Mengonversi Perulangan OpenMP yang Menggunakan Penanganan Pengecualian untuk Menggunakan Runtime Konkurensi
Mengingat paralelOpenMP untuk perulangan yang melakukan penanganan pengecualian, menunjukkan cara mengonversinya untuk menggunakan mekanisme penanganan pengecualian Runtime Konkurensi.

Cara: Mengonversi Perulangan OpenMP yang Menggunakan Variabel Pengurangan untuk Menggunakan Runtime Konkurensi
Mengingat paralelOpenMP untuk perulangan yang menggunakan klausa pengurangan, menunjukkan cara mengonversinya untuk menggunakan Runtime Konkurensi.

Baca juga

Runtime Konkurensi
OpenMP
Parallel Patterns Library (PPL)
Pustaka Agen Asinkron