• Tidak ada hasil yang ditemukan

Kuliah#7 TSK617 Pengolahan Paralel - TA 2011/2012. Eko Didik Widianto

N/A
N/A
Protected

Academic year: 2021

Membagikan "Kuliah#7 TSK617 Pengolahan Paralel - TA 2011/2012. Eko Didik Widianto"

Copied!
37
0
0

Teks penuh

(1)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Pemrograman OpenMP

Kuliah#7 TSK617 Pengolahan Paralel - TA 2011/2012

Eko Didik Widianto

(2)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Review Kuliah

I Sebelumnya dibahas tentang: pustaka Posix Thread dan aplikasinya

I Pustaka Pthread

I API Pthread

I Mengkompile program multithread

I Mengelola Thread

I Variabel Mutex

(3)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Review Kuliah

I Pemrograman paralel di mesin shared memory menggunakan model thread

I Implementasi:

1. menggunakanPustaka dari subrutin yang dipanggil dari

dalam source code paralel

I Posix (pthread), paralelisme eksplisit. Di awal direncanakan programnya paralel

2. menggunakan setcompiler directive yang di-embed-kan

di source code (serial atau paralel)

(4)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Kuliah tentang OpenMP

I Akan dibahas tentangpemrograman paralel dengan OpenMP

menggunakan kompiler directive

I Arsitektur memori: shared (SMP, symmetric

multi-processor)

I Model programming: thread

I Pokok Bahasan: (kuliah #7 akan membahas item yang

ditebalkan)

1. Pengantar OpenMP

2. Membuat Thread

3. Sinkronisasi dengan critical, atomic

4. Loop dan Worksharing

5. Sinkronisasi dengan barrier, single, master, ordered

6. Environment Data

7. Menjadwalkan for dan section

8. Model memori

(5)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Kompetensi Dasar

I Setelah mempelajari bab ini, mahasiswa akan mampu:

1. [C2] Mahasiswa memahami konsep pemrograman paralel

menggunakan OpenMP

2. [C3] Mahasiswa akan mampu membuat program paralel

dari program serial menggunakan compiler-directive dan pustaka-pustaka OpenMP

3. [C5] Mahasiswa akan mampu memprogram suatu aplikasi

komputasi matrik menggunakan OpenMP serta menghitung faktor speedupnya

I Link

I Website:http://didik.blog.undip.ac.id/2012/02/25/

kuliah-tsk-617-pengolahan-paralel-2011/

(6)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Acknowledment

I Materi dan gambar didapat dari:

I Tim Mattson, Larry Meadows (2008): “A Hands-on

Introduction to OpenMP“

(7)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Bahasan

Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

(8)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

OpenMP: API untuk Aplikasi Multithread

I Menyediakan set kompiler directive dan rutin pustaka untuk aplikasi pemrograman paralel

I Menyederhanakan penulisan program multi-thread (MT) di bahasa C, C++ dan Fortran

I Telah digunakan sebagai standar dalam aplikasi pemrograman di prosesor SMP

(9)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

OpenMP Stack

(10)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Elemen OpenMP

Sumber: http://en.wikipedia.org/wiki/OpenMP

(11)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Sintaks Utama OpenMP

I Sebagian besar construct di OpenMP adalahcompiler directive

#pragma omp construct [clause [clause]. . . ]

I Contoh:

#pragma omp parallel num_threads(4)

I Prototip fungsi dan tipe data didefinisikan di file header

omp.h

#include <omp.h>

I Sebagian besar construct OpenMP merupakan block terstruktur

I Blok terstruktur: sebuah blok yang berisi satu atau

beberapa statemen dengan satu titik masuk di bagian atas dan satu titik keluar di bagian terbawah

I Titik masuk dengan’{’ dan titik keluar dengan ’}’

(12)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Kompiler OpenMP

(13)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Latihan 1: Hello World (Serial)

Pastikan environment telah siap (IDE, kompiler, linker, dan lainnya)

(14)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Latihan 1: Hello World (Paralel)

(15)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Bagaimana Thread Berinteraksi?

I OpenMP adalah pustaka untuk pemrograman multi-threading menggunakan model alamat shared

I Thread saling berkomunikasi menggunakan variabel shared

I Sharing data yang tidak diinginkan menyebabkan kondisi race:

I race condition: when the program’s outcome changes as

the threads are scheduled differently

I Untuk mengontrol kondisi race:

I Digunakan sinkronisasi untuk memproteksi konflik data

I Sinkronisasi akanmahal, sehingga:

I Alternatif: memodifikasi program terutama akses data

(16)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Data Race

I Dua thread berbeda mengakses lokasi memori yang sama (shared)

I Secara asinkron

I Tanpa memegang lock eksklusif

(17)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Kondisi Race

I Diinginkan jumlah dari nilai fungsi s =

N

P

i=0

f (xi)

I Misalnya x=[3,5], f (x ) = x2, dan s=0 (init)

I Di akhir eksekusi, nilai s seharusnya 32+52=34

I Tapi nilainya bisa 34, 9 atau 25

I Operasiatomik adalah pembacaan dan penulisan

I Tidak ada 1/2 dari satu bilangan, operasi += adalah atomik

(18)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Model Pemrograman OpenMP

I Fork-Join Parallelisme

I Thread master membangkitkan beberapa thread (child)

(19)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Bahasan

Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

(20)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Thread Creation: Parallel Regions

I Membuat thread dengan constructparallel

