SIMD

С Википедије, слободне енциклопедије
Флинова подела
  Једноструке инструкције Вишеструке инструкције
Једноструки подаци SISD MISD
Вишеструки подаци SIMD MIMD

SIMD (једнострука инструкција, вишеструки подаци, енгл. single instruction, multiple data), према Флиновој подели рачунарских система је једна врста паралелног рачунара. Односни, представља рачунар који има вишеструке процесоре који врше исту операцију на више података истовремено. На тај начин, такве машине искоришћавају паралелизам података. SIMD је нарочито користан при уобичајеним задацима као што су подешавање контраста дигиталне слике или прилагођавање јачине дигиталног звука. Већина модерних модела процесора укључују SIMD инструкције у циљу побољшања перформанси за мултимедијалну употребу.

Историја[уреди | уреди извор]

Прва употреба SIMD инструкција је на векторским суперрачунарима као што су CDC STAR-100 и Texas Instruments ASC, почетком седамдесетих, који су могли да раде на вектору податка са једном инструкцијом. Векторску обраду је посебно популарисао Cray 1970-их и 1980—их година. На основу чињенице да векторксе машине обрађују по једну реч вектора кроз процесоре са проточном обрадом (поред тога што се базирају на једнострукој инструкцији), док модерне SIMD машине обрађују све елементе вектора истовремено, архитектура векторске обраде се сматра одвојеном од SIMD машина.[1]

Прву еру модерних SIMD машина карактеришу суперрачунари са масовном количином паралелних обрада као што су Thinking Machines CM-1 и CM-2. Ове машине су имале много функционално ограничених процесора који су радили паралелно. На пример, сваки од 64.000 процесора у TM CM-2 машини врши исту инструкцију у исто време дозвољавајући множење 64.000 парова бројева истовремено. Суперрачунарство превазилази SIMD, када јефтин скалар MIMD приступа, базирано на робним процесорима као што су Intel i860 XP,[2] постаје моћнији и интересовање за SIMD слаби.

Тренутна ера SIMD процесора развила се са тржишта десктоп рачунара, пре него са тржишта суперрачунара. Како десктоп процесори постају довољно моћни да подрже игре у реалном времену и видео обраду, потражња за ову врсту рачунарске снаге је расла, а продавци микропроцесора се окрећу SIMD-у како би задовољили потражњу. Sun Microsystems представио је SIMD целобројне инструкције у свом VIS сету инструкција 1995, у UltraSPARC микропроцесору. MIPS их следи са својим сличним MDMX системом.

Први широко распоређен SIMD десктоп рачунар био је са Intel-овим MMX проширењима x86 архитектуре из 1996. Ово је наговестило увођење много моћнијег AltiVec система у Motorola PowerPC и IBM POWER системе. Intel је огдоворио 1999. увођењем потпуно новог SSE система. Од тада дошло је до неколико екстензија SIMD сета инструкција у обе архитектуре.

Сви ови догађаји били су оријентисани ка подршци графике у реалном времену, и због тога обрађују у две, три или четири димензије, обично са дужином вектора од две до шеснаест речи, зависно од типа податка и архитектуре. Када нове SIMD архитектуре треба да буду изведене из старих, новије архитектуре се тада сматрају архитектурама са кратким векторима, јер су ранији SIMD и векторски суперрачунари имали векторе дужине од 64 до 64,000. Модерни суперрачунар је готово увек скуп пуно MIMD машина, од којих свака примењује (кратко-векторске) SIMD инструкције. Модерни десктоп рачунар је често мултипроцесорка MIMD машина где сваки процесор може да изврши кратко-векторске SIMD инструкције.

Предности[уреди | уреди извор]

Апликација која може искористити SIMD је она у којој се иста вредност додаје (или одузима од) великом броју тачака података, тј. честа је операција у многим мултимедијалним апликацијама. Један од примера било би мењање осветљености слике. Сваки пиксел слике садржи три вредности осветљености за црвену (енгл. red, (R)), зелену (енгл. green, (G)) и плаву (енгл. blue, (B)) боју. Да бисмо променили осветљење R, G, и В вредности се читају са меморије, вредност се додаје или одузима од њих и добијене вредности се учитавају назад у меморију.

