Optimasi-Optimasi Program Perkalian Matriks Pada Komputer Berbasis Prosesor Multicore

dokumen-dokumen yang mirip
KONTRAK PEMBELAJARAN (KP) MATA KULIAH

BAB II LANDASAN TEORI

Kompleksitas Algoritma Rank Sort dan Implementasi pada Parallel Programming Dengan Menggunakan OpenMP

KOMPUTASI PARALEL UNTUK PENGOLAHAN PRESTASI AKADEMIK MAHASISWA

Arsitektur Komputer dan Sistem Operasi. Hirarki Memori. Sekolah Teknik Elektro dan Informatika - ITB

BAB III METODE PENELITIAN

KLASIFIKASI ARSITEKTURAL

Implementasi AES-ECB 128-bit untuk Komputasi Paralel pada GPU menggunakan Framework NVIDIA CUDA

Penggunaan Algoritma Paralel dalam Optimasi Prosesor Multicore

Model Pemrograman Paralel

Organisasi & Arsitektur. Komputer. Org & Ars komp Klasifikasi Ars Komp Repr Data

EC Sistem Komputer. Bagian 10 Cache Memory

KAJIAN PERBAIKAN KECEPATAN WAKTU EKSEKUSI TERHADAP UNJUK KERJA PIRANTI INPUT/OUTPUT. Suhartono Jurusan Matematika UNDIP. Abstrak

PENDAHULUAN. Motivasi : -. Pengolahan data numerik dalam jumlah yang sangat besar. -. Kebutuhan akan ketersediaan data yang senantiasa up to date.

KEBUTUHAN KOMPUTER PARALEL

PENGGUNAAN ALGORITMA PARALEL DALAM OPTIMASI PROSESOR MULTICORE

Penggunakan lebih dari satu CPU untuk menjalankan sebuah program secara simultan. Tujuan Utama Untuk meningkatkan performa komputasi.

ISSN : e-proceeding of Engineering : Vol.4, No.1 April 2017 Page 1301

Multithreading untuk Algoritma Divide and Conquer

BAB II LANDASAN TEORI. informasi menjadi sebuah teks yang tidak dapat dibaca (Ferguson dkk, 2010).

KOMPUTASI PARALEL PADA APLIKASI PAYROLL

Implementasi Hypergraph Partitioning pada Paralelisasi Perkalian Matriks-Vektor

Paralelisasi Transformasi Fourier pada Arsitektur General Purpose Graphic Processing Unit Untuk Klasifikasi Alat Musik Dengan Instrumen Solo

Konsep Organisasi dan Arsitektur Komputer (Pertemuan ke-2)

BAB I PENDAHULUAN. Merancang aplikasi Paralel Processing yang diimplementasikan dengan penggunaan Computer-Unified-Device-Architecture (CUDA).

PARALELISASI TRANSFORMASI WAVELET DISKRIT MENGGUNAKAN ARSITEKTUR CUDA PADA GRAPHIC PROCESSING UNIT UNTUK DE-NOISING CITRA

PROSEDUR PARALELISASI PERKALIAN MATRIKS PADA GRAPHICS PROCESSING UNIT (GPU)

PENGOLAHAN PARALEL. Kebutuhan akan Komputer Paralel PENDAHULUAN. Dahulu:

Thread, SMP, dan Microkernel (P ( e P rtemuan ua ke-6) 6 Agustus 2014

ORGANISASI KOMPUTER II AUB SURAKARTA

Implementasi Hypergraph Partitioning pada Paralelisasi Perkalian Matriks-Vektor

PENDAHULUAN. -. Pengolahan data numerik dalam jumlah yang sangat besar. -. Kebutuhan akan ketersediaan data yang senantiasa up to date.

10. PARALLEL PROCESSING

BAB I PENDAHULUAN. Keamanan dapat menjadi sebuah ketidak nyamanan. Namun, di zaman yang

Kinerja Tanda Tangan Digital RSA 1024 bit pada Simulasi E-Voting Menggunakan Prosesor Multicore

SATUAN ACARA PERKULIAHAN

Abstrak. Pendahuluan

SATUAN ACARA PERKULIAHAN MATA KULIAH ALGORITMA PENGOLAHAN PARALEL (S1/ TEKNIK INFORMATIKA)

KAJIAN PERBAIKAN KECEPATAN WAKTU EKSEKUSI TERHADAP UNJUK KERJA PIRANTI INPUT/OUTPUT. Suhartono. Jurusan Matematika UNDIP. Abstrak

Penyelesaian Barisan Rekursif dengan Kompleksitas Logaritmik Menggunakan Pemangkatan Matriks

Mikrokontroller Berbasiskan RISC 8 bits

Evaluasi Kinerja Algoritma Tanda Tangan Digital RSA Untuk Aplikasi E-Voting Menggunakan Komputer Berbasis Prosesor Multicore

Disusun Oleh: Agenda. Terminologi Klasifikasi Flynn Komputer MIMD. Time Sharing Kesimpulan

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

Cache Memori (bagian 3)

SATUAN ACARA PERKULIAHAN MATA KULIAH PENGOLAHAN PARALEL (S1/ TEKNIK KOMPUTER)

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP)

SATUAN ACARA PERKULIAHAN UNIVERSITAS GUNADARMA

PERANCANGAN ARSITEKTUR PEMARALELAN UNTUK MENCARI SHORTEST PATH DENGAN ALGORITMA DIJKSTRA

4 HASIL DAN PEMBAHASAN

RENCANA PEMBELAJARAN SEMESTER. No.RPS/PTE/PTI6208 Revisi/Tgl : 00/18 Agustus 2015 Semester 2 Hal 1 dari 7

RENCANA PEMBELAJARAN SEMESTER (RPS)

BAB IV PENGUJIAN DAN ANALISIS

1. PENDAHULUAN 1.1. LATAR BELAKANG MASALAH

DCH1B3 Konfigurasi Perangkat Keras Komputer

Disain Cache pada Sistem Komputer

Bab 4. Mengkaji dan Memahami Kinerja (Performance)

BAB I PENDAHULUAN. seiring perkembangan teknologi mikroprosesor, proses komputasi kini dapat

RENCANA PROGRAM DAN KEGIATAN PEMBELAJARAN SEMESTER

BAB I PENDAHULUAN 1.1 LATAR BELAKANG

RENCANA PROGRAM KEGIATAN PERKULIAHAN SEMESTER (RPKPS)

SILABUS MATAKULIAH. Indikator Pokok Bahasan/Materi Aktifitas Pembelajaran

BAB IV PENGUJIAN DAN ANALISIS

Tugas Arsitektur Komputer Lanjut

MEMORI. Secara garis besar, memori dapat diklasifikasikan menjadi dua bagian yaitu memori utama dan memori pembantu.

Pemrograman Memori Shared: Thread dan OpenMP

EKSPLOITASI INSTRUCTION-LEVEL PARALELLISM (ILP) PADA UNIPROCESSOR

SATUAN ACARA PERKULIAHAN MATA KULIAH : Organisasi Sistem Komputer Strata/Jurusan : SI/T. Informatika

Penerapan Algoritma Divide and Conquer Dalam Komputasi Paralel

PARALEL BLOK FAKTORISASI QR DALAM SISTEM MEMORI TERSEBAR MULTIKOMPUTER BERBASIS MPI-LINUX

Sistem terdistribusi Processes, Threads and Virtualization pertemuan 3. Albertus Dwi Yoga Widiantoro, M.Kom.

Komputasi Paralel Sebagai Alternatif Solusi Peningkatan Kinerja Komputasi

BAB II TINJAUAN PUSTAKA

MINGGU II DASAR SISTEM OPERASI

Performance. Team Dosen Telkom University 2016


Kebutuhan pengolahan paralel

ANALISIS KOMPUTASI PARALEL DAN SERIAL PADA ALGORITMA MERGE SORT

SATUAN ACARA PERKULIAHAN MATA KULIAH ORGANISASI SISTEM KOMPUTER KODE / SKS : KD / 3