I Menggunakanfungsi runtime untuk setting jumlah thread,

mendapatkan thread ID

I Contoh: menggunakan fungsiomp_set_num_threads

(21)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Thread Creation: Parallel Regions

I Menggunakanclause untuk setting jumlah thread

I Contoh:#pragma omp parallel num_threads(4)

(22)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Thread Creation: Parallel Regions

(23)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Thread Creation: Parallel Regions

(24)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Bahasan

Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

(25)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Integrasi Numerik

(26)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Serial Program PI

I File: serial/pi.c

(27)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Paralel Program PI

I Buat program paralel untuk problem di atas!

I Perhatikan data shared dengan data private

I Akan dibutuhkan rutin pustaka runtime:

I int omp_get_num_threads(); // mendapatkan jumlah thread

I int omp_get_thread_num(); // mendapatkan thread ID atau

rank

I double omp_get_wtime(); // mendapatkan time stamp

(28)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Lisensi

Paralel Program PI

I File: paralel/pi_spmd_simple.c

I Menggunakan construct parallel dan array data untuk menyimpan jumlah parsial

(29)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Sinkronisasi

I Sinkronisasi digunakan untuk menghindarkan kondisi race

I Memproteksi akses ke shared data

I Tipe: I Sinkronisasi high-level I critical I atomic I barrier I ordered I Sinkronisasi low-level I flush

(30)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Bahasan

Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

(31)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Sinkronisasi: Critical

I Mutual exclusion: Only one thread at a time can enter a critical region

oat res;

#pragma omp parallel {

float B; int i, id, nthrds; id = omp_get_thread_num(); nthrds = omp_get_num_threads(); for(i=id;i<niters;i+nthrds){

B = big_job(i);

#pragma omp critical // theads will wait their turns

consume (B, res); // Only one thread calls consume() at a time }

}

I Threads akan menunggu gilirannya

(32)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Bahasan

Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

(33)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Sinkronisasi: Atomic

I Atomic provides mutual exclusion but only applies to the update of a memory location

#pragma omp parallel {

double tmp, B; B = DOIT();

tmp = big_ugly(B); #pragma omp atomic

X += tmp; // Atomic only protects the read/update of X }

(34)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Bahasan

Tentang OpenMP Membuat Thread Membuat Thread Aplikasi Numerik Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

(35)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Paralel Program PI: Sinkronisasi

I Program paralel/pi_spmd_simple.c menggunakan array

I performansi rendah karena false sharing

I sum[id] unik untuk tiap thread, tapi tiap nilai array bisa saja

menggunakan jalur cache yang sama sehingga menyebabkan cache trashing

I Setiap update di cache akan membuat invalid jalur shared ini I Modifikasi program tersebut untuk menghindari false

sharing!

(36)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Sinkronisasi Critical Sinkronisasi Atomic False Sharing Lisensi

Paralel Program PI: Sinkronisasi

I File: paralel/pi_spmd_final.c

I Menghindari flase sharing karena pengunaan array

(37)

Pemrograman OpenMP @2012,Eko Didik Widianto Tentang OpenMP Membuat Thread Sinkronisasi Lisensi

Lisensi

Creative Common Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)

I Anda bebas:

I untukMembagikan — untuk menyalin, mendistribusikan,

dan menyebarkan karya, dan

I untukRemix — untuk mengadaptasikan karya

I Di bawah persyaratan berikut:

I Atribusi — Anda harus memberikan atribusi karya sesuai

dengan cara-cara yang diminta oleh pembuat karya tersebut atau pihak yang mengeluarkan lisensi.

I Pembagian Serupa — Jika Anda mengubah, menambah,

atau membuat karya lain menggunakan karya ini, Anda hanya boleh menyebarkan karya tersebut hanya dengan lisensi yang sama, serupa, atau kompatibel.

I Lihat:Creative Commons Attribution-ShareAlike 3.0 Unported License

Referensi

Dokumen terkait

Pentingnya mengetahui faktor yang mempengaruhi hasil produksi sebagai tolak ukur dalam pengambilan keputusan untuk menunjang pencapaian hasil produksi yang maksimal membuat

Semoga dengan adanya laporan ini akan memberikan informasi terbaru terkait pelaksanaan kegiatan yang telah berjalan maupun yang akan datang sehingga dapat meningkatkan

Indikator dari keefektifan pembelajaran tidak hanya dilihat dari hasil tes capaian kompetensi secara individual yang mampu memperoleh nilai di atas atau sama

Jika skenario yang demikian terjadi maka peningkatan tekanan akan mengakibatkan bagian annulus mengalami pengangkatan (gambar ) sehingga dapat menyebabkan robekan

saat ini, terutama bagi peserta didik yang harus lebih giat dan semangat belajar agar terjalinnya efektivitas penggunaan media sosial pada pem- belajaran jarak

Antena horn conical sudah dapat bekerja dengan baik pada frekuensi kerja c-band dengan VSWR simulasi bernilai 2,02 dan VSWR realisasi bernilai 1,679 yang artinya sudah

Mengenai peranan korban dalam terjadinya tindak pidana penipuan transaksi jual beli di internet. Si korban memiliki peranan yang yang cukup besar, yaitu dengan secara tidak

Risiko-risiko tersebut tidak hanya terkait dengan permintaan valuta asing bersih yang berasal dari defisit neraca transaksi berjalan, namun juga berasal dari kebutuhan untuk