Kenalan Karo SIMD

Equan P.
Pemrograman
Published in
4 min readSep 17, 2016

“Maju papat-papat diulang ulungake mesti enggal rampunge” — Gugur Gunung

SIMD utowo Single Instruction Multiple Data iku lek digambarke gawe wong awam koyok merintah wong kembar, misale ono arek kembar papat mbok kongkon mlayu, terus papat-papate arek iku maeng mesti mlayu bareng kabeh nanging ora balapan.

Padanane lek ndek ilmu teknis komputer arek kembar papat iku maeng di jenengno tipe data tapi perintah mlayu iku maeng dijenengno instruksi, dadi lek dihubungno ambek definisi SIMD yo iku mung siji instruksi sing dilakoke tapi iso nangani data sing akeh.

Ono sing jenenge operasi scalar yo iku tiap instruksi mesti mek iso ngoperasikno data gentenan padahal instruksine podo misale instruksi tambah-tambahan koyok iki

Operasi 1

1 + 1 = 2

Operasi 2

2 + 2 = 4

operasi 1 lan operasi 2 iku mesti dilakokno gantian dadi butuh rong (loro) instruksi tapi lek operasi tambah-tambahan iku maeng digawe cara sing nggunaake metode SIMD, operasi loro iku maeng iso diringkes dadi siji instruksi.

Gambar ndek nduwur iku sing diarani Data Paralellism, dadi operasi paralel utowo barengan tapi ndek tingkat data. Sampeyan mesti iso mbedakno ambek paralel tapi ndek tingkat instruksi utowo sing biasa diarani Concurrent Computing.

Lha terus opo gunane sing ketok nyoto fitur SIMD iki?

SIMD iki sing nggarai sampeyan iso ngerungokno audio, film utowo main game…lho kok iso? soale ambek SIMD iki data-data koyok audio, film utowo game iso di proses luwih cepet ambek prosesor dadi sampeyan iso enak lek ngrungokno lagu, ndelok ngubah settingan film utowo main game ndek HP, tablet opo maneh ndek laptop.

Perangkat Keras

Sakjane ben prosesor modern iku mesti duwe implementasi SIMD, tergantung ambek vendor sing mroduksi prosesore. Contone lek ndek Intel biasae implementasi SIMD iku di jenengno MMX (SSE), lek ndek ARM dijenengno NEON lan lek ndek PowerPC biasae jenenge VMX.

Lek sampean pengen weruh yak opo carane ngecek prosesor iku duwe fitur SIMD opo ora, ndek Linux iso nggawe perintah ngene iki

$ cat /proc/cpuinfo

Dadi prosesor koyok Pentium saiki iku roto-roto wes duwe fitur SIMD (SSE, SSE2, SSSE3, SSE4).

SIMD Cortex-M4

Lek ndek prosesor sing kastane rodo rendahan timbange prosesor komputer desktop koyok Intel ndek nduwur iku maeng misale prosesor Cortex-M4 sing akeh digawe ndek peralatan mobile HP misale, prosesor jenis iki yo duwe fitur SIMD pisan.

Lek misale sampeyan nggawe board Nucleo STM32F401RE mesti ono HAL (Hardware Abstraction Layer) sing wes disediakno ambek vendor ARM gawe akses fungsi-fungsi SIMD ndek prosesor Cortex-M4 iku maeng.

Tak sarano sampeyan nggawe sing jenenge mbed OS 5 sing wes dintegrasikno ambek HAL CMSIS, deloken link core_cm4_simd.h iki supoyo gampang lek mrogram board iku ambek bahasa C.

#include "mbed.h"uint32_t add_halfwords(uint32_t val1, uint32_t val2);DigitalOut led1(LED1);uint32_t bilangan_1 = 1000000000;
uint32_t bilangan_2 = 3000000000;
// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main()
{
uint32_t res = add_halfwords(bilangan_1, bilangan_2);
uint32_t cmp = 5000000000;
while (res > cmp) {
led1 = !led1;
Thread::wait(500);
}
}
uint32_t add_halfwords(uint32_t val1, uint32_t val2)
{
uint32_t res;
res = __SADD16(val1, val2);
return res;
}

Maringono kompailen conto kode ndek nduwur iku nggawe mbed-cli

mbed-cli mbed os 5

Conto kode iku fungsi aslie mek ngurupke LED tapi ono syarat kondisine yo iku

res > cmp

nah variabel res iku hasile tekok operasi add_halfwords() sing jeroane nggawe fungsi __SADD16 yo iku operasi SIMD gawe tambah-tambahan ndek prosesor Cortex-M4.

SIMD JavaScript

Fitur SIMD iki yo wes mulai muncul ndek ndunyo JavaScript, sampeyan iso nggawe browser sing jenenge Firefox (Nightly) lek pengen nyoba.

SIMD JS ndek Firefox Nightly

Wacanan lengkap API SIMD ndek JavaScript iki iso sampeyan woco ndek MDN.

Sumber

--

--