Компьютерийн технологи хөгжих тусам бидний өмнө тулгарч буй асуудлууд улам төвөгтэй, өгөгдлийн хэмжээ асар их болж байна. Цаг үеийн шинжлэх ухаан, бизнес, инженерчлэлийн салбарт өндөр гүйцэтгэлтэй тооцоолол (High-Performance Computing, HPC) чухал хэрэгсэл болж хувирсан.
HPC Яагаад Чухал Бэ?

2000-аад оны эхээр компьютерийн хөгжлийн томоохон эргэлт гарсан. Түүнээс өмнө процессорын давтамж, гүйцэтгэл жил бүр тогтмол өсөж байсан бол 2000 оноос хойш энэ өсөлт удааширч, нэг процессорын хурд хязгаарлагдсан. Харин эсрэгээрээ процессорын цөмүүдийн тоо эрс нэмэгдэж эхэлсэн.
Тоон жишээ авч үзвэл: 16 цөмтэй, цөм бүр 2 hyperthreads-тэй, 256 bit-ийн вектор нэгжтэй процессор нь 128 дахин зэрэгцээ боловсруулалт хийх чадвартай. Гэвч хэрэв зөвхөн нэг цөм дээр ердийн программ ашиглавал CPU-ийн нийт хүчин чадлын зөвхөн 0.8%-ийг л ашиглана. Параллель програмчлал ашигласнаар 99.2%-ийн хүчийг ашиглах боломжтой болдог.

Weak scaling нь нэг процессорт ногдох ажлын хэмжээ тогтмол байхад процессоруудын тоо нэмэгдэхэд гүйцэтгэлийг нэмэгдүүлдэг. Strong scaling нь нийт даалгаврын хурдыг сайжруулахад анхаардаг (даалгаврын хэмжээ тогтмол)
Flynn-ийн Таксономи: Архитектурын Төрлүүд
Параллель тооцооллын архитектурыг ангилахдаа Flynn-ийн таксономи хамгийн өргөн хэрэглэгддэг. Энэ нь дөрвөн үндсэн төрөлтэй:

SISD (Single Instruction, Single Data)
Хамгийн энгийн загвар бөгөөд нэг процессор нэг зааврыг нэг өгөгдөл дээр гүйцэтгэдэг. Зэрэгцээ байдалгүй, дараалсан ажиллагаатай.
SIMD (Single Instruction, Multiple Data)
Нэг командыг олон өгөгдөл дээр нэгэн зэрэг гүйцэтгэдэг. Энэ нь өгөгдлийн параллелизмд суурилдаг бөгөөд векторжуулалтад маш тохиромжтой.
MISD (Multiple Instruction, Single Data)
Олон процессор өөр өөр заавруудыг нэг өгөгдлийн элемент дээр зэрэг ашиглана. Практикт ховор тохиолддог архитектур юм.
MIMD (Multiple Instruction, Multiple Data)
Олон процессор өөр өөр заавруудыг өөр өөр өгөгдлийн багц дээр зэрэг гүйцэтгэдэг. Энэ нь хамгийн өргөн хэрэглэгддэг архитектур бөгөөд өндөр гүйцэтгэлтэй системд чухал үүрэг гүйцэтгэдэг.
Санах Ойн Архитектур
HPC системд санах ойн зохион байгуулалт маш чухал.
Shared Memory (Дундын Санах Ой)

Олон процессорууд эсвэл threads нэгэн санах ойд хандаж, өгөгдлийг хуваалцдаг. Хоёр төрөл байна:
- UMA: Бүх процессорууд санах ойд ижил хурдтай хандана
- NUMA: Процессор бүр өөрийн локал санах ойтой, бусад санах ойд хандахад хугацаа харилцан адилгүй
Синхрончлолын шаардлага үүсдэг учраас mutex, lock зэрэг механизмыг ашигладаг. OpenMP нь дундын санах ойтой системд програмчлахад өргөн хэрэглэгддэг.
Distributed Memory (Хуваарилагдсан Санах Ой)

Процессор бүр өөрийн санах ойтой бөгөөд бусдын санах ойд шууд хандаж чаддаггүй. Өгөгдөл солилцохын тулд мессеж дамжуулах механизм ашигладаг. Мессеж дамжуулалт амжилттай болохын тулд илгээгч ба хүлээн авагч талуудын синхрончлол зайлшгүй шаардлагатай. MPI (Message Passing Interface) нь энэ төрлийн системд хамгийн түгээмэл ашиглагддаг протокол юм.
Боловсролыг инженерчлэв.
