Нов съм в OpenCL, моля, кажете ми, че хост процесорът може да се използва само за разпределяне на памет към устройството или можем да го използваме като openCL устройство. (Тъй като след като разпределението е направено, хост процесорът ще бъде неактивен).
OpenCL - загуба на изчислителна мощност на хоста
Отговори (2)
Можете да използвате процесор като изчислително устройство. Opencl дори позволява на многоядрени/процесорни системи да сегментират ядрата в отделни изчислителни единици. Обичам да използвам тази функция, за да разделя процесора на моята система на групи въз основа на NUMA възли. Възможно е процесорът да се раздели на изчислителни устройства, които споделят едно и също ниво на кеш памет (L1, L2, L3 или L4).
Имате нужда от платформа, която го поддържа, като например SDK на AMD. Знам, че има начини да имам платформи Nvidia и AMD на една и съща машина, но никога не ми се е налагало да го правя сам.
Освен това системата за събитие/обратно извикване на opencl ви позволява да използвате вашия процесор, както обикновено, докато ядрата на gpu се изпълняват. По този начин можете да използвате openmp или всеки друг код на хоста, докато чакате ядрото на gpu да завърши.
Няма причина процесорът да е неактивен, но се нуждае от отделна работа. След като изпратите работа в OpenCL, можете:
- Заемете се с нещо друго, като подготовка на следващия набор от работа или извършване на изчисления върху нещо съвсем различно.
- Настройте процесора като друго изчислително устройство и му предайте част от работата.
Лично аз имам нужда от първия случай по-често, тъй като рядко се оказвам с две задачи, които са независими и се поддават на OpenCL стил. Номерът е да поддържате нещата балансирани, така че да не чакате дълго време задачата на графичния процесор да приключи или GPU да е неактивен, докато процесорът се заема с друга работа.
Това е същият проблем, който програмистите на OpenGL трябваше да преодолеят. Избягване на обвързаността с CPU или GPU и балансиране между двете за най-добра производителност.