SIMD у регистру или SWAR (енгл. SIMD within a register) је техника за обављање паралелних операција над подацима који се налазе у процесорским регистрима. SIMD је скраћеница за "једноструке инструкције, вишеструки подаци" (енгл. single instruction, multiple data).

Већина модерних процесора за рачунаре опште сврхе имају неке одредбе за SIMD, у форми групе регистара и инструкција који ће их искористити. SWAR се односи на коришћење тих регистара и инструкција, супротно од коришћења специјализованих енџина за обраду, који су дизајнирани да би били бољи приликом обраде SIMD операција. Такође се односи на употребу SIMD са регистрима опште намене и инструкција које нису намењене да се извршавају истовремено, путем раличитих новијих софтверских трикова.[1]

SWAR архитектуре

уреди

SWAR архитектура је она која експлицитно укључује инструкције које су намењене за обраду паралелних операција над подацима који су складиштени у независним пољима регистара. SWAR-способна архитектура је она која садржи скуп инструкција који је довољан да дозволи подацима (који су складиштени у овим пољима) да буду третирани независно чак иако архитектура не обухвата инструкције које су експлицитно намењене тој сврси. Рани пример SWAR архитектуре је био Intel Pentium са MMX, који је имплементирао MMX скуп екстензија. Intel Pentium, са друге стране, није обухватио такве инструкције али је могао да се понаша као SWAR архитектура преко па+љиво ручно-кодираних или компајлерских техника.

Ране SWAR архитектуре су обухватале Digital Equipment Corporation-ов Alpha процесор, Hewlett-Packard-ов PA-RISC, Silicon Graphics Incorporated-ов MIPS, и Sun-ов SPARC V9.[2]

Историја SWAR програмског модела

уреди

Увођењем Intel-овог MMX вишемедијског интрукцијског скупа екстензија 1996., десктоп процесори са SIMD паралелном обрадом су постали чешћи. Раније, ове инструкције су могле да се користе само преко ручно писаног асемблерског кода.

У јесен 1996., професор Хенк Диц (Hank Dietz) је био инструктор на курсу Конструкције копајлера за редовне студенде на "Purdue универзитетској школи за електрични и рачунарски инжењеринг". На овом курсу, он је задао серију пројеката у којима су студенти правили једноставне компајлере који су ишли у правцу MMX. Код којим су писали је био подскуп дијалекта MasPar-овог MPL-а, званог NEMPL (енгл. Not Exactly MPL).

За време курса тог семестра, асистенту Рендалу "Рендију" Фишеру (Randall "Randy" Fisher) је постало јасно да постоји број проблема са MMX-ом због којих би било тешко направити бек-енд (енгл. back-end) NEMPL компајлера. На пример, MMX има инструкцију за множење 16-битних података али нема за множење 8-битних података. NEMPL језик није рачунао на овај проблем, што је дозвољавало програмеру да пише програме који захтевају 8-битна множења.

Intel-ова x86 архитектура није била једина архитектура која је обухватила паралелне инструкције попут SIMD. Sun-ов VIS, SGI-ов MDMX и други скупови бишемедијских скупова су додати другим постојећим скуповима инструкција неких произвођача да би подржали такозване апликације "нових медија" (енгл. new media). Ове екстенѕије су имале значајне разлике у прецизности података и типова инструкција које су подржавали.

Диц и Фишер су почели да развијају идеју о добро дефинисаном паралелном моделу програмирања који би дозволио пограмирању да означи модел без знања о спецификацијама циљане архитектуре. Овај модел би постао основа за Фишерову дисертацију. Акроним "SWAR" су осмислили Диц и Фишер једног дана у Хенковој канцеларији у MSEE згради на Purdue универзитету.[3] Односи се на ову форму паралелне обраде, на архитектуре које су дизајниране да изворно брше овакве типове обраде, и на програмски модел опште намене који је Фишерова дисертација.

Проблем компајлирања за ове широко варирајуће архитектуре је био предмет дискусије на папиру који је презентован на LCPC98[2]

Неке апликације које користе SWAR

уреди

SWAR обрада се користила за обраду слика[4], код криптографских парова[5], код растер обраде[6], и комуникације[7].

Види још

уреди

Референце

уреди
  1. ^ Fisher, Randall J (2003). General-Purpose SIMD Within A Register: Parallel Processing on Consumer Microprocessors (PDF) (Теза). Purdue University. 
  2. ^ а б Fisher, Randall J.; Henry G. Dietz (1998). S. Chatterjee, J. F.; Prins L.; Carter, J.; Ferrante, Z.; Li, D.; Sehr, P.-C.Yew, ур. „Compiling for SIMD Within A Register”. Proceedings of the 11th International Workshop on Languages and Compilers for Parallel Computing. Chapel Hill, North Carolina: Springer-Verlag. 
  3. ^ Dietz, Hank. „The Aggregate Magic Algorithms”. SIMD Within A Register (SWAR) Operations. 
  4. ^ Padua, Flavio L. C.; Guilherme A. S. Pereira; Jose P. de Queiroz Neto; Mario F. M. Campos; Antonio O. Fernandes (2001). „Improving processing time of large images by instruction level parallelism” (PDF). Архивирано из оригинала (PDF) 23. 09. 2015. г. Приступљено 23. 12. 2013. 
  5. ^ Grabher, Philipp; Johann Großschädl; Dan Page (2009). „On Software Parallel Implementation of Cryptographic Pairings”. Selected Areas in Cryptography: 35—50. doi:10.1007/978-3-642-04159-4_3. 
  6. ^ Persada, Onil Nazra; Thierry Goubier (12. 9. 2004). „Accelerating Raster Processing with Fine and Coarse Grain Parallelism in GRASS”. Proceedings of the FOSS/GRASS Users Conference 2004. 
  7. ^ Spracklen, Lawrence A. (2001). SWAR Systems and Communications Applications (PDF) (Теза). University of Aberdeen.