Apa yang Datang Terlebih Dahulu: Bahasa Paralel atau Pola Pemrograman Paralel?

Pada pelatihan “An introduction to shared memory parallel programming using OpenMP” di Lund University, Swedia (29-30 Mei 2018), saya mendengar diskusi tentang pola pemrograman paralel. Sebagai programmer paralel, saya tertarik dengan apa yang orang katakan tentang pola pemrograman paralel, bagaimana perkembangannya, dan bagaimana pengaruhnya pada programmer paralel di masa depan. Diskusi berubah menjadi apakah pola pemrograman paralel akan mempengaruhi bahasa pemrograman secara langsung, atau tetap menjadi sesuatu yang dibangun dari pernyataan bahasa.

Bagi orang yang sudah memprogram komputer sejak Michael Jackson masih hidup, coba pikirkan kembali menulis program dengan bahasa assembly. Sebagian besar instruksi adalah Load, Store, Add, Compare, Jump, ditambah beberapa variasinya dan instruksi lain-lain. Untuk menerapkan looping pencacahan, programmer akan menggunakan cara sebagai berikut:

Inisialisasi counter

LOOP: tes kondisi akhir, ke EXIT jika selesai

Tubuh loop

Naikkan counter

Ke LOOP

EXIT: pernyataan berikutnya

Di atas adalah pola pemrograman. Dengan instruksi pengujian kondisional yang tepat dan instruksi lompat dalam bahasa pemrograman, pola di atas dapat diimplementasikan dalam bahasa imperatif apa pun.

Berhubung pola di atas terbukti sangat berguna dan pervasif dalam komputasi yang sedang dilakukan, perancang bahasa pemrograman menambahkan sintak untuk “mengotomatiskan” langkah-langkah di atas. Sebagai contoh, looping “for” dalam bahasa C.

for (i = 0; i < N; ++i)

{

Tubuh Loop

Baca juga:

}

Setelah programmer memiliki thread dan pustaka pendukung untuk membuat dan mengelola thread, maka pemrograman paralel dalam shared memory menjadi mudah, tetapi pada level yang cukup kasar karena programmer harus memastikan bahwa program menangani semuanya secara eksplisit. Sebagai contoh, membagi iterasi loop antara thread dapat dilakukan dengan cara setiap thread mengeksekusi kode seperti berikut ini:

start = (N/num_threads) * (myid)

end = (N/num_threads) * (myid + 1)

if (myid == LAST)

end = N

for (i = start; i < end; ++i)

{

Tubuh Loop

}

Pola pemrograman paralel akan menjadi abstraksi yang dapat diimplementasikan dalam bahasa dan pustaka paralel saat ini, seperti pseudocode di atas. Bahasa baru akan membuat pola pemrograman paralel menjadi lebih mudah dan mengurangi kesalahan. Dari contoh di atas, OpenMP memiliki sintak untuk melakukan itu, tetapi hanya membutuhkan satu baris yang ditambahkan ke kode serial:

#pragma omp for

for (i = 0; i < N; ++i)

{

Tubuh Loop

}

Dari bukti di atas, saya pikir masa depan bahasa pemrograman paralel atau ekstensi bahasa yang mendukung paralelisme akan dipengaruhi oleh pola pemrograman paralel yang didefinisikan dan digunakan saat ini, dan tidak ada yang tetap statis.

Untuk jawaban atas pertanyaan yang diajukan pada judul di atas, bermuara pada paradoks lama yaitu ayam dan telur. Terdapat algoritme untuk melakukan komputasi sebelum adanya komputer; sebelum itu, algoritme tersebut adalah modifikasi dari algoritme sebelumnya yang dipengaruhi oleh peralatan yang tersedia. Generasi selanjutnya bahasa pemrograman paralel atau pustaka atau ekstensi bahasa serial akan dipengaruhi oleh pola yang digunakan sekarang untuk menentukan komputasi paralel.

Artikel Berhubungan:

Sponsor Warstek.com:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *