Anda di halaman 1dari 16

Komputasi Pararel*

OpenMP Programming

Ardiansyah, S.Kom., M.Kom


openMP
● OpenMP adalah standar yang digunakan #include <omp.h>
untuk pemrograman paralel
#include <stdio.h>
multithreading pada arsitektur shared
int main()
memory.
● pada compiler GCC, sehingga tidak perlu {
instalasi tambahan. Programmer cukup #pragma omp parallel num_threads(4)
menambahkan direktif omp pada
printf("Hello!\n");
#pragma.
return 0;
● memparalelkan program. Kompilasi
}
program menggunakan gcc -fopenmp
1. Critical Section

● untuk mengontrol akses bersama ke


sumber daya yang bersifat bersamaan #pragma omp critical
(shared resource) sehingga mencegah
thread mengakses bagian kode secara {
bersamaan
// code_block "critical section"

}
● Contoh umum penggunaan "critical
section" adalah untuk menghindari
kesalahan pembaca-tulis (read-write)
pada variabel bersama.
1. Example
Critical Section
2. Barrier
● Adalah mekanisme yang memastikan bahwa
semua thread yang berpartisipasi dalam blok
paralel telah mencapai titik tertentu dalam
program sebelum melanjutkan eksekusi.

● Barrier memastikan koordinasi antara thread,


sehingga tidak ada thread yang melanjutkan
eksekusi lebih cepat dari yang lain, sehingga
memungkinkan sinkronisasi yang aman
antara mereka.
3. Atomic

Penggunaan "atomic" dalam OpenMP adalah untuk melindungi operasi terhadap


variabel bersama dari kondisi perlombaan (race condition). Ini berguna ketika beberapa
thread berusaha untuk mengakses atau memodifikasi variabel bersama pada saat yang
sama. Dengan menggunakan "atomic," Anda memastikan bahwa operasi tersebut akan
selesai tanpa interupsi.
Atomic Update
● Operasi update digunakan untuk
mengizinkan operasi penambahan atau
pengurangan pada variabel bersama.
● Ini menghindari kondisi perlombaan (race
condition) saat beberapa thread mencoba
untuk mengupdate variabel bersama.
● Contoh penggunaan adalah operasi
penambahan atau pengurangan yang
dilindungi oleh #pragma omp atomic
update.
Atomic Read
● Operasi read digunakan untuk membaca
nilai dari variabel bersama secara
atomik.
● Ini memastikan bahwa operasi baca
selesai tanpa gangguan dari thread lain
yang mencoba membaca atau menulis ke
variabel bersama.
● Contoh penggunaan adalah membaca
nilai dari variabel bersama.
Atomic Write

● Operasi write digunakan untuk


menulis nilai ke variabel bersama
secara atomik.
● Ini memastikan bahwa operasi
penulisan selesai tanpa gangguan dari
thread lain yang mencoba membaca
atau menulis ke variabel bersama.
● Contoh penggunaan adalah
mengubah nilai dari variabel bersama.
Atomic capture

● Operasi capture digunakan untuk


melakukan operasi pembacaan dan
penulisan sekaligus pada variabel
bersama.
● Ini memungkinkan thread untuk
mengambil nilai lama variabel bersama,
melakukan operasi tertentu (misalnya,
perbandingan), dan menggantinya dengan
nilai baru jika kondisi memenuhi.
● Contoh penggunaan adalah mengambil
nilai lama, melakukan perbandingan, dan
kemudian mengganti nilai variabel
bersama berdasarkan hasil perbandingan.
4. Shared & Private Variables
Shared Variables Private Variables
● Variabel bersama adalah variabel yang dapat ● Variabel pribadi adalah variabel yang
diakses oleh semua thread dalam lingkungan masing-masing thread memiliki salinan
paralel. sendiri.
● Ini berarti bahwa semua thread memiliki akses ke ● Setiap thread memiliki salinan yang terpisah
variabel yang sama dan dapat membaca dan
dan tidak berbagi nilainya dengan thread lain.
menulis ke variabel tersebut.
● Variabel bersama biasanya digunakan untuk ● Variabel pribadi biasanya digunakan untuk
berbagi data antara thread, tetapi ini juga bisa menyimpan data yang hanya relevan untuk
menjadi sumber potensial kondisi perlombaan thread tertentu, dan ini menghindari masalah
(race condition) jika tidak ditangani dengan benar. kondisi perlombaan.
4. Shared & Private Variables
5. Amdahl’s Law

Hukum Amdahl merinci sejauh mana peningkatan


kinerja sistem dapat dicapai melalui paralelisasi tugas.
6. Environment Variables
● Environment variables dalam OpenMP adalah variabel-variabel yang mempengaruhi perilaku dan konfigurasi
runtime dari OpenMP.
● Memungkinkan untuk mengontrol berbagai aspek dari eksekusi paralel, seperti jumlah thread, pengaturan
schedule, dan lainnya.
● Berikut beberapa contoh environment variables dalam OpenMP:
1. OMP_NUM_THREADS
2. OMP_SCHEDULE
3. OMP_DYNAMIC
4. OMP_PROC_BIND
5. OMP_NESTED
6. OMP_STACKSIZE
7. OMP_WAIT_POLICY
8. OMP_PLACES
9. OMP_MAX_ACTIVE_LEVELS
OMP_SCHEDULE

Environment variable ini digunakan


untuk mengatur aturan penjadwalan
(scheduling) ketika melakukan loop
paralel. Anda dapat mengaturnya
untuk berbagai mode penjadwalan,
seperti static, dynamic, atau guided.
HPC Education (OpenMP Concepts)

Referensi

Anda mungkin juga menyukai