Са SIMD процесором постоје две ствари које побољшавају овај процес. Прва је да су подаци смештени као блокови и број вредности може бити учитан одједном. Уместо серије наредби "узми овај пиксел", "сада узми следећи пиксел", SIMD процесор имаће једну једину наредбу: "узми n пискела" (где је n број који варира од модела до модела). Из више разлога, ово одузима далеко мање времена него хватање сваког пиксела појединачно, са традиционалним дизајном процесора.

Друга предност је та што SIMD системи укључују само оне инструкције које се могу применити на све податке у једној операцији. Другим речима ако SIMD систем функционише тако што учитава осам тачака података истовремено, операција множења која се примењује на податке, десиће се на свим 8 вредностима у исто време. Иако исто важи за било који модел суперскаларног процесора, ниво паралелизма у SIMD систему је обично знатно већи.

Недостаци[уреди | уреди извор]

  • Не могу се сви алгоритими векторисати тако лако. На пример, задатак са тешком контролом тока података, као што је рашчлањивање кода не може лако добити корист од SIMD-а. Међутим, теоретски је могуће векторисати поређења и "серијски ток података" у циљу максималне оптимизације кеша. Напомена: системи са серијском проточном обрадом (пример: графички процесори или софтверски растеризационе проточне обраде) су најповољнији за контролу кеша уколико се имплементирају заједно са SIMD-ом, али не служе искључиво за SIMD функције. Даља сложеност је очигледна да би се избегла зависност у серијама као што су код ниски кодова; док је за векторизацију потребна независност.
  • Такође има велике фајлове регистара што повећава потрошњу енергије и површине чипова.
  • Тренутно, имплементација алгоритма са SIMD инструкцијама обично захтева људску помоћ; већина компајлера не генерише SIMD инструкције типичног С програма, на пример. Векторизација у компајлерима је активна област информатичког истраживања.
  • Програмирање са одређеним SIMD инструкцијским скуповима може укључивати и разне ситније изазове.
    • SIMD може имати ограничења при усклађивању података; програмерима упознатим са једном одређеном архитектуром ово може бити неочекивано.
    • Прикупљање података у SIMD регистре и распоређивање истих на тачно одређене локације може бити незгодно и често неефикасно.
    • Посебна упутства попут ротације или сабирање три операнада нису доступна у неким SIMD инструкцијским скуповима.
    • Инструкцијски скупови су различити за сваку архитектуру: неки процесори немају SIMD инструкције у потпуности, тако да програмери морају да обезбеде не-векторизоване имплементације (или другачије векторизоване имплементације) за њих.
    • Рани MMX скуп инструкција делио је регистар фајлова са стеком за операције и вредности са покретним зарезом, што је давало лоше резултате приликом мешања стека за операције и вредности са покретним зарезом са MMX кодом. Међутим, SSE2 исправља ту грешку.

Хронологија[уреди | уреди извор]

Примери SIMD-ових суперачунара (не укључујући векторске процесоре):

Хардвер[уреди | уреди извор]

SIMD мањег обима (64 или 128 бита) је постао популаран код процесора општих наменама у раним '90-им и наставио кроз 1997. касније са Motion Video инструкцијама за Alpha. SIMD инструкције могу се наћи на већини процесора укључујући и IBM-ов AltiVec и SPE за PowerPC, HP-ов PA-RISC MAX (енгл. Multimedia Acceleration eXtensions), Intel-ови MMX и iwMMXt SSE SSE2 SSE3 SSSE3 и SSE4.x, AMD-ов 3DNow!, ARC-ов ARC Video подсистем, SPARC-ов VIS и VIS2, Sun-ов MAJC, ARM-ов NEON, MIPS-ов MDMX (MaDMaX) и MIPS-3D. IBM, Sony и Toshibа су сарађивали у производњи и произвели SPU-ов скуп инструкција Cell процесора који је у потпуности базиран на SIMD-у. NXP који је оформио Philips развио је неколико SIMD процесора под називом Xetal. Xetal има 320 16-битне елементе процесора посебно дизајниране за визуелне задатке.

Модерне графички процесори су често опширне SIMD имплементације, способне да извршавају операције гранања, оптерећења и да складиште 128 или 256 битова у исто време.

