Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman...

30
@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 1 / 30 Pemrograman Memori Shared: Thread dan OpenMP Eko Didik Widianto ([email protected]) Lab Embedded, Siskom - Undip

Transcript of Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman...

Page 1: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 1 / 30

Pemrograman Memori Shared: Thread dan OpenMP

Eko Didik Widianto ([email protected])

Lab Embedded, Siskom - Undip

Page 2: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Pengolahan Paralel

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 2 / 30

• Pokok Bahasan

◦ Konsep dan terminologi

◦ Arsitektur memori paralel

◦ Model pemrograman paralel

◦ Desain Program Memori Shared: Thread dan OpenMP

◦ Memprogram paralel

• Referensi:

◦ Introduction to Parallel Computing: https://computing.llnl.gov/tutorials/parallel_comp/

Page 3: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Bahasan

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 3 / 30

Pemrograman Shared MemoryProses dan MemoriMemori Shared dan Pemrograman

Pemrograman ThreadPustaka Thread (Sistem)POSIX Threads

Pemrograman OpenMPTentang OpenMPModel EksekusiSharing Data

Page 4: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Pemrograman Paralel diArsitektur Memori Shared

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 4 / 30

Page 5: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Proses dan Memori

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 5 / 30

• Program dan Process

◦ Program: source code dengan bahasa pemrograman tertentu ataufile executable

◦ Process/task: konsep OS tentang program yang sedang berjalan

◦ Program yang dijalankan di shell akan membuat satu proses baru(spawn, fork)

• Program berisi statemen executable dan deklarasi data

◦ Tiap data mempunyai properti storage class (durasi: permanen/statik,automatic/temporary) dan scope (global, lokal)

◦ Properti menentukan penempatannya di virtual memori

◦ Data yang dideklarasikan di luar fungsi: scope global, permanen

◦ Data yang dideklarasikan di dalam fungsi (termasuk main): scopelokal, temporary

◦ Data dapat dideklarasikan permanen dengan keyword static

Page 6: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Peta Memori: Text, Data, BSS

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 6 / 30

• Kompiler menerjemahkanstatemen executable ke instruksiCPU, dan deklarasi data ke bentuksesuai spesifikasi mesin

• Linker membuat file executable dan menghimpun instruksi dan datadi segment yang berbeda

◦ Instruksi dimasukkan ke segmen text (RO)

◦ Data terinisialisasi, data statik, konstanta masuk ke segmen data(RW)

◦ Data tidak terinisialisasi masuk ke bss (block started from symbol)

• Contoh program

Page 7: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Peta Memori: Heap, Stack

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 7 / 30

• Alamat memori virtual mulai dari 0 sampai 512GB.Alamat di atas 512GB reserved untuk kernel Linux. Tiaparsitektur mungkin limitnya beda

• size dari process (text+data+bss) ditentukan saatkompilasi dan konstan selama eksekusi

• Segmen heap untuk alokasi memori dinamik (misalnyadengan fungsi malloc)

• Segmen stack untuk variabel lokal fungsi/sub-rutin

• Text, data, bss dipetakan ke memori fisik dengan page table

• Heap dan stack: memori secara dinamis dialokasikan dandibebaskan (allocate, deallocate), sehingga page table juga diupdatesecara dinamis

• Baca: http://www.ualberta.ca/CNS/RESEARCH/LinuxClusters/mem.html

Page 8: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Memori Shared dan Model Pemrograman

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 8 / 30

Recall Thread:

