Anda di halaman 1dari 9

TUGAS KELOMPOK

REKAYASA KOMPUTASIONAL









Disusun Oleh :
1. Agung Dermawan 50411330
2. Annisa Indah Ramdhandini 50411959
3. Diah Intan Sari 52411013
4. Sonityo Danang Jaya 56411856
5. Tyasti Wulan Puspita 57411204
6. Yuda Aristian 57411596


Universitas Gunadarma
2014
Tugas Kelompok Rekayasa Komputasional OpenCL 2
APA ITU OpenCL?

OpenCL (Open Computing Library)
OpenCL (Open Computing Library) merupakan framework untuk menulis
program yang jalankan di berbagai platform heterogen yang terdiri dari CPU, GPU, dan
prosesor lainnya. OpenCL mencakup bahasa (berdasarkan C99) untuk menulis kernel
(fungsi yang dijalankan pada perangkat OpenCL), ditambah API yang digunakan untuk
mendefinisikan dan kemudian mengontrol platform.















OpenCL menyediakan komputasi paralel menggunakan paralelisme berdasarkan
tugas dan data berbasis. Alat ini telah diadopsi ke dalam driver kartu grafis oleh AMD /
ATI, yang membuatnya sendiri GPGPU penawaran dicap sebagai Streaming SDK, dan
Nvidia, yang menawarkan OpenCL sebagai pilihan yang sama dengan Arsitektur Unified
Perangkat Compute (CUDA) dalam driver nya. OpenCLs arsitektur berbagi berbagai
interface komputasi dengan baik CUDA dan pesaing DirectCompute Microsoft.
Tugas Kelompok Rekayasa Komputasional OpenCL 3
SEJARAH

OpenCL awalnya dikembangkan oleh Apple Inc , yang memegang merek dagang
hak, dan disempurnakan menjadi sebuah proposal awal bekerja sama dengan tim teknis
di AMD , IBM , Intel , dan Nvidia . Apel mengajukan proposal awal ini ke Grup Khronos
. Pada tanggal 16 Juni 2008, Khronos Hitung Kelompok Kerja dibentuk dengan
perwakilan dari CPU, GPU, tertanam-prosesor, dan perusahaan perangkat lunak.
Kelompok ini bekerja selama lima bulan untuk menyelesaikan rincian teknis dari
spesifikasi untuk OpenCL 1.0 sebesar 18 November 2008. Spesifikasi teknis ini telah
diperiksa oleh anggota Khronos dan disetujui untuk rilis publik pada tanggal 8 Desember
2008.

OpenCL 1.0
OpenCL 1.0 telah dirilis dengan Mac OS X Snow Leopard . Menurut siaran pers
Apel :
Snow Leopard lebih lanjut memperluas dukungan untuk perangkat keras
modern dengan Open Computing Language (OpenCL), yang memungkinkan aplikasi
keran ke gigaflops besar daya komputasi GPU sebelumnya hanya tersedia untuk
aplikasi grafis. OpenCL didasarkan pada bahasa pemrograman C dan telah diusulkan
sebagai standar terbuka.
AMD telah memutuskan untuk mendukung OpenCL (dan DirectX 11) bukan
sekarang usang Dekat Logam dalam Surat kerangka Streaming . RapidMind
mengumumkan adopsi mereka OpenCL bawah platform pengembangan untuk
mendukung GPU dari beberapa vendor dengan satu antarmuka. Pada tanggal 9
Desember 2008, Nvidia mengumumkan niatnya untuk menambahkan dukungan
penuh untuk OpenCL 1.0 spesifikasi untuk perusahaan Computing Toolkit GPU. Pada
tanggal 30 Oktober 2009, IBM merilis implementasi OpenCL pertama sebagai bagian
dari kompiler XL .