Operating System. Thread. Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan. Dosen : Caca E. Supriana, S.Si

CACHE MEMORI (BAGIAN 3)

IKI20210 Pengantar Organisasi Komputer Kuliah no. 6c:Cache Memory. Bobby Nazief Johny Moningka

Pertemuan 5 Konsep dan Prinsip Desain TIK : Menjelaskan konsep, prinsip dan tahapan dalam perancangan software

SATUAN ACARA PERKULIAHAN (SAP)

PENGEMBANGAN SISTEM PERANGKAT LUNAK BERBASIS VIRTUAL MACHINE

PENGANTAR KOMPUTASI MODERN

Pengenalan Mikroprosessor

SATUAN ACARA PERKULIAHAN (SAP)

OPERASI MATRIKS. a 11 a 12 a 13 a 14 A = a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44

ANALISA KINERJA CLUSTER LINUX DENGAN PUSTAKA MPICH TERHADAP PERKALIAN MATRIKS

KARAKTERISTIK KINERJA ALGORITMA RECURSIVE DECOUPLING PADA SISTEM MULTIPROSESOR BERBASIS PVM

Pemrosesan Paralel. Haddad Sammir, M.Kom. Arsitektur Memori Komputer Paralel. March 4, 2015

Organisasi Sistem Komputer

DCH1B3 Konfigurasi Perangkat Keras Komputer

Pendahuluan Arsitektur Organisasi Komputer

TUGAS ARSITEKTUR DAN ORGANISASI KOMPUTER PERKEMBANGAN MEMORY PADA PROSESOR INTEL

BEA A New Block Cipher Algorithm

Struktur Fungsi CPU. Mata Kuliah Arsitektur Komputer Program Studi Sistem Informasi 2013/2014 STMIK Dumai -- Materi 03 --

Understanding Operating Systems Fifth Edition

Pendeteksian Kemacetan Lalu Lintas dengan Compute Unified Device Architecture (CUDA)

Transkripsi:

