Кіріспе

Компьютерлік бағдарламалау тілі

Брук бағдарламалау тілі және оның BrookGPU іске асырылуы графикалық процессорларда жалпы мақсаттағы есептеулерді жүзеге асыру бойынша алғашқы және маңызды әрекеттер болды. Стэнфорд университетінің графикалық тобында жасалған Брук, ATI немесе Nvidia графикалық карталарындағыдей, қазіргі заманғы, жоғары параллель GPU-ларға бағытталған ағын бағдарламалау тілінің компиляторы және орындалу ортасы еді. BrookGPU, Брук ағын бағдарламалау тілінде жазылған бағдарламаларды компиляциялады, ол ANSI C нұсқасы болып табылады. Ол есептеу үшін OpenGL v1.3+, DirectX v9+ немесе AMD-нің Close to Metal-ін қолдап, Microsoft Windows және Linux жүйелерінде жұмыс істеді. Қателерді жою үшін BrookGPU CPU-да виртуалды графикалық картаны модельдеуге де қабілетті болды.

Мәртебе

Соңғы ірі бета-релиз (v0.4) 2004 жылдың қазанында шықты, бірақ жаңа даму 2007 жылдың қарашасында v0.5 бета 1 релизімен қайта басталды да, тоқтатылды. V0.5 нұсқасының жаңа мүмкіндіктеріне PBuffers орнына фреймбуфер объектілерін пайдаланатын, сондай-ақ жекеше жеткізушілердің кеңейтімдерін пайдаланудың орнына стандартты OpenGL интерфейстеріне негізделген, жақсартылған және жылдам жұмыс істейтін OpenGL бэкенді кіреді. GLSL қолдауы қосылды, бұл бұрын тек DirectX 9 қолдаған функционалдықтың барлығын (күрделі тармақтану және циклдар) OpenGL-ге әкелді. Атап айтқанда, енді Brook Linux жүйесінде Windows сияқты тиімді жұмыс істей алады. V0.5 сериясындағы басқа да жақсартуларға бірнеше бэкендті бірдей пайдалану мүмкіндігі кіреді, яғни әртүрлі жіптер бір мезгілде әртүрлі Brook бағдарламаларын іске асыру арқылы көп GPU орнатудың мүмкіндіктерін толық пайдалануға болады, сонымен қатар CPU бэкенді үшін SSE және OpenMP қолдауы да қосылды (бұл қазіргі заманғы процессорларды толыққанды пайдалануға мүмкіндік береді).

Жүруді салыстыру

Үстел үсті компьютерлік процессорлар (CPU) мен GPGPU арасындағы тікелей салыстыру алгоритмдік және құрылымдық айырмашылықтарға байланысты қиындық тудырады. Мысалы, 2.66 ГГц Intel Core 2 Duo, егер SSE және ағынды жадқа қолжеткізуді тиімді пайдаланса, секунд сайын 25 GFLOP (25 миллиард бір дәлдікті қозғалатын нүктелік операция) орындай алады, бұл ретте алдын ала жүктеуші (prefetcher) өте жақсы жұмыс істейді. Дегенмен, дәстүрлі түрде (көлеңкелік бағдарламалардың ұзындығымен шектелгендіктен) көптеген GPGPU ядролары үлкен деректер жиынтығында салыстырмалы түрде аз жұмыс істеуге бейім, сондықтан GPGPU алгоритмдерін тікелей үстел үсті компьютерлік процессорда орындаудағы басты мәселе – жадтың өте төмен өткізу қабілеті. Себебі, процессор көп уақытын RAM күтуге жұмсайды. Мысалы, екі каналды PC2 6400 DDR2 RAM шамамен 11 Гбит/с өнімділік бере алады, бұл оқу және жазу операцияларын ескергенде, шамамен 1.5 GFLOP-қа тең (жалпы өткізу қабілеті 3 GFLOP). Осылайша, егер жад өткізу қабілеті шектелсе, Brook-тың процессорлық бөлімі 2 GFLOP-тан аспайды. Іс жүзінде, көрсеткіш тіпті төмен, әсіресе float4 дерек типінен басқа нәрселер үшін, себебі тек осы дерек типі ғана SSE арқылы үдетіледі. ATI HD 2900 XT (740 МГц ядро, 1000 МГц жад) DirectX 9 арқылы Brook ең көп дегенде 410 GFLOP орындай алады. OpenGL (драйвер мен Cg компиляторының шектеулеріне байланысты) қазіргі уақытта GPGPU үшін бұл GPU-да тиімді емес, сондықтан OpenGL қолданғанда Brook 210 GFLOP-ты ғана басқара алады. Қағазда бұл процессордан 20 есе жылдам көрінеді, бірақ бұл оңай емес. Қазіргі GPU-ларда тармақтану және оқу/жазу операцияларында үлкен кешігулер бар, сондықтан нақты кодта ең жоғарғы көрсеткіштің үштен бірін күтуге болады. Бұл ATI картасын Intel Core 2 Duo-дан шамамен 125 GFLOP жылдамдықпен бес есе жылдам қалдырады. Алайда, бұл деректерді өңдеу үшін GPU-ға және одан қайтарудың маңызды бөлігін ескермейді. PCI Express 1.0 x8 интерфейсі арқылы ATI HD 2900 XT жадына шамамен 730 Мбит/с жылдамдықпен жазуға және 311 Мбит/с жылдамдықпен оқуға болады, бұл стандартты компьютерлік жадтан әлдеқайда баяу. Үлкен деректер жиынтығы үшін бұл GPU-ны пайдаланудың жылдамдық артықшылығын жақсы баптаулы процессорлық шешімге қарағанда азайтуы мүмкін. Әрине, GPU-лар процессорлардан әлдеқайда жылдамдап дамиды және PCI Express интерфейсі жақсара түссе, үлкен өңдеу жүктемесін GPU-ға жүктеудің мағынасы арта түседі.