Intel-ове AVX SIMD инструкције сада обрађују 265 битова истовремено. Intel-ов Larrabee прототип микроархитектуре укључује више од два 512-битна SIMD регистара у оба своја језгра (VPU, енгл. Wide Vector Processing Units), и ова способност 512-битног SIMD-а се наставља у Intel-овом MIC-у.

Софтвер[уреди | уреди извор]

Обично утростручавање четири 8-битна броја. Процесор учитава један 8-битни број у R1, множи га са R2 и онда сачувава решење из R3 у RAM. Овај процес се понавља за сваки број.
SIMD утростручавање четири 8-битна броја. Процесор чита 4 броја истовремено, множи их све у SIMD-многжачу и онда их све сачувава истовремено у RAM. У терорији, убрзање процера је око 75%.

SIMD инструкције су у широкој употреби обраде 3D графике, иако су модерне графичке картице са уграђеним SIMD системом преузеле овај посао од процесора. Неки системи такође укључују пермутацију функција које поновно пакују елементе у векторима, чинећи их тиме посебно корисним за обраду података и компресију. Такође се користе у криптографији.[3][4][5] Тренд обраде опште намене на графичким процесорима може довести до широке употребе SIMD-а у будућности.

Лични рачунари су у почетку споро усвајали SIMD системе, због већег броја проблема. Један од проблема је био тај што су многи ранији SIMD скупови инструкција тежили спорој укупној пеформанси система због поновне употребе постојећих регистра за рад са операцијама са покретним зарезом. Други системи, као што је MMX и 3DNow! су нудили подршку за типове података који нису занимали публику и имали су скуп контекст инструкција прекидања ради баратања са регистрима за рад са покретним зарезом и са процесорским регистрима. Компајлерима је често недостајала подршка, што је од програмера захтевало да куцају програме у асемблерском језику.

SIMD на x86 архитектури је имао спор почетак. Када је AMD увео 3DNow! и када је Intel увео SSE дошло је до конфузије, али данас су се системи прихватили (пошто је AMD усвојио SSE) и новији компајлери резултују софтверу који је прилагођенији за SIMD. Сада и Intel и AMD обезбеђују оптимизоване математичке библиотеке које користе SIMD инструкције, а и почеле су да се појављују и open source алтернативе као што су libSIMD, SIMDx86 и SLEEF.

Apple рачунари су имали више успеха, иако су се укључили у SIMD тржиште после осталих. AltiVec је нудио богат систем и може бити програмиран коришћењем повећаног броја софистицираних компајлера од Motorola-е, IBM-а и GNU-а, због чега је програмирање у асемблерском језику ретко потребно. Додатно томе, већина система који би имали кориси од SIMD-а су били снабдевани Apple компанијом (на пример: iTunes и QuickTime). Међутим, Apple рачунари су почевши од 2006. почели да користе Intel x86 процесоре. Apple-ови API интерфејси и XCode развојни алати су поновно написани да би користили SSE2 и SSE3 уместо AltiVec-а. Apple је био доминантан купац PowerPC чипова од IBM-а и Freescale Semiconductor компаније и иако су напустили платформу, даљи развој AltiVec-а је настављен у неколико дизајна Power архитектура за Freescale и IBM.

SIMD унутар регистра, или SWAR, представља широк скуп техника и трикова који се користи да би SIMD радио на регистрима опште намене на хардверу који не обезбеђује директну подршку за SIMD инструкције. Ово се може користити да би се експлоатисао паралелизам у одређеним алгоритмима чак и на хардверу који не подржава SIMD директно.

SIMD на Вебу[уреди | уреди извор]

Џон Меккутчан (John McCutchan) је 2013. најавио [6] да је направио интерфејс за SIMD скупове инструкција за Dart програмски језик, примењујући погодности SIMD-а код веб (енгл. web) програма по први пут. Интерфејс се садржи од два типа:

  • Float32x4, 4 вредности у покретном зарезу једноструке прецизности.
  • Int32x4, 4 32-битне целобројне вредности.