Optimasi-Optimasi Program Perkalian Matriks Pada Komputer Berbasis Prosesor Multicore Adnan Jurusan Teknik Elektro, Fakultas Teknik, Universitas Hasanuddin Jl. Perintis Kemerdekaan Km. 10, Makassar 90245, Indonesia. E-Mail: adnan@unhas.ac.id Abstract Paper ini menyajikan beberapa teknik-teknik optimasi program perkalian matrik dan hasil evaluasievaluasinya. Teknik optimasi yang pertama adalah loop exchange. Pada program perkalian matriks yang terdiri dari sebuah buah perulangan dan dua buah perulangan yang bersarang, loop exchange mempertukarkan posisi perulangan-perulangan tersebut sehingga diperoleh perulangan yang memiliki perilaku memory-locality of reference yang terbaik. Selain teknik loop-exchange, loopblocking juga merupakan sebuah teknik yang memanfaatkan locality of reference. Teknik optimasi terakhir yang ditambahkan adalah parallel programming yang memanfaatkan paralelisme yang dimiliki oleh prosesor multicore dan teknologi hyperthreading. I. Pendahuluan Prosesor dan memory pada sebuah sistem komputer merupakan sumber daya komputasi yang sangat berperan dan berpengaruh terhadap kinerja program-program komputer. Perbaikan-perbaikan terhadap prosesorprosesor seperti peningkatan clock-speed memberikan potensi perbaikan terhadap kinerja prosesor-prosesor tersebut. Teknologi multicore dan simultaneous multithreading yang ditambahkan pada arsitekturarsitektur prosesor-prosesor modern semakin meningkatkan potensi kinerja prosesor-prosesor tersebut. Namun di sisi lain, peningkatan kinerja memori tidak begitu dapat mengikuti peningkatan kinerja prosesor. Untungnya keberadaan memory dapat menolong permasalahan jurang antara prosesor dan memori. Meskipun teknologi prosesor multicore dan keberadaan memori di dalamnya merupakan sumber-daya highperformance-computing, program-program yang dibuat tidak dapat begitu saja memberikan kinerja yang maksimal tanpa adanya perbaikan pada sisi perangkat lunak tersebut. Agar dapat memanfaatkan teknologi prosesor multicore, sebuah perangkat lunak harus dapat berjalan pada beberapa prosesor core yang disebut multiprosesor. Dengan demikian perangkat lunak harus dapat dieksekusi dalam lingkungan shared-memorymultithreading[1]. Dengan berjalan dalam lingkungan multithreading dan multiprosesor, program dapat dibuat berjalan lebih cepat beberapa kali lipat dbandingkan jika dijalankan pada lingkungan single thread dan single prosesor. Demikian pula perilaku program dengan memori. Program tidak dapat begitu saja meningkat kinerjanya meskipun perangkat sistem komputer memiliki memori. Program-program harus dapat memberikan pola akses memori sedemikian sehingga prinsip-prinsip locality of reference yang sangat baik. Baik berupa spatial-locality maupun temporal locality. Adapun tujuan dari makalah ini adalah menunjukkan teknik-teknik yang dapat dipergunakan saat melakukan optimasi program komputer. Sebagai contoh kasus, pada makalah ini, program perkalian matrik[5] digunakan. Program perkalian matrik merupakan contoh yang baik untuk memperlihatkan eksploitasi parallelism, spatial \- locality dan temporal-locality of references II. Motivasi Pada bagian ini, makalah ini menyajikan motivasi yang mendorong penelitian ini. Pertama, bagian ini akan membahas arsitektur prosesor multcore dan multithreading serta meninjaunya dari sisi perangkat lunak sistem. Kedua, bagian ini membahas layout memori yang digunakan untuk struktur data array. Pembahasan ini penting mengingat pola akses yang memiliki locality of references yang baik akan memberikan kinerja yang baik pula. 1. Arsitektur Prosesor Multicore. Prosesor multicore memadukan beberapa prosesorprosesor ke dalam sebuah chip rangkaian terintegrasi. Komputer dengan prosesor multicore merupakan sistem multiprosesor. Namun demikian komputer dengan prosesor multicore berbeda dengan komputer multiprosesor dimana prosesor-prosesor pada multicore tidak terpisah dalam beberapa buah chip prosesor. Prosesor multicore merupakan sebuah chip yang di dalamnya terdapat beberapa buah prosesor. Dengan demikian Prosesor multicore dapat diclock dengan frekuensi yang lebih tinggi dan mengkonsumi daya yang lebih rendah. core core core core Memory Controller & interconnection Network Gambar 1. Model prosesor Multicore sederhana 23