(source: http://www.javamex.com/tutorials/threads/how_threads_work.shtml)

Page 9: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Memori Shared dan Model Pemrograman

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 9 / 30

• Process merupakan kumpulan dari thread

◦ Dapat dibuat secara dinamik, di tengah eksekusi

◦ Tiap thread mempunyai variabel private (local stack)

◦ Juga mempunyai variabel shared (variabel statik atau heap global),misalnya s

◦ Antar thread berkomunikasi secara implisit dengan menulis/membacavariabel shared

◦ Antar thread berkoordinasi dengan sinkronisasi variabel shared

Page 10: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Contoh Problem

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 10 / 30

• Misalnya: buat program untukn− 1∑

i = 0f (A [i])

• Dimana akan menempatkan A? semuanya di memori? atau dipecah?

• Operasi mana yang akan dilakukan oleh tiap prosesor?

• Bagaimana mengkoordinasi tiap hasil pecahan operasi?

◦ A = array dari semua data

◦ fA = f(A)

◦ s = sum(fA)

Page 11: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Strategi Memori Shared

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 11 / 30

• Strategi: jumlah prosesor p << n, menggunakan memori tunggal

• Dekomposisi paralel: tiap evaluasi dan tiap penjumlahan parsialadalah sebuah task

• Berikan tugas sejumlah n

pbilangan ke tiap prosesor

◦ Tiap prosesor menghitung secara independen hasil (privat)dan jumlah parsialnya

◦ Mengumpulkan p jumlah parsial dan menghitung jumlah global

• Kelas data:

◦ Shared: jumlah global, nomor n

◦ Private: evaluasi fungsi, bagimana dengan jumlah parsial?

Page 12: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Kondisi Race

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 12 / 30

• Apa masalah di program berikut?

• Kondisi race atau data race dapat terjadi

◦ Saat dua prosesor (dua thread) mengakses variabel yangsama dan setidaknya satu thread melakukan operasipenulisan

◦ Saat akses-akses tersebut terjadi bersamaan (tidakdisinkronkan)

Page 13: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Kondisi Race: Hasil Tidak Seperti Yang Diinginkan

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 13 / 30

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

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

◦ Tapi nilainya bisa 34, 9 atau 25

• Operasi atomik adalah pembacaan dan penulisan

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

◦ Semua komputasi terjadi di register private

Page 14: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Perbaikan Kode

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 14 / 30

• Karena penjumlahan bersifat asosiatif, maka urutan penjumlahantidak jadi masalah

• Sebagian komputasi menggunakan variabel private

◦ Frekuensi sharing berkurang, sehingga mungkin meningkatkankecepatan

◦ Masih terdapat peluang kondisi race saat update s shared.Race dapat diatasi dengan menambahkan lock (mutex)

• Hanya satu thread yang bisa memegang lock, lainnyamenunggu

Page 15: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Model Thread di Shared Memory

Pemrograman SharedMemory

• Proses dan Memori• Memori Shared danPemrograman

Pemrograman Thread

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 15 / 30

Page 16: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Pemrograman Paralel denganThread

Pemrograman SharedMemory

Pemrograman Thread

• Pustaka Thread (Sistem)

• POSIX Threads

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 16 / 30

Page 17: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Pustaka Thread (Sistem)

Pemrograman SharedMemory

Pemrograman Thread

• Pustaka Thread (Sistem)

• POSIX Threads

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 17 / 30

1. Pthreads: POSIX Standar

• Lebih low level

• Portabel tapi mungkin lebih lambat

2. OpenMP: standar untuk programming level aplikasi

• Mendukung pemrograman saintifik di memori shared

• http://www.openMP.org

3. Java Threads

• Dibangun di atas thread POSIX

• Object di bahasa Java

Page 18: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Implementasi Model Thread

Pemrograman SharedMemory

Pemrograman Thread

• Pustaka Thread (Sistem)

• POSIX Threads

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 18 / 30

• Dari perspektif programmer, implementasi thread dapat dilakukandari:

1. Pustaka dari subrutin yang dipanggil dari dalam source codeparalel

2. Set compiler directive yang di-embed-kan di source code(serial atau paralel)

• Implementasi thread: POSIX Threads dan OpenMP

◦ Posix (pthread) menggunakan pustaka, memerlukanpengkodean paralel

• Paralelisme eksplisit, memerlukan programmer yangmahir di paralel

◦ OpenMP, menggunakan compiler directive; dapatmenggunakan kode serial

Page 19: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

POSIX Threads

Pemrograman SharedMemory

Pemrograman Thread

• Pustaka Thread (Sistem)

• POSIX Threads

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 19 / 30

• POSIX: Portable Operating System Interface for UNIX

◦ IEEE Std 1003.1c-1995 mendefinisikan API untuk membuatdan memanipulasi thread

◦ System call untuk membuat dan mensinkronkan thread

◦ Implementasi API: FreeBSD, NetBSD, GNU/Linux, Mac OS Xdan Solaris

◦ Windows? pthreads-w32 (third party)

• Support PThread

◦ Membuat program paralel

◦ Sinkronisasi

◦ Memori shared implisit, pointer ke data shared diberikan kesuatu thread

Page 20: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Fungsi Threads: Creating Thread

Pemrograman SharedMemory

Pemrograman Thread

• Pustaka Thread (Sistem)

• POSIX Threads

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 20 / 30

int pthread_create(pthread_t * thread,const pthread_attr_t * attr,void * (*start_routine)(void *),void *arg);

• Contoh:

err = pthread_create(&thread_id,&thread_attr,PrintHello,&thread_arg);

• Lihat program sample!

Page 21: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Manajemen Thread

Pemrograman SharedMemory

Pemrograman Thread

• Pustaka Thread (Sistem)

• POSIX Threads

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 21 / 30

Joining and Detaching Threadspthread_join (threadid,status)pthread_detach (threadid)pthread_attr_setdetachstate (attr,detachstate)pthread_attr_getdetachstate (attr,detachstate)

• Joining adalah salah satu cara untuk sinkronisasi antar thread

◦ Metode lainnya: mutex

Page 22: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Manajemen Thread: Mutex

Pemrograman SharedMemory

Pemrograman Thread

• Pustaka Thread (Sistem)

• POSIX Threads

Pemrograman OpenMP

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 22 / 30

• Code!

Page 23: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Pemrograman Paralel denganOpenMP

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 23 / 30

Page 24: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Tentang OpenMP

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 24 / 30

• OpenMP

◦ Spesifikasi open untuk Multi-Processing

◦ API standard untuk mendefinisikan program multi-threadedshared-memory

◦ Resources: http://openmp.org/wp/resources/ - talks, examples,forum

◦ Baca:

• Ruud van des Pas: An Overview of OpenMP• materi selanjutnya diambil dari slide Pas

◦ Tugas #1 diambil dari program example di openmp.org

• High-level API

◦ Preprocessor (compiler) directive (~80%)

◦ Library calls (~19%)

◦ Variabel environment (~1%)

Page 25: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Model Eksekusi OpenMP

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 25 / 30

Page 26: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Model Sharing Data OpenMP

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 26 / 30

• Program paralel seringkali mempunyai 2 tipe data:

1. Data shared, dapat diakses oleh semua thread, mempunyai namayang sama

2. Private data, hanya dapat diakses oleh satu thread (biasanyadialokasikan di stack)

• Pthreads:

◦ Variabel dengan scope global adalah shared (data, bss, global heap)

◦ Variabel dengan alokasi stack adalah private

• OpenMP:

◦ Variabel shared adalah shared. Dinyatakan dengan shared(list)

◦ Variabel private adalah private. Dinyatakan dengan private(list)

Page 27: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Model Sharing Data OpenMP

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 27 / 30

Pthreads:// shared, globals

int bigdata[1024];void* foo(void* bar) {

// private, stackint tid;/* Calculation goes here */

}

OpenMP:int bigdata[1024];void* foo(void* bar){

int tid;#pragma omp parallel shared(bigdata) private (tid) {

/* Calc. here */ }}

Page 28: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Contoh OpenMP

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 28 / 30

Page 29: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Contoh Perkalian Matriks dan Vektor

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 29 / 30

Page 30: Pemrograman Memori Shared: Thread dan OpenMP dan Memori Memori Shared dan Pemrograman Pemrograman Thread Pustaka Thread (Sistem) POSIX Threads Pemrograman OpenMP ... Sinkronisasi

Baca Hands-on Introduction to OpenMP

Pemrograman SharedMemory

Pemrograman Thread

Pemrograman OpenMP

• Tentang OpenMP

• Model Eksekusi

• Sharing Data

@2012 eko didik widianto (siskom undip) SK617 Pengolahan Paralel – 30 / 30

• Tim Mattson dan Larry Meadows, Intel Corporation

• Tutorial dan Example