sudah lama ingin menulis artikel ini , semenjak memulai menyusun tesis ku pada tahun 2012 kemaren, hingga selesai pada tahun 2013[disini], mungkin baru ini bisa share.
saya sendiri mengenal teknologi ini telah lama mungkin semenjak nvidia mulai mengenalkanya pada awal tahun 2006 yang pertama kali di terapkan pada platform video card nya pada chipset 8800gt. namun saat intu hanya sebatas tau saja, tentang keuntungan teknik ini.
dalam hal ini pasti banyak artikel lain yang telah "mereview" atau memperkenalkannya. artikel ini berisi cuplikan dari tesis saya waktu itu, kalo ada yang beminat untuk mengembangkannya bisa share aja disini,
CUDA ™ adalah platform komputasi paralel dan model pemrograman yang memungkinkan peningkatan dramatis dalam kinerja
komputasi dengan memanfaatkan kekuatan dari graphics
processing unit (GPU) (Nvidia, 2012). Sejak diperkenalkan pada 2006, CUDA telah banyak disebarkan melalui ribuan aplikasi dan diterbitkan pada makalah penelitian, dan didukung oleh dasar terinstal lebih dari 300 juta CUDA-enabled GPU di notebook, workstation,
menghitung cluster
dan super-computer. (Nvidia, 2012).
Cuda juga di lengkapi dengan lingkungan
perangkat lunak yang memungkinkan pengembang menggunakan bahasa C sebagai
bahasa pemrogramannya (nvidia, 2012).
Pada Gambar 2.6 diilustrasikan bahasa
pemrograman lain yang bisa di gunakan dalam CUDA dan implementasi pemrograman
interface.
![]() |
gambar 2.6 |
Model pemrograman CUDA
adalah membagi pekerjaan yang akan di lakukan ke banyak unit pemroses paling
kecil, yakni thread. Setiap thread memiliki memori tersendiri dan
mengerjakan inti pekerjaan yang kecil dan akan berjalan bersamaan dengan thread lain sehingga waktu yang di
butuhkan untuk mengerjakan pekerjaan seluruhnya menjadi lebih singkat. Kumpulan
dari thread tersebut disebut sebagai
blok dalam blok memiliki satu memori tersendiri yang bisa di gunakan thread dalam blok tersebut. Media untuk
saling berkomunikasi antar thread
dinamakan dengan Share memori. Setiap blok akan di kelompokkan lagi menjadi
sebuah grid yang menjadi sekumpulan block
yang digunakan dalam komputasi. Ilustrasi seperti terlihat pada Gambar 2.7.
![]() |
gambar 2.7 |
CPU dalam CUDA disebut
dengan istilah Host, dan GPU disebut dengan istilah Device. Ada 2 bagian pada
pemrograman CUDA yaitu fungsi yang di jalankan pada CPU dan fungsi yang di
jalankan pada GPU, karnel adalah sebutan untuk program CUDA yang berjalan pada
GPU. Pada saat fungsi ini berjalan, pemogram harus memberikan informasi pada
GPU untuk memesan berapa banyak block,
thread yang akan digunakan dalam
masing-masing block.
Perangkat CUDA menggunakan
spasi memori yang memiliki karakteristik yang berbeda yang menunjukkan yang
berbeda dalam aplikasi Cuda. Ruang ruang memory pada CUDA seperti terlihat pada
Gambar 2.8
![]() |
gambar 2.8 |
Jumlah memori yang tersedia di setiap ruang memori pada setiap tingkat kemampuan menghitung Global, Constant dan memory texture memiliki latency yang terbesar, di ikuti oleh memori konstan, register dan shared memori, ciri tiap memori bisa terlihat pada
Memory
|
Location on/off chip
|
Cached
|
Access
|
Scope
|
Lifetime
|
Register
|
On
|
-
|
R/W
|
1 thread
|
Thread
|
Local
|
Off
|
+
|
R/W
|
1 Thread
|
Thread
|
Shared
|
On
|
n/a
|
R/W
|
All thread
in block
|
Block
|
Global
|
Off
|
+
|
R/W
|
All
thread + host
|
Host
location
|
Constant
|
Off
|
Yes
|
R
|
All thread
+ host
|
Host location
|
Texture
|
Off
|
Yes
|
R
|
All
thread + host
|
Host
location
|
Bahasa pemrograman yang digunakan oleh CUDA
adalah bahasa C/C++ yang diberi ekstensi fungsi-fungsi dan sintaks yang
digunakan khusus untuk CUDA untuk menajemen perangkat CUDA. Sintaks khusus pada
pemrograman CUDA memiliki fungsi fungsi yang berbeda dan tujuan yang berbeda
tiap sintaksnya. Seperti terlihat pada Tabel 2.2
di bawah.
Sintaks
|
Write in program
|
Fungsi
|
Keterangan
|
cudaGetDeviceCount().
|
cudaGetDeviceCount().
|
Device management
|
|
cudaGetDeviceProperties().
|
cudaGetDeviceProperties().
|
Device management
|
|
cudaMalloc()
|
cudaMalloc()
|
Device
memory
management
|
|
cudaFree ()
|
cudaFree ()
|
||
cudaMemcpy ()
|
cudaMemcpy ()
|
||
cudaBindTexture ()
|
cudaBindTexture ()
|
Texture
management
|
|
cudaBindTextureToArray
()
|
cudaBindTextureToArray ()
|
||
cudaGLMapBufferObject ()
|
cudaGLMapBufferObject
()
|
Graphics
interoperability
|
|
cudaD3D9MapVertexBuffer()
|
cudaD3D9MapVertexBuffer()
|
||
__global__
|
Void MyKernel(){}
|
Function
qualifiers
|
Cal from host,
execute on GPU
|
__device__
|
Float MyDeviceFunc() {}
|
Function
qualifiers
|
Cal from GPU, execute on
GPU
|
__host__
|
Int HostFunc() {}
|
Function
qualifiers
|
Cal from host,
execute on host
|
__device__
|
Float MyGPUArray[32];
|
Variable
qualifiers
|
In GPU memory space
|
__constant__
|
Float MyConstArray[32];
|
Variable
qualifiers
|
Write by host; read
by GPU
|
__shared__
|
Float MySharedArray[32];
|
Variable
qualifiers
|
Shared within thread block
|
Int1, int2…
Float1, float2…
Double, double2..etc
|
Built-in
vector types
|
||
<<< >>>
|
<<< Grid, Block
>>>
|
Excution configuration
|
Launch kernel
|
gridDdim
|
Dim3 gridDdim;
|
Variable and
function valid in device code
|
Grid dimension
|
blockDim
|
Dim3 blockDim
|
Variable and function
valid in device code
|
Block dimension
|
blockIdx
|
Dim3 blockIdx
|
Variable and
function valid in device code
|
Block index
|
ThreadIdx
|
Dim3 ThreadIdx
|
Variable and function
valid in device code
|
Thread index
|
__sycthreads()
|
Void __sycthreads()
|
Variable and
function valid in device code
|
Thread synchronization
|
CUDA ™ adalah platform komputasi paralel dan model pemrograman yang memungkinkan peningkatan dramatis dalam kinerja
komputasi dengan memanfaatkan kekuatan dari graphics processing unit (GPU) (Nvidia, 2012). Sejak diperkenalkan pada 2006, CUDA telah banyak disebarkan melalui ribuan aplikasi dan diterbitkan pada makalah
penelitian, dan didukung oleh dasar terinstal lebih dari 300 juta CUDA-enabled GPU di notebook, workstation,
menghitung cluster dan super-computer. (Nvidia, 2012).
Cuda juga di lengkapi dengan lingkungan perangkat lunak yang memungkinkan
pengembang menggunakan bahasa C sebagai bahasa pemrogramannya (nvidia, 2012). Pada Gambar 2.6 diilustrasikan bahasa
pemrograman lain yang bisa di gunakan dalam CUDA dan
implementasi pemrograman interface.
GPU Computing Application
|
|||||||||||||||||
|
Libraries and Middleware
|
||||||||||||||||
cuFFT
cuBLAS
cuRAND
cuSPASE
|
LAPACK
CULA
MAGMA
|
Thrust
NPP
cuDPP
|
VSIPL
SVM
OpencCurrent
|
PhysX
OptiX
|
Iray
RealityServer
|
MATALAB
Mathematica
|
|||||||||||
C
|
C++
|
Fotran
|
Java
Python
Wrappers
|
Direct Compute
|
OpenCLtm
|
Directives
(e.g.
OpenACC)
|
|||||||||||
NVIDIA GPU
Whit the CUDA Parallel
Computing Architecture
|
|||||||||||||||||
Fermi Architecture
|
Geforce
400 series
|
Quadro
Fermi Series
|
Tesla 20 Series
|
||||||||||||||
Tesla Architecture
|
Geforce
200 series
Geforce 9
series
Geforce 8
series
|
Quadro FX
series
Quadro Plex series
Quadro NVX Series
|
Tesla 10 series
|
||||||||||||||
|
<![if !vml]>
![]() |
<![if !vml]>
![]() |
<![if !vml]>
![]() |
||||||||||||||
Model pemrograman CUDA adalah membagi pekerjaan yang akan di lakukan ke
banyak unit pemroses paling kecil, yakni thread. Setiap thread
memiliki memori tersendiri dan mengerjakan inti pekerjaan yang kecil dan akan
berjalan bersamaan dengan thread lain sehingga waktu yang di butuhkan untuk
mengerjakan pekerjaan seluruhnya menjadi lebih singkat. Kumpulan dari thread tersebut
disebut sebagai blok dalam blok memiliki satu memori tersendiri yang bisa di
gunakan thread
dalam blok tersebut. Media untuk saling berkomunikasi antar thread dinamakan dengan Share memori. Setiap blok akan di kelompokkan lagi menjadi
sebuah grid yang menjadi sekumpulan block yang
digunakan dalam komputasi. Ilustrasi seperti terlihat pada Gambar 2.7.
<![if !vml]>
<![endif]>