Dengan tersedianya sejumlah prosesor pada komputer prosesor multicore, sebuah perangkat lunak yang berjalan secara multithreading pada sejumlah prosesor P dapat dieksekusi lebih cepat beberapa kali lipat dibandingkan dengan jika dieksekusi oleh sebuah prosesor. Jika waktu eksekusi sebuah program multithreaded menggunakan sebuah prosesor adalah T(1), maka waktu eksekusi ideal program tersebut mengunakan P prosesor ditunjukkan pada persamaan 1. T(P) = T(1) / P (1) sebagai privat sedangkan L3 diintegrasikan sebagai shared- Core 0 Core 1 Core 2 Core 3 Sebuah program sekuensial yang dieksekusi hanya menggunakan sebuah prosesor dalam waktu T S. Pada program sekuensial tersebut kita dapat menerima sebuah asumsi bahwa prosesor tidak melakukan kerja ekstra. Dan asumsi ini benar. Sebaliknya pada T(1) sudah termasuk waktu untuk kerja ekstra oleh sebuah prosesor untuk mengeksekusi program parallel (multithreaded). Oleh karenanya T(1) > T S sehingga persamaan 1 dituliskan ulang sebagai persamaan 2 dengan O adalah sebuah factor overhead kerja ekstra. Shared L3 Cache T(P) = O T S / P (2) Persamaan 1 dan 2 menunjukkan bahwa percepatan waktu eksekusi berbanding terbalik dengan jumlah prosesor. Namun kenyataannya, terdapat kerja ekstra yang harus dilakukan oleh prosesor-prosesor ketika mereka harus bekerja sama. Waktu untuk kerja ekstra ini semakin bertambah dengan semakin bertambahnya jumlah prosesor. Dengan mempertimbangkan overhead ini yang merupakan fungsi jumlah prosesor C(P) waktu eksekusi program paralel menggunakan sejumlah P prosesor diberikan pada persamaan 3. T(P) = O T S / P + C(P) (3) Dengan mengasumsikan bahwa O dan C(P) cukup kecil, maka pemrograman parallel dimaksudkan untuk melakukan optimasi waktu eksekusi sebuah program sehingga minimal berbanding terbalik terhadap jumlah prosesor. Prosesor multicore tidak hanya memadukan beberapa buah prosesor-prosesor ke dalam sebuah chip. Namun prosesor multicore juga memadukan memori berhierarki dalam sebuah chip. Memori yang diintegrasikan dalam prosesor multicore adalah memori statis sehingga berfungsi sebagai memori. Jumlah level dari hierarki memori yang ada pada prosesor multicore bervariasi. Ada prosesor-prosesor multicore yang memiliki dua level memori yaitu dan, ada prosesor-prosesor yang memiliki tiga level yaitu,, dan L3. Integrasi hierarki memori ke prosesorprosesor multicore dapat dilakukan dengan berbagai cara. Jika terdapat dua level memori, biasanya level terdekat di integrasikan ke sebuah prosesor sebagai privat, dan level berikutkan diintegrasikan ke prosesor multicore sebagai bersama (shared ). Jika terdapat level tambahan L3, dan diintegrasikan Memory Controller & interconnection Network Gambar 2. Model Prosesor Multicore dengan hierarki memori Waktu eksekusi sebuah program secara eksak ditentukan oleh jumlah total siklus clock n cycles yang dipergunakan selama mengeksekusi proram tersebut dan waktu siklus t cycle. Bilangan n cycles merupakan jumlah siklus instruksi i cycles dan jumlah siklus memori mm cycles. Bilangan n cycles juga merupakan kontribusi dari jumlah siklus clock masing-masing prosesor dari chip multicore. Asumsikan bahwa selama eksekusi t cycle merupakan sebuah parameter yang konstan. Dengan demikian total waktu yang prosesor-prosesor luangkan untuk program tersebut diberikan pada persamaan 4. Persamaan 4 mirip dengan persamaan pada [2] t CPU = (i cycles + mm cycles ) t cycle (4) Pada persamaan 4, bilangan i cycles termasuk jumlah siklus membaca instruksi dan data dari memori. Ini berarti bahwa instruksi dan data yang dibutuhkan telah berada di memori atau istilahnya hit. Jika sebaliknya yang disebut miss instruksi atau data perlu dimuat dari memori utama ke memori yang merupakan bagian berkontribusi kepada komponen siklus memori mm cycles. Jika t CPU merupakan total waktu dari sejumlah P prosesor dan beban terdistribusi secara seimbang pada prosesor-prosesor tersebut, maka waktu eksekusi di tunjukkan pada persamaan 5. Waktu eksekusi yang minimal diperoleh dengan optimasi mm cycles menjadi paling kecil. T(P) = t CPU / P T(P) = ( i cycles + mm cycles ) t cycles / P (5) 24

