Какво можем да правим с OpenCL?

Четох за OpenCL и намерих този ред:

OpenCL дава на всяко приложение достъп до графичния процесор за неграфични изчисления.

Да кажем, че трябва да изпълня интензивна CPU операция или алгоритъм в Java или Clojure (или дори може би да изпълнявам Hadoop MapReduce), мога ли да изпълня операцията в GPU с помощта на OpenCL? ако да, защо бих го направил?

Ако имаме CPU, защо да използваме GPU?

Какви са сценариите на OpenCL приложенията?

Четох, че OpenCL осигурява паралелно програмиране, означава ли това, че ще раздели целева задача между CPU и GPU? или само през GPU?


person Chiron    schedule 18.04.2011    source източник
comment
youtube.com/watch?v=4LLbQ7WDh8c   -  person Lu4    schedule 26.04.2011
comment
Защо противният вот по някакъв начин? Когато гласувате против, моля, разработете няколко реда, за да го обясните.   -  person Chiron    schedule 26.04.2011
comment
Гласувах против, защото бях разстроен да отделя време за този въпрос, човекът не е наясно какво иска да попита. Как отговаряте Какви са сценариите на OpenCL приложенията? така или иначе? Въпросът е 100% глупав... Съжалявам...   -  person Lu4    schedule 26.04.2011


Отговори (3)


OpenCL предоставя преносим интерфейс за програмиране на паралелни машини. OpenCL програмите могат да се изпълняват на CPU или GPU. Не съм виждал технология, която да изпълнява кода едновременно през процесора и графичния процесор.

Използването на GPU за изчисления с общо предназначение използва факта, че GPU всъщност са изградени от стотици или дори хиляди прости, малки процесорни елементи (PE). За някои задачи тази архитектура може да е в състояние да изпълни задачата за част от времето, необходимо на процесора.

Един недостатък на графичните процесори е, че те са наистина мутантни машини SIMD (единична инструкция с множество данни); по този начин големи групи от PE са принудени да изпълняват една и съща операция по едно и също време, но върху различни данни. Това ограничение прави проектирането на програмата малко по-трудно.

Графичните процесори са много добри за всяка задача, която може да бъде паралелизирана, без да се изисква много комуникация между различни нишки. Технологии като CUDA и OpenCL на NVIDIA започнаха да се използват значително в научни приложения и високопроизводителни изчисления, като и двете експлоатират паралелизма доста силно.

person virtuallinux    schedule 19.04.2011
comment
"OpenCL programs can be run on the CPU or the GPU." - ...или на всяко друго устройство (поддържащо OpenCL). - person fridojet; 05.09.2012
comment
@virtuallinux Интересувам се от приложението на OpenCL в контекст на java (или Clojure). - person Alister Lee; 26.07.2013

OpenCL е разработен, след като ученият установи, че архитектурата на GPU е в състояние да извършва изчисления на линейната алгебра много ефективно.

Проблемите на линейната алгебра са склонни да бъдат много лесни за паралелизиране и да бъдат доста прости за единичните елементи. В повечето векторни и матрични операции са необходими само четирите основни математически функции +, -, / и *. Освен това, някои сравнения за Max и Min търсения и човек може да свърши много работа в паралелна среда. Ако размерът на проблема е достатъчно голям, че допълнителното време за копиране на данни от RAM към GPU и обратно е много по-малко от увеличаването на скоростта на GPU, човек достига големи увеличения на производителността.

Техниките са разработени от тогава. Първите изчисления са извършени чрез преобразуване на задачите в графични задачи и обратно. OpenCL е разработен, за да осигури чист интерфейс за изчисления.

OpenCL е подходящ за проблеми, които могат да се изпълняват паралелно без твърде много зависимости и изискват много изчислителна мощност. Линейна алгебра, алгоритми за търсене, трансформации на сигнали и 3D сцени и проверки на сблъсък са класически примери.

person Rick-Rainer Ludwig    schedule 20.04.2011
comment
изчакайте.. беше нужен учен, за да разбере, че процесорна архитектура, проектирана за изобразяване на 3D в реално време, е добра при извършване на векторни и матрични операции?? хаха :D - person JustDanyul; 10.10.2012
comment
Да, един вид. Спомням си моята лекция за високопроизводителни компютри и историята за някои математици, които свързват PS2, за да направят HPC в Швейцария. Това беше преди OpenCL. ;-) Използването за наука беше след използването му за графики. - person Rick-Rainer Ludwig; 10.10.2012
comment
Шегувах се, колега :) GPU основно имплементирани на SIMD, проектирани с една цел. Изумително бързо изпълнение на линейната алгебра. Да кажеш, че учен е открил, че случайно са били добри в правенето на LA, е все едно да кажеш, че един ден учен е открил, че DSP е доста добър при извършване на определени типове цифрова обработка на сигнали ;) - person JustDanyul; 11.10.2012

Intel със сигурност не са толкова ентусиазирани относно openCL. Не мисля, че ще мога да инсталирам драйверите на моята Linux система, толкова неудобно са го направили. Има и други технологии като чиповете за цифрова обработка на сигнали от Texas Instruments. Бих използвал openCL, ако можех. Въпреки това има някои предимства от използването, да речем, на група от евтини ARM платки за доста приложения. Лесното програмиране е много важно, а не нещо, което съществува хипотетично, но никога не се използва реално.

person SeanVN    schedule 08.12.2014