CPU dalam CUDA disebut dengan istilah Host, dan GPU disebut dengan
istilah Device. Ada 2 bagian pada pemrograman CUDA yaitu fungsi yang di jalankan pada CPU
dan fungsi yang di jalankan pada GPU, karnel adalah sebutan untuk program CUDA
yang berjalan pada GPU. Pada saat fungsi ini
berjalan, pemogram harus memberikan informasi pada GPU untuk memesan berapa banyak block, thread yang akan digunakan dalam
masing-masing block.
Perangkat CUDA menggunakan spasi memori yang memiliki karakteristik
yang berbeda yang menunjukkan yang berbeda dalam aplikasi Cuda.
Ruang ruang memory pada CUDA
seperti terlihat pada Gambar 2.8
<![if !vml]>
<![endif]>

Jumlah memori yang
tersedia di setiap ruang memori pada setiap tingkat kemampuan menghitung
Global, Constant dan memory
texture memiliki latency
yang terbesar, di ikuti oleh memori konstan, register dan shared
memori, ciri tiap memori bisa terlihat pada
Memory
|
Location on/off chip
|
Cached
|
Access
|
Scope
|
Lifetime
|
Register
|
On
|
-
|
R/W
|
1 thread
|
Thread
|
Local
|
Off
|
+
|
R/W
|
1 Thread
|
Thread
|
Shared
|
On
|
n/a
|
R/W
|
All
thread in block
|
Block
|
Global
|
Off
|
+
|
R/W
|
All thread + host
|
Host location
|
Constant
|
Off
|
Yes
|
R
|
All
thread + host
|
Host location
|
Texture
|
Off
|
Yes
|
R
|
All thread + host
|
Host location
|
Bahasa pemrograman yang digunakan oleh CUDA adalah bahasa C/C++ yang diberi ekstensi fungsi-fungsi
dan sintaks yang digunakan khusus untuk CUDA untuk menajemen perangkat CUDA. Sintaks khusus pada
pemrograman CUDA memiliki fungsi fungsi yang berbeda
dan tujuan yang berbeda tiap sintaksnya. Seperti
terlihat pada Tabel 2.2
di bawah.
Sintaks
|
Write
in program
|
Fungsi
|
Keterangan
|
cudaGetDeviceCount().
|
cudaGetDeviceCount().
|
Device management
|
|
cudaGetDeviceProperties().
|
cudaGetDeviceProperties().
|
Device management
|
|
cudaMalloc()
|
cudaMalloc()
|
Device
memory
management
|
|
cudaFree ()
|
cudaFree ()
|
|
|
cudaMemcpy ()
|
cudaMemcpy ()
|
|
|
cudaBindTexture ()
|
cudaBindTexture ()
|
Texture
management
|
|
cudaBindTextureToArray ()
|
cudaBindTextureToArray ()
|
|
|
cudaGLMapBufferObject ()
|
cudaGLMapBufferObject ()
|
Graphics
interoperability
|
|
cudaD3D9MapVertexBuffer()
|
cudaD3D9MapVertexBuffer()
|
|
|
__global__
|
Void MyKernel(){}
|
Function
qualifiers
|
Cal from host, execute
on GPU
|
__device__
|
Float MyDeviceFunc() {}
|
Function
qualifiers
|
Cal from GPU, execute
on GPU
|
__host__
|
Int HostFunc() {}
|
Function
qualifiers
|
Cal from host, execute
on host
|
__device__
|
Float MyGPUArray[32];
|
Variable
qualifiers
|
In GPU memory space
|
__constant__
|
Float MyConstArray[32];
|
Variable
qualifiers
|
Write by host; read
by GPU
|
__shared__
|
Float MySharedArray[32];
|
Variable
qualifiers
|
Shared within thread block
|
Int1,
int2…
Float1,
float2…
Double,
double2..etc
|
|
Built-in
vector types
|
|
<<< >>>
|
<<< Grid, Block >>>
|
Excution configuration
|
Launch kernel
|
gridDdim
|
Dim3 gridDdim;
|
Variable and function valid in device code
|
Grid dimension
|
blockDim
|
Dim3 blockDim
|
Variable and function valid in device code
|
Block dimension
|
blockIdx
|
Dim3 blockIdx
|
Variable and function valid in device code
|
Block index
|
ThreadIdx
|
Dim3 ThreadIdx
|
Variable and function valid in device code
|
Thread index
|
__sycthreads()
|
Void __sycthreads()
|
Variable and function valid in device code
|
Thread synchronization
|
Comments
Post a Comment
terima kasih