2. Locality of Reference Pada sub bagian ini disajikan perilaku pola akses program ke memori dan pengaruhnya terhadap kinerja program. Dengan dipahaminya perilaku ini, modifikasi program sehingga berperilaku pola akses yang baik menghasilkan eksekusi program dengan waktu yang lebih singkat. Locality of references[4] merupakan suatu konsep mengenai perilaku pola akses memori. Konsep ini dikenal ada dua, yaitu spatial locality of reference dan temporal locality of reference. Spatial locality of reference merupakan sebuah pola dimana program cenderung mengakses lokasi memori yang berdekatan selama durasi waktu eksekusi. Sehingga dengan mengakses lokasi yang berdekatan, maka sekali blok lokasi yang berdekatan dimuat ke, maka sebuah akses data di akan diikuti dengan beberapa akses ke blok. Dengan demikian pada akhirnya meminimalkan komponen mm cycles pada persamaan 5. Temporal locality of reference menjelaskan sebuah situasi bahwa pola akses-akses ke memory menunjukkan bahwa prosesor cenderung mengakses pada pada lokasi memori yang sama pada sebuah durasi waktu tertentu. Dengan fakta ini, program dengan temporal locality yang tinggi sering terjadi sebuah situasi di mana setelah memuat sebuah blok data ke, data pada tersebut dibaca berulang kali yang pada akhirnya mm cyckes pada persamaan 5 minimum. III. Teknik-Teknik Optimasi Program Untuk Prosesor Multicore. 1 Loop Interchange Loop-interchange [3] merupakan sebuah teknik yang diterapkan pada bentuk perulangan yang bersarang. Pada perulangan yang bersarang terdapat struktur perulangan yang berada di dalam struktur perulangan yang lain seperti yang ditunjukkan program penjumlahan matriks C[i][j] = A[i][j] + B[i][j] pada gambar 3. Penjumlahan matriks pada gambar 3 mengakses array-array dengan locality of reference yang sangat buruk. Tata letak array bahasa C pada memori adalah sedemikian sehingga elemen-elemen pada baris yang sama menempati lokasi memori yang bertetangga sedangkan elemen-elemen pada kolom yang sama menempati lokasi memori yang berjauhan. Program penjumlahan matrik pada gambar 3 secara berurutan mengakses elemen-elemen pada kolom yang sama yang berjauhan lokasinya pada memori. Program ini memiliki spatial locality of reference yang sangat rendah, laju miss yang tinggi dan berkontribusi mm cycles yang sangat besar. Walaupun elemen-elemen yang sudah termuat pada blok, namun blok tersebut segera akan digantikan oleh blok yang lain sehingga temporal locality of reference sangat rendah. Gambar 3. Perulangan bersarang.. Locality of reference program pada gambar 3 dapat diperbaiki dengan menukarkan perulangan i dan j sedemikian sehingga perulangan j bersarang di dalam perulangan i seperti yang ditunjukkan pada gambar 4. Gambar. 4. Pertukaran perulangn i dan j. Dengan perulangan j bersarang dalam perulangan i, program mengakses elemen-elemen matrik baris yang sama secara berurutan dalam sebuah selang waktu. Modifikasi program ini memperbaiki hanya spatial locality of reference namun tidak memperbaiki temporal locality of reference. 2 Loop Blocking Loop blocking [7] merupakan sebuah teknik yang juga diterapkan pada bentuk perulangan yang bersarang. Dengan loop blocking program mengakses array sedemikian sehingga pembacaan elemen-elemen dilakukan blok-blok secara berulang-ulang. Sebuah perulangan misalnya j di bagi menjadi beberapa blok perulangan sehingga sebuah perulangan j dirubah menjadi dua perulangan bersarang bj dan j seperti yang ditunjukkan oleh kode pada gambar 5. Kode pada gambar 5 ukuran setiap blok perulangan j adalah 4 elemen. blok = 4; for(bj=0;bj<n;bj+=blok) for(j=bj;j<bj+blok;j++) if (j<n) Gambar 5. Loop blocking dengan ukuran blok adalah 4 blok = 4; for(bj=0;bj<n;bj+=blok) for(j=bj;j<bj+blok;j++) if (j<n) Gambar 6. Modifikasi Loop blocking untuk meningkatkan temporal locality of reference Pola akses memori program pada gambar 5 masih sama dengan program pada gambar 4 sehingga belum memperbaiki temporal locality of reference. Loop blocking seharusnya dibuat sedemikian sehingga akses blok j dilakukan secara berulang-ulang. Hal ini mudah dilakukan dengan cara membuat perulangan j bersarang di 25

