Tugas Softskill Mata kuliah : Pengantar
Komputasi Modern
Nama Dosen : LELY PRANANINGRUM
Ignatius Vemri (55414102)
Jeremy Todali (55414632 )
Tubagus Agastha (5A414899)
Kelas : 4IA20
Pengantar Thread Programming
Dalam pemrograman komputer, sebuah thread
adalah informasi terkait dengan penggunaan sebuah program tunggal yang dapat
menangani beberapa pengguna secara bersamaan. Dari program point-of-view,
sebuah thread adalah informasi yang dibutuhkan untuk melayani satu pengguna
individu atau permintaan layanan tertentu. Jika beberapa pengguna menggunakan
program atau permintaan bersamaan dari program lain yang sedang terjadi, thread
yang dibuat dan dipelihara untuk masing-masing proses. Thread memungkinkan
program untuk mengetahui user sedang masuk didalam program secara bergantian
dan akan kembali masuk atas nama pengguna yang berbeda. Salah satu informasi
thread disimpan dengan cara menyimpannya di daerah data khusus dan menempatkan
alamat dari daerah data dalam register. Sistem operasi selalu menyimpan isi
register saat program interrupted dan restores ketika memberikan program
kontrol lagi.
Sebagian besar komputer hanya dapat
mengeksekusi satu instruksi program pada satu waktu, tetapi karena mereka
beroperasi begitu cepat, mereka muncul untuk menjalankan berbagai program dan
melayani banyak pengguna secara bersamaan. Sistem operasi komputer memberikan
setiap program “giliran” pada prosesnya, maka itu memerlukan untuk menunggu
sementara program lain mendapat giliran. Masing-masing program dipandang oleh
sistem operasi sebagai suatu tugas dimana sumber daya tertentu diidentifikasi
dan terus berlangsung. Sistem operasi mengelola setiap program aplikasi dalam
sistem PC (spreadsheet, pengolah kata, browser Web) sebagai tugas terpisah dan
memungkinkan melihat dan mengontrol item pada daftar tugas. Jika program
memulai permintaan I / O, seperti membaca file atau menulis ke printer, itu
menciptakan thread. Data disimpan sebagai bagian dari thread yang memungkinkan
program yang akan masuk kembali di tempat yang tepat pada saat operasi I / O
selesai. Sementara itu, penggunaan bersamaan dari program diselenggarakan pada
thread lainnya. Sebagian besar sistem operasi saat ini menyediakan dukungan
untuk kedua multitasking dan multithreading. Mereka juga memungkinkan
multithreading dalam proses program agar sistem tersebut disimpan dan menciptakan proses baru untuk setiap thread.
Static Threading
Teknik ini biasa digunakan untuk komputer
dengan chip multiprocessors dan jenis komputer shared-memory lainnya. Teknik
ini memungkinkan thread berbagi memori yang tersedia, menggunakan program
counter dan mengeksekusi program secara independen. Sistem operasi menempatkan
satu thread pada prosesor dan menukarnya dengan thread lain yang hendak
menggunakan prosesor itu.
Mekanisme ini terhitung lambat, karenanya
disebut dengan static. Selain itu teknik ini tidak mudah diterapkan dan rentan
kesalahan. Alasannya, pembagian pekerjaan yang dinamis di antara thread-thread
menyebabkan load balancing-nya cukup rumit. Untuk memudahkannya programmer
harus menggunakan protocol komunikasi yang kompleks untuk menerapkan scheduler
load balancing. Kondisi ini mendorong pemunculan concurrency platforms yang
menyediakan layer untuk mengkoordinasi, menjadwalkan, dan mengelola sumberdaya
komputasi paralel.
Sebagian platform dibangun sebagai runtime
libraries atau sebuah bahasa pemrograman paralel lengkap dengan compiler dan
pendukung runtime-nya.
Dynamic Multithreading
Teknik ini merupakan pengembangan dari teknik
sebelumnya yang bertujuan untuk kemudahan karena dengannya programmer tidak
harus pusing dengan protokol komunikasi, load balancing, dan kerumitan lain
yang ada pada static threading. Concurrency platform ini menyediakan scheduler
yang melakukan load balacing secara otomatis. Walaupun platformnya masih dalam
pengembangan namun secara umum mendukung dua fitur : nested parallelism dan
parallel loops. Nested parallelism memungkinkan sebuah subroutine di-spawned
(ditelurkan dalam jumlah banyak seperti telur katak) sehingga program utama
tetap berjalan sementara subroutine menghitung hasilnya. Sedangkan parallel
loops seperti halnya fungsi for namun memungkinkan iterasi loop dilakukan
secara bersamaan.
PEMROGRAMAN CUDA (GRAPHICAL PROCESSING UNIT)
Sebagaimana telah kita ketahui bahwa Cuda
adalah platform komputasi paralel dan model pemrograman yang diciptakan oleh
perusahaan perangkat keras dunia yaitu NVIDIA. hal ini memungkinkan peningkatan
dramatis dalam kinerja komputasi dengan memanfaatkan kekuatan dari Graphics
Processing Unit(GPU).
GPU (Graphical Processing Unit) pada awalnya
adalah sebuah prosesor yang berfungsi khusus untuk melakukan rendering pada
kartu grafik saja, tetapi seiring dengan semakin meningkatnya kebutuhan
rendering, terutama untuk mendekati waktu proses yang realtime /sebagaimana
kenyataan sesungguhnya, maka meningkat pula kemampuan prosesor grafik tersebut.
akselerasi peningkatan teknologi GPU ini lebih cepat daripada peningkatan
teknologi prosesor sesungguhnya (CPU), dan pada akhirnya GPU menjadi General
Purpose, yang artinya tidak lagi hanya untuk melakukan rendering saja melainkan
bisa untuk proses komputasi secara umum.
Penggunaan Multi GPU dapat mempercepat waktu
proses dalam mengeksekusi program karena arsitekturnya yang natively parallel.
Selain itu Peningkatan performa yang terjadi tidak hanya berdasarkan kecepatan
hardware GPU saja, tetapi faktor yang lebih penting adalah cara membuat kode
program yang benarbenar bisa efektif berjalan pada Multi GPU.
CUDA merupakan singkatan dari Compute Unified
Device Architecture,didefinisikan sebagai sebuah arsitektur komputer parallel,
dikembangkan oleh Nvidia. Teknologi ini dapat digunakan untuk menjalankan
proses pengolahan gambar, video, rendering 3D, dan lain sebagainya. VGA – VGA
dari Nvidia yang sudah menggunakan teknologi CUDA antara lain : Nvidia GeForce
GTX 280, GTX 260,9800 GX2, 9800 GTX+,9800 GTX,9800 GT,9600 GSO, 9600 GT,9500
GT,9400 GT,9400 mGPU,9300 mGPU,8800 Ultra,8800 GTX,8800 GTS,8800 GT,8800
GS,8600 GTS,8600 GT,8500 GT,8400 GS, 8300 mGPU, 8200 mGPU, 8100 mGPU, dan seri
sejenis untuk kelas mobile (VGA notebook).
Singkatnya, CUDA dapat memberikan proses dengan
pendekatan bahasa C, sehingga programmer atau pengembang software dapat lebih
cepat menyelesaikan perhitungan yang komplek. Bukan hanya aplikasi seperti
teknologi ilmu pengetahuan yang spesifik. CUDA sekarang bisa dimanfaatkan untuk
aplikasi multimedia. Misalnya meng-edit
film dan melakukan filter gambar. Sebagai contoh dengan aplikasi multimedia,
sudah mengunakan teknologi CUDA. Software TMPGenc 4.0 misalnya membuat aplikasi
editing dengan mengambil sebagian proces dari GPU dan CPU. VGA yang dapat
memanfaatkan CUDA hanya versi 8000 atau lebih tinggi.
Keuntungan dengan CUDA sebenarnya tidak luput
dari teknologi aplikasi yang ada. CUDA akan mempercepat proses aplikasi
tertentu, tetapi tidak semua aplikasi yang ada akan lebih cepat walaupun sudah
mengunakan fitur CUDA. . Hal ini tergantung seberapa cepat procesor yang
digunakan, dan seberapa kuat sebuah GPU yang dipakai. Dan bagian terpenting
adalah aplikasi apa yang memang memanfaatkan penuh kemampuan GPU dengan
teknologi CUDA. Kedepan seperti pengembang software Adobe akan ikut
memanfaatkan fitur CUDA pada aplikasi mereka. Jawaban akhir adalah, untuk
memanfaatkan CUDA kembali melihat aplikasi software yang ada. Apakah software
yang ada memang mampu memanfaatkan CUDA dengan proses melalui GPU secara penuh.
Hal tersebut akan berguna untuk mempercepat selesainya proses pada sebuah
aplikasi. Dengan kecepatan proses GPU, aplikasi akan jauh lebih cepat.
Khususnya teknologi ilmu pengetahuan dengan ramalan cuaca, simulator
pertambangan atau perhitungan yang rumit dibidang keuangan. Sedangkan aplikasi
umum sepertinya masih harus menunggu.
Paralelisme
Paralelisme (parallelism) lahir dari pendekatan
yang biasa dipergunakan oleh para perancang sistem untuk menerapkan konsep
pemrosesan konkuren. Teknik ini meningkatkan kecepatan proses dengan cara
memperbanyak jumlah modul perangkat keras yang dapat beroperasi secara simultan
disertai dengan membentuk beberapa proses yang bekerja secara simultan pada
modul-modul perangkat keras tersebut. Secara formal, pemrosesan parallel adalah
sebuah bentuk efisien pemrosesan informasi yang menekankan pada eksploitasi
dari konkurensi kejadian-kejadian dalam proses komputasi.Pemrosesan paralel
dapat terjadi pada beberapa tingkatan (level) proses. Tingkatan tertinggi
pemrosesan paralel terjadi pada proses di antara banyak job (pekerjaan) atau
pada program yang menggunakan multiprogramming, time sharing, dan multiprocessing.
Multiprogramming kemampuan eksekusi terhadap
beberapa proses perangkat lunak dalam sebuah system secara serentak, jika
dibandingkan dengan sebuah proses dalam satu waktu, dan timesharing berarti
menyediakan pembagian selang waktu yang tetap atau berubah-ubah untuk banyak
program. Multiprocessing adalah dukungan sebuah sistem untuk mendukung lebih
dari satu prosesor dan mengalokasikan tugas kepada prosesor-prosesor tersebut.
Multiprocessing sering diimplementasikan dalam perangkat keras (dengan
menggunakan beberapa CPU sekaligus), sementara multiprogramming sering
digunakan dalam perangkat lunak. Sebuah sistem mungkin dapat memiliki dua
kemampuan tersebut, salah satu di antaranya, atau tidak sama sekali. Pemrosesan
paralel dapat juga terjadi pada proses di antara prosedurprosedur atau perintah
perintah (segmen program) pada sebuah program.Untuk meningkatkan kecepatan
proses komputasi, dapat ditempuh dua cara :
Peningkatan kecepatan perangkat keras.
Komponen utama perangkat keras komputer adalah
processor. Meskipun kecepatan processor dapat ditingkatkan terus, namun karena
keterbatasan materi pembuatnya, tentu ada suatu batas kecepatan yang tak
mungkin lagi dapat dilewati. Karena itu timbul ide pembuatan komputer
multiprocessor. Dengan adanya banyak processor dalam satu komputer, pekerjaan
bisa dibagi-bagi kepada masing-masing processor. Dengan demikian lebih banyak
proses dapat dikerjakan dalam satu saat. Peningkatan kecepatan setiap proses
bisa dicapai melalui peningkatan kecepatan perangkat lunak. Kecepatan perangkat
lunak sangat ditentukan oleh algoritmanya.
Peningkatan kecepatan perangkat lunak.
Program komputer untuk komputer sekuensial
harus menyediakan sederetan operasi untuk dikerjakan oleh prosesor tunggal.
Program komputer untuk komputer paralel harus menyediakan sederetan operasi
untuk beberapa prosesor untuk dikerjakan secara paralel, termasuk operasi untuk
mengatur dan mengitegrasikan prosesor-prosesor yang terpisah tersebut
mengerjakan suatu komputasi yang koheren. Kebutuhan akan pembuatan dan
pengaturan berbagai aktivitas komputasi paralel menambah dimensi baru proses
dari pemrograman komputer. Algoritma untuk problem yang spesifik harus
diformulasikan sedemikian rupa, agar menghasilkan aliran operasi paralel yang
kemudian akan dieksekusi di prosesor yang berbeda. Karena itu, meskipun
arsitektur multiprosesor dan multikomputer mempunyai pontensi yang tinggi untuk
meningkatkan kemampuan komputasi, potensi ini akan tercapai melalui pengertian
yang baik mengenai bahasa pemrograman paralel dan perancangan algoritma
paralel.
Tingkat Paralelisme
Berdasarkan tingkat paralelismenya prosesor
paralel dapat dibagi menjadi beberapa tingkat sebagai berikut :
1. Komputer Array :
a. Prosesor array : beberapa prosesor yang
bekerja sama untuk mengolah set instruksi yang sama dan data yang berbeda –
beda atau biasa disebut SIMD (Single Instruction-stream Multiple Data)
b. Prosesor vektor : beberapa prosesor yang
disusun seperti pipeline.
2. Multiprosesor, yaitu sebuah sistem yang
memiliki 2 prosesor atau lebih yang saling berbagi memori.
3. Multikomputer, yaitu sebuah sistem yang
memiliki 2 prosesor atau lebih yang masing-masing prosesor memiliki memori
sendiri.
Jenis-Jenis Pemrosesan Paralel
Pemrosesan paralel dapat dibagi ke dalam
beberapa klasifikasi, sebagai berikut :
1. Berdasarkan simetri penjadwalannya,
pemrosesan parallel dapat dibagi dalam beberapa jenis:
a) Asymmetric Multiprocessing (ASMP)
b) Symmetric Multiprocessing (SMP)
c) ClusteringPoliteknik Telkom Sistem Komputer
2. Berdasarkan aliran instruksi dan datanya,
pemrosesan parallel dapat dibagi dalam beberapa jenis:
a) SISD (Single Instruction on Single Data
Stream)
b) SIMD (Single Instruction on Multiple Data
Stream)
c) MISD (Multiple Instruction on Single Data
Stream)
d) MIMD (Multiple Instruction on Multiple Data
Stream)
3. Berdasarkan kedekatan antar prosesor,
pemrosesan parallel dapat dibagi dalam beberapa jenis:
a) Multikomputer (Loosely Coupled/ local
memory) dengan memori yang terdistribusi
b) Multiprosesor (Tightly Coupled/ global
memory) dengan memori yang dapat digunakan bersama (shared memory)


