Кіріспе
GPU-ны есептеулер үшін пайдалану, әдетте CPU-ға жүктеледі. Графикалық процессорлардағы (GPGPU, немесе сирек GPGP) жалпы мақсаттағы есептеулер – графикалық процессорды (GPU) қолдану, ол әдетте компьютерлік графика үшін ғана есептеулерді орындайды, ал дәстүрлі түрде орталық процессор (CPU) жүзеге асыратын қолданбаларда есептеулерді атқару. Бір компьютерде бірнеше бейнекартаны немесе көптеген графикалық чиптерді пайдалану, графикалық өңдеудің өзіндік параллельдік қасиетін одан да күшейтеді. Құнынан, GPGPU конвейері – бір немесе бірнеше GPU және CPU арасындағы деректерді сурет немесе басқа графикалық нысан ретінде талдауға арналған параллель өңдеу түрі. GPU төмен жиілікте жұмыс істесе де, олардың процессорлық ядролары әдетте бірнеше есе көп. Сондықтан, GPU-лар дәстүрлі CPU-ға қарағанда секундына әлдеқайда көп суреттер мен графикалық деректерді өңдей алады. Деректерді графикалық форматқа ауыстырып, содан кейін GPU арқылы оны сканерлеп талдау үлкен жылдамдыққа қол жеткізуге мүмкіндік береді. GPGPU конвейерлері 21-ші ғасырдың басында графикалық өңдеу үшін (мысалы, жақсы шейдерлерді жасау үшін) құрастырылды. Бұл конвейерлер ғылыми есептеулерге де жақсы сай келетіні анықталды және содан бері осы бағытта дамытылуда.
General purpose computing on graphics processing units (GPGPU, or less often GPGP) is the use of a graphics processing unit (GPU), which typically handles computation only for computer graphics, to perform computation in applications traditionally handled by the central processing unit (CPU). The use of multiple video cards in one computer, or large numbers of graphics chips, further parallelizes the already parallel nature of graphics processing. Essentially, a GPGPU pipeline is a kind of parallel processing between one or more GPUs and CPUs that analyzes data as if it were in image or other graphic form. While GPUs operate at lower frequencies, they typically have many times the number of cores. Thus, GPUs can process far more pictures and graphical data per second than a traditional CPU. Migrating data into graphical form and then using the GPU to scan and analyze it can create a large speedup. GPGPU pipelines were developed at the beginning of the 21st century for graphics processing (e. g. for better shaders). These pipelines were found to fit scientific computing needs well, and have since been developed in this direction.
Тарих
Принцип бойынша, кез келген ерікті логикалық функция, оның ішінде қосу, көбейту және басқа математикалық функцияларды, логикалық операторлардың функционалды толық жиынтығынан құрастыруға болады. 1987 жылы Конвейдің «Өмір ойыны» биттік векторлар бойынша логикалық операциялардың арнайы тізбегін шақыру үшін «blitтер» деп аталатын бастапқы ағынды процессорды пайдалана отырып, жалпы мақсаттағы есептеудің алғашқы мысалдарының бірі болды. GPU-дағы жалпы мақсаттағы есептеулер 2001 жылдан кейін графикалық процессорларда бағдарламаланатын шейдерлер мен қозғалмалы нүктелерді қолдаудың пайда болуымен практикалық және танымал болды. Матрицалар және/немесе векторларды, әсіресе екі, үш немесе төрт өлшемді векторларды қамтитын мәселелерді GPU-ға аудару оңай болды, ол осы типтерде туа біткен жылдамдықпен және қолдаумен әрекет етеді. GPGPU үшін маңызды кезең 2003 жыл болды, онда екі зерттеу тобы тәуелсіз түрде GPU-ға негізделген тәсілдерді GPU-да жалпы сызықтық алгебра мәселелерін шешу үшін тапты, бұл CPU-дағыдан жылдам болды. GPU-ды жалпы мақсаттағы процессор ретінде пайдаланудың алғашқы күш-жігерлері есептеу мәселелерін графикалық примитивтер тұрғысынан қайта құруды талап етті, өйткені графикалық процессорлар үшін екі негізгі API, OpenGL және DirectX қолдайды. Бұл қиын аударма Sh/RapidMind, Brook және Accelerator сияқты жалпы мақсаттағы бағдарламалау тілдері мен API-лердің пайда болуымен жеңілді. Олардан кейін Nvidia CUDA пайда болды, ол бағдарламашыларға негізгі графикалық тұжырымдамаларды елемеуге мүмкіндік берді және жоғары өнімді есептеудің көбірек таралған түсініктеріне назар аударуға рұхсат етті. Жаңа, аппараттық өндірушіге тәуелсіз ұсыныстарға Microsoft-тың DirectCompute және Apple/Khronos Group-тың OpenCL кіреді. Nvidia 2006 жылы CUDA-ны іске қосты, бұл бағдарламалық қамтамасыз етуді әзірлеу жиынтығы (SDK) және қолданбалы бағдарламалау интерфейсі (API), ол GeForce 8 сериясында және одан кейінгі GPU-да орындауға арналған алгоритмдерді кодтау үшін C бағдарламалау тілін пайдалануға мүмкіндік береді. ROCm, 2016 жылы іске қосылды, бұл AMD-нің CUDA-ға ашық бастапқы кодты жауабы. 2022 жылға қарай ол CUDA-мен мүмкіндіктері жағынан тең, бірақ тұтынушылар қолдауы әлі де жетіспейді. OpenVIDIA 2003–2005 жылдар аралығында Nvidia компаниясымен бірлесіп Торонто университетінде әзірленді. Altimesh Hybridizer, Altimesh компаниясы жасаған, Common Intermediate Language-ты CUDA бинарлық файлдарына компиляциялайды. Ол generics және виртуалды функцияларды қолдайды. Қателерді жою және профильдеу Visual Studio және Nsight-пен біріктірілген. Ол Visual Studio Marketplace-де Visual Studio кеңейтуі ретінде қол жетімді. Microsoft DirectCompute GPU есептеу API-ін ұсынды, ол DirectX 11 API-мен бірге шығарылды. QuantAlea жасаған Alea GPU, Microsoft .NET F# және C# тілдері үшін туа біткен GPU есептеу мүмкіндіктерін ұсынады. Alea GPU сонымен қатар GPU параллельді және параллельді агрегатты пайдаланумен делегаттар мен автоматты жад басқаруға негізделген оңайлатылған GPU бағдарламалау моделін ұсынады. MATLAB Parallel Computing Toolbox және MATLAB Distributed Computing Server, сондай-ақ Jacket сияқты үшінші тарап пакеттерін қолдайды. GPGPU өңдеу физикалық қозғалтқыштармен Ньютон физикасын имитациялау үшін де қолданылады. Apple iOS қосымшалары үшін жеке меншік Metal API-ді енгізді, ол Apple-дің GPU есептеу шейдерлері арқылы кез келген кодты орындай алады.
Жабдықтық қолдау
Компьютерлік бейнекарталар Nvidia, AMD сияқты әртүрлі өндірушілермен шығарылады. Осындай өндірушілердің карталары дерек форматтарын қолдау тұрғысынан, мысалы, бүтін сан және қалқыма нүкте форматтарында (32 бит және 64 бит) өзгешеліктерге ие. Microsoft графикалық карталардың әртүрлі мүмкіндіктерін қарапайым Shader Model нұсқасының нөмірімен (1.0, 2.0, 3.0 және т.б.) жіктеуге көмектесетін Shader Model стандартын енгізді.
Бүкіл сандар
DirectX 9 видеокарталары тек палитралық немесе толық сандық түс түрлерін қолдады. Әрқайсысында қызыл, жасыл және көк компоненттері бар әртүрлі форматтар бар. Кейде мөлдірлік үшін альфа каналы да қосылады. Көне форматтар:
Пикселге 8 бит – Кейде палитра режимі, онда әрбір мән нақты түс мәні басқа форматтардың бірінде көрсетілген кестедегі индекс болып табылады. Кейде қызылға үш, жасылға үш, көкке екі бит бөлінеді. Пикселге 16 бит – Әдетте, биттер қызылға бес, жасылға алты, көкке бес бит бөлінеді. Пикселге 24 бит – Қызыл, жасыл және көк компоненттерінің әрқайсысы үшін сегіз бит бар. Пикселге 32 бит – Қызыл, жасыл, көк және альфа компоненттерінің әрқайсысы үшін сегіз бит бар.
Жылжымалы нүктелі сандар
Ертедегі тұрақты функциялы немесе шектеулі бағдарламаланатын графика үшін (яғни DirectX 8.1 стандартына сәйкес GPU-ларға дейін) бұл жеткілікті болды, себебі осы формат дисплейлерде де қолданылды. Бұл форматтың белгілі бір шектеулері бар. Графикалық өңдеу қуаты жеткілікті болғанда, тіпті графикалық бағдарламалаушылар да жоғары динамикалық диапазонды бейнелеу сияқты эффекттер алу үшін, жылжымалы нүктелік дерек форматтары сияқты жақсырақ форматтарды пайдалануды қалайды. Көптеген GPGPU қолданбаларына жылжымалы нүктелік дәлдік қажет, ол DirectX 9 спецификациясына сәйкес келетін бейнекарталармен бірге келді. DirectX 9 Shader Model 2.x екі дәлдік түрін қолдауды ұсынды: толық және жартылай дәлдік. Толық дәлдік FP32 немесе FP24 (әр компонент үшін 32 немесе 24 биттік жылжымалы нүкте) немесе одан да жоғары болуы мүмкін, ал жартылай дәлдік FP16 болды. ATI-дің Radeon R300 сериялы GPU-лары FP24 дәлдігін тек бағдарламаланатын фрагменттік конвейерде қолдады (FP32 vertex процессорларында қолдау болған жағдайда), ал Nvidia-ның NV30 сериясы FP16 және FP32 екеуін де қолдады; S3 Graphics және XGI сияқты басқа өндірушілер FP24-ке дейінгі форматтардың қоспасын қолдады. Nvidia GPU-ларындағы жылжымалы нүктелік операциялар көбінесе IEEE стандартына сәйкес келеді; алайда, бұл барлық өндірушілерге қатысты емес. Бұл кейбір ғылыми қолданбалар үшін маңызды саналатын дұрыстыққа әсер етеді. 64 биттік жылжымалы нүктелік мәндер (қос дәлдіктік сандар) CPU-да кеңінен қолжетімді болғанымен, GPU-да оларға толық қолдау көрсетілмейді. Кейбір GPU архитектуралары IEEE стандартына сәйкестіктен бас тартады, ал басқаларында қос дәлдік жоқ. GPU-да қос дәлдікті жылжымалы нүктелік мәндерді эмуляциялауға әрекеттер жасалды; алайда, жылдамдықтан айырылу есептеуді GPU-ға жүктеудің кез келген пайдасын жоққа шығарады.
Векторизация
GPU-дағы көптеген операциялар векторлық түрде орындалады: бір операцияда бір уақытта төртке дейін мәнді өңдеуге болады. Мысалы, егер бір түсті екінші түспен модуляциялау қажет болса, GPU нәтижесіндегі түсті бір операцияда шығара алады. Бұл мүмкіндік графикада өте пайдалы, себебі дерлік барлық негізгі дерек типі вектор болып табылады (2, 3 немесе 4 өлшемді). Бұрыштар, түстер, нормаль векторлар және текстура координаттары осыған жатады. Көптеген басқа да қолданбалар осыны тиімді пайдалана алады, ал олардың жоғары өнімділігіне байланысты векторлық нұсқаулар, яғни бір нұсқау – көп дерек (SIMD) деп аталатын технология, көптен бері CPU-да қолданылып келеді.
GPU мен CPU арасындағы айырмашылық
Бастапқыда деректер орталық процессордан (CPU) графикалық процессорға (GPU) және одан кейін дисплей құрылғысына бір бағытта ғана жіберілді. Бірақ уақыт өте келе, GPU-ға алдымен қарапайым, содан кейін күрделі деректерді сақтау қажеттігі туды. Бұл деректерді CPU-ға қайтаруға болатын, ол бейнелерді талдайтын немесе бейне картасы түсінетін 2D немесе 3D форматта бейнеленген ғылыми деректер жиынтығын өңдейтін. GPU әрбір сызу операциясына қол жеткізе алатындықтан, осы деректерді жылдам талдай алады, ал CPU әрбір пикселді немесе дерек элементін әлдеқайда баяу тексеруі керек, себебі CPU мен оның үлкен кездейсоқ сәйкес жадысының (немесе тіпті нашар жағдайда, қатты дискінің) арасындағы қол жеткізу жылдамдығы GPU-лар мен бейне карталарына қарағанда төмендеу, олар әдетте кішкентай көлемдегі, бірақ қымбат жадыға ие, оған қол жеткізу әлдеқайда жылдам. Деректер жиынтығының белсенді талдауға қатысатын бөлігін текстуралар немесе GPU-да оңай оқылатын басқа форматтар түрінде GPU жадына беру жылдамдықты арттырады. GPGPU дизайнының ерекшелігі – ақпаратты екі бағытта, GPU-дан CPU-ға жіберу мүмкіндігі; екі бағыттағы деректердің өтімділігі жоғары болғанда, бұл белгілі бір алгоритмнің жылдамдығын арттырады. GPGPU құбырлары әсіресе үлкен деректер жиынтықтарында және/немесе 2D немесе 3D бейнелерді қамтитын деректерде тиімділікті арттыра алады. Ол күрделі графикалық құбыржолдарда, сондай-ақ ғылыми есептеулерде қолданылады; геномдық карта жасау сияқты үлкен деректер жиынтықтары бар салаларда немесе екі немесе үш өлшемді талдау қажет болғанда, әсіресе қазіргі биомолекулалық талдау, белоктарды зерттеу және басқа да күрделі органикалық химияда кеңінен қолданылады. Мұндай құбырлар бейне өңдеу және компьютерлік көру, сондай-ақ жалпы параллель өңдеуде де тиімділікті арттыра алады. Кейбір жоғары сапалы оңтайландырылған құбырлар бір жоғары пайдаланылатын тапсырмада бастапқы CPU-ға негіделген құбырдың жылдамдығын бірнеше жүз есеге арттырды. Мысалы, GPU бағдарламасы камерадан немесе компьютерлік графика бағдарламасынан алынған көріністер туралы орташа жарық мәндері туралы деректерді жинап, CPU-дағы негізгі бағдарламаға қайтарады, содан кейін CPU жалпы экран көрінісін түзетуге болады. Күрделірек мысал ретінде, шеттерді анықтау арқылы сандық ақпаратты және контурларды бейнелейтін өңделген суретті, мысалы, мобильді роботты басқаратын компьютерлік көру бағдарламасына қайтаруға болады. GPU-ның әр пикселге немесе кескіндегі басқа элементке жылдам және тікелей аппараттық қол жеткізімі бар болғандықтан, ол оны (бірінші мысал үшін) талдап, орташалай алады немесе Sobel жиектік сүзгісін немесе басқа конволюциялық сүзгіні (екіншісі үшін) CPU-ға қарағанда әлдеқайда жылдам қолдана алады, ол әдетте қаралып отырған графиканың баяу кездейсоқ сәйкес жады көшірмелеріне қол жеткізуі керек. GPGPU – бұл негізінен бағдарламалық концепция, аппараттық емес; ол жабдықтың бір бөлігі емес, алгоритмнің түрі. Дегенмен, мамандандырылған жабдық дизайны GPGPU құбырларының тиімділігін одан әрі арттыра алады, олар дәстүрлі түрде өте көп деректерде салыстырмалы түрде аз алгоритмдерді орындайды. Үлкен параллельді, алып дерек деңгейі міндеттерін, осылайша, рак есептеулер (ракта орналасқан көптеген ұқсас, жоғары бейімделген машиналар) сияқты мамандандырылған орнатулар арқылы одан әрі параллельдеуге болады, бұл көптеген GPU-ға сәйкес келетін көптеген CPU-ларды қолданатын көптеген есептеу блоктарының үшінші қабатын қосады. Кейбір Bitcoin "шахташылары" осындай орнатуларды үлкен көлемде өңдеу үшін қолданды.
Кэштер
Тарихи тұрғыдан алғанда, процессорлар (CPU) аппараттық басқарылатын кэш пайдаланған, бірақ алғашқы графикалық процессорлар (GPU) тек бағдарламалық басқарумен жұмыс істейтін жергілікті жадты ұсынған. Дегенмен, GPU-лар жалпы мақсаттағы қолданбалар үшін жиі қолданыла бастағандықтан, қазіргі заманғы GPU-лар аппараттық басқарылатын көп деңгейлі кэштермен жабдықталады, бұл олардың негізгі есептеулерге қарай дамуына көмектеседі. Мысалы, GeForce 200 сериясының GT200 архитектуралы GPU-ларында L2 кэші болмаған, Fermi GPU-да 768 КиБ соңғы деңгейлі кэш, Kepler GPU-да 1,5 МиБ соңғы деңгейлі кэш, Maxwell GPU-да 2 МиБ соңғы деңгейлі кэш, ал Pascal GPU-да 4 МиБ соңғы деңгейлі кэш бар.
Тіркелгі файлы
GPU-ларда өте үлкен регистрлік файлдар бар, бұл оларға контекст ауыстырудың кешігуін азайтуға мүмкіндік береді. Регистрлік файлдың көлемі әртүрлі GPU ұрпақтарында да артып келеді, мысалы, Maxwell (GM200), Pascal және Volta GPU-ларындағы регистрлік файлдың жалпы көлемі тиісінше 6 МиБ, 14 МиБ және 20 МиБ құрайды. Ал, процессорлардағы регистрлік файлдың көлемі салыстырмалы түрде шағын, әдетте ондаған немесе жүздеген килобайтты құрайды.
Энергия тиімділігі
GPU-ның жоғары өнімділігі жоғары қуат тұтынуымен байланысты, және толық жүктеме кезінде бұл қуаттың мөлшері қалған компьютер жүйесінің тұтынатын қуатына тең болады. Паскаль сериялы GPU (Tesla P100) үшін максималды қуат тұтынуы 250 Вт деп белгіленген.
Ағынды өңдеу
GPU-лар графика үшін арнайы жасалғандықтан, операциялар мен бағдарламалауда өте шектеулі. Өздерінің дизайнына байланысты, GPU тек ағынды өңдеу арқылы шешілетін мәселелер үшін тиімді, ал аппараттық құралды белгілі бір тәсілдермен ғана пайдалануға болады. Төмендегі вертикальдарға, фрагменттерге және текстураларға қатысты талқылау, негізінен GPGPU бағдарламалаудың ескі үлгісіне қатысты, онда жалпы мақсаттағы есептеулерді орындау үшін графикалық API (OpenGL немесе DirectX) қолданылды. CUDA (Nvidia, 2007) және OpenCL (өндірушіге тәуелсіз, 2008) жалпы мақсаттағы есептеу API-лерінің енгізілуімен, жаңа GPGPU кодтарында есептеуді графикалық примитивтерге бейімдеудің қажеті жоқ. GPU-дың ағынды өңдеу сипаты, қолданылған API-лерге қарамастан, жарамды болып қалады. (Мысалы, қараңыз)
GPU-лар тек тәуелсіз вертикальдар мен фрагменттерді өңдей алады, бірақ олардың көптегенін параллельді өңдеуге болады. Бұл әсіресе бағдарламашы көптеген вертикальдарды немесе фрагменттерді бірдей жолмен өңдегісі келгенде тиімді. Осыған орай, GPU-лар – ағындағы көптеген жазбаларда бір ядроны іске қосып, параллель жұмыс істей алатын процессорлар. Ағын – бұл ұқсас есептеуді талап ететін жазбалар жиынтығы. Ағындар деректердің параллельдігін қамтамасыз етеді. Ядролар – бұл ағындағы әрбір элементке қолданылатын функциялар. GPU-да вертикальдар мен фрагменттер – ағын элементтері, ал вертикаль және фрагмент шейдерлері – олармен жұмыс істейтін ядролар. Әрбір элемент үшін тек кірісті оқуға, оған операциялар жасауға және нәтижені шығаруға болады. Бірнеше кіріс және шығыстар болуы мүмкін, бірақ ешқашан бір жад бөлігін бір мезгілде оқуға да, жазуға да болмайды. Арифметикалық қарқындылық – бұл бір сөздік көлемдегі жадқа қатынас кезінде орындалатын операциялар саны. GPGPU қолданбалары үшін жоғары арифметикалық қарқындылық маңызды, әйтпесе жадқа кірудің кешігуі есептеу жылдамдығын шектейді. Идеалды GPGPU қолданбалары үлкен деректер жиынтығына, жоғары параллельдікке және деректер элементтері арасындағы минималды тәуелділікке ие болады.
Ағынды пішіндер
GPGPU-да ағынның ең көп таралған түрі 2D тор болып табылады, себебі бұл GPU-ға енгізілген рендеринг модельімен үйлесімді келеді. Көптеген есептеулер табиғи түрде торларға бейімделеді: матрицалық алгебра, кескіндерді өңдеу, физикалық симуляция және т.б. Текстуралар жад ретінде қолданылатындықтан, текстуралық сұраулар жадтан оқу ретінде пайдаланылады. Осының арқасында GPU кейбір операцияларды автоматты түрде орындай алады.
Ағындылықты басқару
Кезекті кодта бағдарламаның ағынын if-then-else операторлары мен түрлі цикл түрлерін пайдалана отырып басқаруға болады. Мұндай ағынды басқару құрылымдары GPU-ға жақында ғана қосылды. Дұрыс құрастырылған арифметикалық/бит операциялар тізбегі арқылы шартты жазуды орындау мүмкін болды, бірақ циклдар мен шартты тармақталу мүмкін емес еді. Жаңа GPU-лар тармақталуға мүмкіндік береді, бірақ көбінесе бұл өнімділікке әсер етеді. Тармақталуды ішкі циклдерде, CPU немесе GPU кодтарында, мүмкіндігінше болдырмау керек. Аппараттық қолдау болмаған жағдайда тармақталуға қол жеткізу үшін статикалық тармақтарды шешу, алдын ала есептеу, болжамдау, циклдарды бөлу және Z cull сияқты әртүрлі әдістерді қолдануға болады.
Карта
Карта операциясы ағындағы әрбір элементке берілген функцияны (ядроны) қолданады. Мысалы, ағындағы әрбір мәнді тұрақты санға көбейту (суреттің жарықтығын арттыру) қарапайым мысал болып табылады. Карта операциясын GPU-да жүзеге асыру оңай. Бағдарламашы экрандағы әрбір пиксел үшін фрагмент жасайды және оған фрагмент бағдарламасын қолданады. Нәтижедегі ағын, бастапқысымен бірдей өлшемде, шығыс буферінде сақталады.
Кішірейту
Кейбір есептеулер үлкен ағыннан кішірек ағынды (мүмкін, бір ғана элементтен тұратын ағынды) есептеуді талап етеді. Бұл ағынды қысқарту деп аталады. Әдетте, қысқарту бірнеше қадамда орындалуы мүмкін. Алдыңғы қадамның нәтижелері келесі қадамға кіріс ретінде қолданылады, ал операция қолданылатын диапазон бір ғана ағын элементі қалғанша тарытылады.
Ағынды сүзгілеу
Ағынды сүзгілеу – бұл біркелкі емес қысқартудың бір түрі. Сүзгілеу дегеніміз, белгілі бір критерийлерге сәйкес ағыннан элементтерді жою.
Сканерлеу
Сканерлеу операциясы, сонымен қатар параллель префикс қосындысы деп аталады, дерек элементтерінің векторын (ағынын) және "i" сәйкестік элементі бар (кәдімгі) ассоциативтік екілік функцияны "+" қабылдайды. Егер кіріс [a0, a1, a2, a3, ] болса, эксклюзивті сканерлеу [i, a0, a0 + a1, a0 + a1 + a2, ] шығарады, ал инклюзивті сканерлеу [a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, ] шығарады және сәйкестік элементтің болуын талап етпейді. Алғашқы қарапайым көрінісінде операция қатарлы болып көрінуі мүмкін, бірақ тиімді параллель сканерлеу алгоритмдері бар және олар графикалық процессорларда іске асырылған. Сканерлеу операциясы, мысалы, жылдам сұрыптау және сирек матрица-вектор көбейтуінде қолданылады.
Шашырату
Шашырату операциясы ең табиғи түрде vertex процессорында анықталады. Vertex процессоры vertex-тің орнын реттеуге қабілетті, бұл бағдарламашыға желіде ақпараттың қайда сақталуын басқаруға мүмкіндік береді. Басқа кеңейтімдер де мүмкін, мысалы, vertex-тің қаншалықты үлкен аймаққа әсер ететінін бақылау. Фрагмент процессоры тікелей шашырату операциясын орындай алмайды, себебі әр фрагменттің желідегі орны фрагмент құрылған кезде белгілі болады және бағдарламашы оны өзгерте алмайды. Дегенмен, логикалық шашырату операциясы кейде қайта құрылуы немесе басқа жинақтау қадамы арқылы іске асырылуы мүмкін. Шашыратуды іске асыру алдымен шығыс мәні мен шығыс адресін шығарады. Соңынан келетін жинақтау операциясы шығыс мәнінің ағымдағы шығыс ұясына сәйкес келіп-келмейтінін анықтау үшін адрес салыстыруларын пайдаланады. Арнайы есептеу ядроларында шашырату индекстелген жазулар арқылы орындалуы мүмкін.
Жинақтау
Жинақтау – шашыратудың кері операциясы. Шашырату карта бойынша элементтерді қайта реттегеннен кейін, жинақтау шашырату қолданған картаға сәйкес элементтердің бастапқы реттілігін қалпына келтіре алады. Арнайы есептеу ядроларында жинақтау индекстелген оқу арқылы жүзеге асырылуы мүмкін. Ал басқа шейдерлерде ол текстуралық сұраулармен орындалады.
Сорттау
Сорталау операциясы ретсіз элементтер жиынын реттелген элементтер жиынына айналдырады. GPU-да ең көп қолданылатын әдіс – бүтін сандар мен қалқыма нүктелі деректер үшін радикс сұрыптау, ал жалпы салыстырылатын деректер үшін ірі ұялы біріктіру сұрыптау және ұсақ ұялы сұрыптау желілерін пайдалану.
Іздеу
Іздеу операциясы бағдарламашыға ағындағы белгілі бір элементті табуға немесе, мүмкін, нақтыланған элементтің жақын тұрғандарын табуға мүмкіндік береді. GPU жеке элементті іздеу жылдамдығын арттыру үшін емес, көптеген іздеуді параллель түрде орындау үшін қолданылады. Көбінесе реттелген элементтерде екілік іздеу әдісі қолданылады.
Молекулалық динамика
Қолданбаның сипаттамасы Қолданылатын мүмкіндіктер Күтілетін жылдамдық† GPU‡ Көп GPU қолдауын шығару жағдайы AbaloneМодельдер биополимерлердің молекулалық динамикасы белоктарды, ДНК және лигандтарды симуляциялау үшінАйқын және жасырын еріткіш, гибрид Монте-Карло4–120xT 2075, 2090, K10, K20, K20XҚазіргі таңда қол жетімді, 1.8.88 нұсқасы ACEMDGPU молекулалық механика күш өрістерін симуляциялау, жасырын және ашық еріткіш Тек GPU-да қолдануға жазылған160 нс/күн GPU нұсқасыT 2075, 2090, K10, K20, K20X✔Қазіргі таңда қол жетімді AMBERБиомолекулалардағы молекулалық динамиканы симуляциялау бағдарламаларының жиынтығы: ашық және жасырын еріткіш 89.44 нс/күн JAC NVE T 2075, 2090, K10, K20, K20X✔Қазіргі таңда қол жетімді, 12 + 9 қателерді түзеу DL POLYМакромолекулаларды, полимерлерді, иондық жүйелерді және т.б. симуляциялау үшін екі дене күштері, клеткалық жұптар, Эвальд SPME күштері, Шейк VV4xT 2075, 2090, K10, K20, K20X✔Үлестірілген жадтағы параллель компьютерде қазір қол жетімді, тек 4.0 нұсқасы CHARMMД биомолекулалардағы молекулалық динамиканы симуляциялау үшін. Имплицитті (5x), эксплицитті (2x) еріткіш OpenMMTBDT 2075, 2090, K10, K20, K20X арқылы ✔Жасалған, Q4/12 GROMACS күрделі байланыс өзара әрекеттесуімен биохимиялық молекулаларды симуляциялау Имплицитті (5x), эксплицитті (2x) еріткіш 165 нс/күн DHFR T 2075, 2090, K10, K20, K20X Қазір қол жетімді, 4.6 нұсқасы Q4/12 HOOMD BlueGPU-ларға арналған негіздемелерді жазуға арналған бөлшек динамикасы пакеті GPU-ларға арналған 2x T 2075, 2090, K10, K20, K20X✔Қазір қол жетімді LAMMPSКлассикалық молекулалық динамикасы Леннард-Джонс, Морзе, Букингем, CHARMM, кестеленген, әрі қарай SDK, анизотроптық Gay-Bern, RE squared, "гибрид" комбинациялары3–18xT 2075, 2090, K10, K20, K20X✔Қазір қол жетімді NAMDҮлкен молекулалық жүйелерді жоғары өнімділікпен симуляциялау үшін жасалған 100М атомға қабілетті6.44 нс/күн STMV 585x 2050sT 2075, 2090, K10, K20, K20X✔Қазір қол жетімді, 2.9 нұсқасы OpenMMHPC үшін GPU-лармен молекулалық динамикаға арналған кітапхана және қолданба Имплицитті және эксплицитті еріткіш, арнайы күштер Имплицитті: 127–213 нс/күн; Эксплицитті: 18–55 нс/күн DHFRT 2075, 2090, K10, K20, K20X✔Қазір қол жетімді, 4.1.1 нұсқасы
† Күтілетін жылдамдық арттыру жүйе конфигурациясына өте байланысты. GPU өнімділігі көп ядролы x86 CPU сокетімен салыстырылған. GPU өнімділігі GPU қолдауындағы мүмкіндіктерге сәйкес бағаланады және ядролық өнімділікті ядролық салыстыру болуы мүмкін. Пайдаланылған конфигурация туралы мәліметтерді қолданба веб-сайтынан қараңыз. Жылдамдық арттыру Nvidia-ның ішкі сынақтарына немесе ISV құжаттамасына сәйкес. ‡ Q=Quadro GPU, T=Tesla GPU. Nvidia осы қолданба үшін ұсынылған GPU-лар. Сертификаттау туралы ақпаратты алу үшін әзірлеушімен немесе ISV-мен тексеріңіз.