Tugas Kelompok Rekayasa Komputasional OpenCL 4
OpenCL 1.1
OpenCL 1.1 disahkan oleh Khronos Group on 14 Juni 2010 dan menambahkan
fungsionalitas yang signifikan untuk meningkatkan fleksibilitas pemrograman
paralel, fungsionalitas, dan kinerja termasuk:
Tipe data baru termasuk vektor 3-komponen dan format gambar tambahan;
Penanganan perintah dari beberapa benang host dan pengolahan buffer di
beberapa perangkat;
Operasi pada daerah penyangga termasuk membaca, menulis dan menyalin dari
1D, 2D, atau wilayah persegi panjang 3D;
Peningkatan penggunaan acara untuk mendorong dan mengontrol perintah
eksekusi;
Tambahan OpenCL built-in fungsi C seperti penjepit integer, shuffle, dan salinan
strided asynchronous;
Peningkatan interoperabilitas OpenGL melalui berbagi efisien gambar dan buffer
dengan menghubungkan peristiwa OpenCL dan OpenGL.

OpenCL 1.2
Pada 15 November 2011, para Khronos Group mengumumkan spesifikasi
OpenCL 1.2, yang menambahkan fungsionalitas yang signifikan selama versi
sebelumnya dalam hal kinerja dan fitur untuk pemrograman paralel. Fitur yang paling
menonjol meliputi:
Partisi perangkat: kemampuan untuk partisi perangkat ke dalam sub-perangkat
sehingga tugas kerja dapat dialokasikan untuk unit menghitung individu. Hal ini
berguna untuk melestarikan daerah perangkat untuk mengurangi latency untuk
tugas-tugas waktu-kritis.
Kompilasi terpisah dan menghubungkan objek: fungsi untuk mengkompilasi
OpenCL ke perpustakaan eksternal untuk dimasukkan ke program lain.
Tugas Kelompok Rekayasa Komputasional OpenCL 5
Peningkatan dukungan gambar: 1.2 menambahkan dukungan untuk gambar 1D
dan array gambar 1D/2D. Selanjutnya, berbagi ekstensi OpenGL sekarang
memungkinkan untuk OpenGL 1D tekstur dan 1D/2D array tekstur yang akan
digunakan untuk membuat gambar OpenCL.
Built-in kernel: perangkat kustom yang mengandung fungsi yang unik spesifik
sekarang terintegrasi lebih erat ke dalam kerangka OpenCL. Kernel dapat
dipanggil untuk menggunakan aspek-aspek khusus atau non-programmable
hardware yang mendasarinya. Contohnya termasuk video encoding / decoding
dan prosesor sinyal digital.
Fungsi DirectX: DX9 berbagi permukaan media yang memungkinkan untuk
berbagi efisien antara OpenCL dan DX9 atau DXVA permukaan media. Sama,
untuk DX11, berbagi mulus antara OpenCL dan DX11 permukaan diaktifkan.

Kelebihan OpenCL

OpenCL memberikan setiap akses aplikasi ke Graphics Processing Unit untuk non-
grafis komputasi.









OpenCL memperluas kekuatan Graphics Processing Unit di luar grafis (tujuan umum
komputasi pada graphics processing unit).
OpenCL adalah analog dengan standar industri terbuka OpenGL dan OpenAL, untuk
grafis 3D dan audio komputer, masing-masing.
Tugas Kelompok Rekayasa Komputasional OpenCL 6
OpenCL dapat mempercepat perhitungan matematis paralel lebih banyak. Algoritmanya
dapat dengan mudah diparalelkan, beberapa contohnya:
- Fungsi akar-temuan dan optimasi;
- Gambar penyaringan dan pengolahan;
- Perhitungan vektor Vertex dan normal untuk model 3D;
- Algoritma evolusioner seperti Algoritma Genetika atau Ant Colony Sistem;
- Partikel interaksi
- Scripting Matematika: anda dapat mengkompilasi kode dalam waktu eksekusi

Kekurangan OpenCL