Инстанце ових типова су непроменљиве и у оптимизованом коду мапиране директно на SIMD регистре. Операција исказане у Dart-у су типично компајлиране у једну инструкцију без губитака. Ово је слично С и C++ изразима. Бенчмаркови за 4x4 множење матрица, 3D vertex трансформације, и Mandelbrotov skup визуелизација показује скоро 400% убрзања у поређењу са скаларним кодом писаним у Dart-у.

Џонов рад на Dart-у је присвојен од стране ECMAScript и Intel је најавио на IDF 2013 да ће имплементирати Johnову спецификацију и у V8 и у SpiderMonkey.

Комерцијална примена[уреди | уреди извор]

Иако је се првобитно доказало да је тешко пронаћи трајну комерцијалну примену за SIMD-ексклузивне процесоре, успеха је имао само GAPP, који је првобитно развијен од стране Lockheed Martin и примењен у комерцијалном сектору од стране њиховог спинофа Teranexа. GAPP-ове скорашње инкарнације су постале моћан алат у видео обради у реалном времену као што су конверзије између различитих видео стандарда и учесталости слика у секунди (NTSC ка/од PAL, NTSC ка/од HDTV формата, итд.), деинтерленсинг, редукција шума, прилагодљива видео компресија, и побољшање слике.

Чешћа примена SIMD-а је код видео игара: скоро свака модерна играчка конзола од 1998. поседује SIMD процесор негде у својој архитектури. Плејстејшн 2 је нестандардан по томе што једна од његових векторских јединица може да функционише као аутономни процесор за обраду дигиталног сигнала извршавајући сопствени ток инструкција, или као помоћни процесор контролисан обичним процесорским инструкцијама. Апликације са 3D графиком често користе SIMD обраду јер се доста ослањају на операције са 4-димензионалним векторима. Мајкрософтов Direct3D 9.0 током извршења бира процесорски специфичне имплементације својих сопствених математичких операција, укључујући коришћење SIMD-способних инструкција.

Један од новијих процесора који користи векторску обраду је Cell процесор развијен од стране IBM-а у сарадњи са Toshiba-ом и Сонијем. Он користи одређен број SIMD процесора (NUMA архитектура, свака са независним локалним складиштем и контролисана од општенаменског процесора) и намењена је огромним скуповима података које захтевају апликације за 3D и видео обраду.

Скорашњи напредак од стране Ziilabs је производња SIMD процесора који може бити коришћен на преносним уређајима, као што су медија плејери и мобилни телефони.[7]

Високоразмерни комерцијални SIMD процесори су доступни од стране ClearSpeed Technology, Ltd. и Stream Processors, Inc. ClearSpeed-ов CSX600 (2004) има 96 језгара од којих свако има 2 јединице за покретни зарез дупле прецизности док CSX700 (2008) има 192. Stream Processors је вођен од стране рачунарског архитекте Bill Dally. Њихов Storm-1 процесор (2007) садржи 80 SIMD језгара контролисаних од стране MIPS процесора.

Види још[уреди | уреди извор]

Референце[уреди | уреди извор]

  1. ^ David A. Patterson and John L. Hennessey, Computer Organization and Design: the Hardware/Software Interface, 2nd Edition, Morgan Kaufmann Publishers, Inc., San Francisco, California, (1998). стр. 751.
  2. ^ http://www.cs.kent.edu/~walker/classes/pdc.f01/lectures/MIMD-1.pdf
  3. ^ RE: SSE2 speed, showing how SSE2 is used to implement SHA hash alorithms
  4. ^ Salsa20 speed; Salsa20 software, showing a stream cipher implemented using SSE2
  5. ^ Subject: up to 1.4x RSA throughput using SSE2 Архивирано на сајту Wayback Machine (2. април 2011), showing RSA implemented using a non-SIMD SSE2 integer multiply instruction.
  6. ^ „Presentations, Videos, and Slides | Dart[[Категорија:Ботовски наслови]]” (PDF). Архивирано из оригинала (PDF) 09. 03. 2016. г. Приступљено 09. 01. 2014.  Сукоб URL—викивеза (помоћ)
  7. ^ ZiiLabs Corporate Website https://secure.ziilabs.com/products/processors/zms05.aspx Архивирано на сајту Wayback Machine (18. јул 2011)

Спољашње везе[уреди | уреди извор]