dalam perulangan i. Modifikasi program 4 diperlihatkan pada gambar 6. 3 Pemrograman Paralel Pemrograman parallel [8] merupakan sebuah teknik optimasi program yang bertujuan mengurangi waktu eksekusi dengan cara mengeksploitasi paralelisme yang terdapat dalam sebuah program. Secara garis besar pemrograman parallel terbagi atas dua kategori shared memori parallel programming dan distributed memory parallel programming. Shared memory parallel programming merupakan model pemrograman parallel untuk sistem shared memory multiprocessor. Standar pemrograman untuk model ini adalah OpenMP[6] yang menerapkan teknik pemrograman multithreading. Distributed memory parallel programming merupakan model untuk sistem distributed memory multicomputer. Standar pemrograman untuk model ini adalah MPI yang menggunakan teknik message-passing. Untuk computer dengan prosesor multicore yang digunakan dalam penelitian ini, pemrograman yang cocok adalah pemrograman multithreading. Program penjumlahan matrik pada gambar 3, 4, 5 dan 6 memiliki parallelisme yang dapat dieksploitasi. Paralelisasi program-program tersebut menghasilkan program-program parallel. Paralelisasi program dengan standar OpenMP terhadap program penjumlahan matrik dari gambar 4 ditunjukkan pada gambar 7. #pragma omp parallel private(i,j) /* mulai dari sini Block kode multithreading */ #pragma omp for Gambar 7. Program Paralel dari penjumlahan Matrik Paralelisasi program dengan OpenMP dilakukan dengan menambahkan compiler-directive pragma omp parallel. Directif ini berfungsi untuk memberitahu kompilator untuk mentranslasi blok kode terstruktur yang mengikuti menjadi blok kode yang dieksekusi secara parallel oleh beberapa thread. Ini berarti bahwa kodekode yang berada pada posisi setelah directif pragma omp parallel adalah kode parallel. Adapun dengan directiv pragma omp for kompilator melakukan translasi kode sehingga thread-thread berbagi kerja memproses array pada baris-baris i yang berbeda, yaitu perulangan I di proses secara parallel oleh thread-thread dari program gambar 7.. IV. Percobaan Bagian makalah ini menjelaskan eksperimeneksperiment yang dilakukan untuk melakukan optimasi program perkalian matrik. Bagian ini juga menyajikan hasil evaluasi sebelum dan sesudah program dioptimasi.matriks yang digunakan dalam program perkalian ini adalah matriks berdimensi 2000 2000 bertipe double precision. 1 Program Percobaan Seperti yang telah diungkapkan bahwa pada eksperiment menggunakan program perkalian matrik yang ditulis secara naïf. Program perkalian matrik naïf ditunjukkan pada gambar 8. for(k=0;k<n;k++) Gambar 8. Program perkalian matriks naif Optimasi pertama yang dilakukan adalah melakukan loop exchange sehingga diperoleh spatial locality yang sangat tinggi. Spatial-locality yang paling tinggi diperoleh dengan mengakses kolom-kolom matriks B dan C secara berurutan sehingga lebih baik perulangan j bersarang di perulangan yang paling dalam (perulangan bersarang i-kj) sehingga program modifikasi ditunjukkan pada gambar 9. for(k=0;k<n;k++) Gambar 9. Loop exchange program perkalian matriks Optimasi kedua yang dilakukan adalah melakukan loop blocking. Teknik loop blocking pada eksperimen ini diterapkan pada kolom matriks A dengan 4 elemen per blok kolom. Kolom A dipilih diakses dalam perulangan terdalam dengan alasan untuk meningkatkan spatial locality dari matriks A dan temporal locality dari matriks B dan C. Program dengan loop blocking ditunjukkan pada gambar 10. Program perkalian matrik dengan loopblocking kini terdiri dari 4 tingkat loop bersarang. Aksesakses ke elemen-elemen semua matriks disarankan untuk dibuat sedemikian sehingga mencakup seluruh area memori yang tersedia pada prosesor multicore. Optimasi ketiga yang dilakukan adalah paralelisasi. Paralelisasi dilakukan dengan menggunakan teknik domain decomposition. Teknik domain decomposition membagi blok-blok array yang selanjutnya diproses secara terdistribusi oleh beberapa prosesor. Dekomposisi blok-blok array dapat dilakukan secara baris maupun baris. Dalam percobaan ini, dekomposisi dilakukan terhadap baris-baris matrik C Untuk mengurangi 26