Saat ini, alat-alat untuk debug kode OpenCL tidak sangat baik. Saat menulis kode C #
dengan cara OpenCL, fungsi tidak mengembalikan data (void) dan menerima vektor
floats dan ints.

Contoh Program OpenCL

Kita akan menghitung jumlah terbesar dari daftar berikut dengan bilangan positif:
1 2 3 1 7 10 11 30 28 65 33 1 2 3 10

Cara yang paling mudah untuk melakukan ini adalah:
Float max = -1;
for (int i = 0; i <x.Length, i + +)
{
if (max <x [i]) max = x [i];
}
Membuat proyek Visual Studio baru untuk ini. Load acara formulir harus menginisialisasi
OpenCL dan mengkompilasi kode :

Tugas Kelompok Rekayasa Komputasional OpenCL 7
... OpenCLTemplate CLCalc Program Kernel kernelCalcMax;
private void Form1_Load (pengirim objek, EventArgs e)
{
String calcMaxSrc = @ "
__kernel batal
calcMax (__ mengambang global yang * x,
__global float * max)
{
/ / Index elemen Vector
int i = get_global_id (0);
if (max [0] <x [i]) max [0] = x [i];
} ";
InitCL CLCalc ().;
if (GLAcceleration CLCalc. == CLCalc. GLAccelerationType. UsingGL) {
Kompilasi (Program CLCalc.. Baru string [1] {} calcMaxSrc);
kernelCalcMax = new . Program CLCalc Kernel ("calcMax").;
}
}
Sebagai program tersebut dimuat, kami menyatakan sumber OpenCL, menginisialisasi
OpenCL dan mengkompilasi program.
Ini adalah screenshoot program nya :


Tugas Kelompok Rekayasa Komputasional OpenCL 8
Seperti yang Anda lihat, jenis daftar nomor di textbox txtList pengguna.
Perhitungan maksimum dari Read textbox, menghitung maksimum benar dan
menjalankan kode OpenCL:

private void btnMaxWithOpenCL_Click (pengirim objek, EventArgs e)
{
String [] s = txtList.Text.Split ();
float [] x = float baru [s.Length];

String DataRead = "";
for (int i = 0; i <x.Length, i + +)
{
float.TryParse (s [i], keluar x [i]);
x [i] = Math.abs (x [i]);
if (DataRead = "!") DataRead + = "";
DataRead + = x [i] ToString ();.
}
txtList.Text = DataRead;
/ / Got daftar x untuk menemukan maksimum
float [] = max baru float [] {-1};
for (int i = 0; i <x.Length, i + +)
{
if (max [0] <x [i]) max [0] = x [i];
}
/ / Tulis jawaban
lblMax.Text = max [0] ToString ();.

/ / Perhitungan OpenCL
max [0] = -1;

Tugas Kelompok Rekayasa Komputasional OpenCL 9
CLCalc.Program.Variable varx = new CLCalc.Program.Variable (x);
CLCalc.Program.Variable varMax = baru CLCalc.Program.Variable (max);
int [] = new int pekerja [] {} x.Length;
CLCalc.Program.Variable [] args = new CLCalc.Program.Variable [] {varx,
varMax};
kernelCalcMax.Execute (args, pekerja);
/ / Baca OpenCL max
varMax.ReadFromDeviceTo (max);
lblCLMax.Text = max [0] ToString ();.
}
}
Saat program dieksekusi, tidak ada urutan ditentukan dimana algoritma akan
mengeksekusi. Jadi ini mungkin terjadi (catatan: x [0] = 1, x [1] = 2):
1 - Pekerja 0 membaca max [0] dan x [0]. Sejak max [0] adalah -1, jika melewati uji;
2 - Pekerja 1 berbunyi max [0] dan x [1]. max [0] masih -1 jadi tes melewati;
3 - Pekerja 1 menulis max [0] = 2;
4 - 0 Pekerja (yang sampai ke titik penulisan kemudian) menulis max [0] = 1.

Anda mungkin juga menyukai