overhead akibat banyaknya nested-parallel-region, paralelisasi dilakukan dengan membuat paralel region bekerja pada perulangan terluar yaitu pada ruang iterasi i. Program paralel perkalian matriks ini ditunjukkan paga gambar 11. #define BS 4 for(bk=0;bk<n;bk+=bs) for(k=bk+;k<bk+bs;k++) Gambar 10. Loop blocking pada program perkalian matriks #define BS 4 #pragma omp parallel for private(i,bk,j,k) for(bk=0;bk<n;bk+=bs) for(k=bk+;k<bk+bs;k++) Gambar 11. Program perkalian matrik parallel 2 Konfigurasi Percobaan Percobaan dilakukan pada sebuah komputer jinjing Fujitsu Lifebook UH75/H dengan spesifikasi sebagai berikut Prosesor Intel Core i5-3317u 1.7 GHz Dual Core RAM 4GB 64 bit Windows 7 Program perkalian matriks dibuat dalam Bahasa C dan dengan menggunkan MinGW GCC 4.6.2. 3. Hasil Eksperimen Eksperimen dilakukan dengan mengeksekusi program perkalian matrik dan waktu eksekusinya diukur. Waktu eksekusi program diukur dengan cara membaca dua sistem waktu (clock) komputer sesaat sebelum dan setelah program dieksekusi. Waktu dieksekusi diperoleh dengan mengurangi waktu setelah dan sebelum eksekusi. Hasil eksekusi diberikan pada table 1. Tabel 1. Waktu eksekusi program perkalian matriks dengan berbagai teknik optimasi Teknik Ts (detik) Perbaikan Naif 53.358 1x Loop exchange 6.061 8.80 Loop blocking 5.99 8.90 Paralelisasi, loop dan loop blocking interchange 3.424. 15.583 Hasil eksperimen yang diperlihatkan pada tabel 1 menunjukkan perbaikan kinerja yang sangat signifikan terhadap kinerja program perkalian matrik naif V. Kesimpulan Makalah ini menyajikan beberapa teknik optimasi program perkalian matriks yang ditujukan untuk memaksimalkan kelebihan-kelebihan yang terdapat pada prosesor multicore sehingga meningkatkan kinerja program yang berjalan pada prosesor modern tersebut. Teknik-teknik yang digunakan yaitu loop exchange yang memaksimalkan spatial locality of reference, loop blocking yang memaksimalkan temporal dan spatial locality of reference dan pemrograman paralel. Penerapan teknik-teknik tersebut tidak hanya terbatas pada program perkalian matriks namun dapat diterapkan pada banyak program. VI. Referensi [1]. B. Lewis and D.J. Berg. Multithreded Programming with Pthreads. Prentice Hall, New Jersey. 1998 [2]. D.A. Patterson and J.L Hannessy, Computer Organization & Design The Hardware/Software Interface, 4 th edition, Morgan Kaufmann, San Francisco, 2008. [3]. D.F. Bacon, S.L. Graham and O.J. Sharp. Compiler transformations for high-performance computing. Report No. UCB/CSD 93/781, Computer Science Division-EECS, University of California, Berkeley, Berkeley, California 94720, November 1993 [4]. J.L. Hennessy and D.A. Patterson. Computer Architecture A Quantitative Approach. 4 th edition, Morgan Kaufmann, Boston, 2007. [5]. M.J. Quinn. Parallel Programming in C with MPI and OpenMP, 1 st edition. Mc Graw Hill. 2003. [6]. OpenMP ARB. OpenMP Application Program Interface, v.3.0. [7]. Steven S. Muchnick, Advanced Compiler Design and Implementation, Morgan-Kauffman. 1997. [8]. T. Rauber and G. Runger. Parallel Programming for Multicore and Cluster Systems. Springer-Verlag, Berlin Heidelberg. 2010. 27