Язык программирования Brook и его реализация BrookGPU были ранними и влиятельными попытками сделать универсальные вычисления на графических процессорах . [1] [2] Brook, разработанный графической группой Стэнфордского университета , был компилятором и реализацией языка программирования потокового программирования, предназначенным для современных высокопараллельных графических процессоров, таких как графические карты ATI или Nvidia .
Репозиторий | |
---|---|
Операционная система | Linux , Windows |
Тип | Компилятор / время выполнения |
Лицензия | Лицензия BSD (части под GPL ) |
Веб-сайт | http://graphics.stanford.edu/projects/brookgpu/ |
BrookGPU скомпилированные программы , написанные с использованием языка программирования потока Brook, который представляет собой вариант ANSI C . Он мог ориентироваться на OpenGL v1.3 +, DirectX v9 + или AMD Close to Metal для вычислительного бэкэнда и работал как на Microsoft Windows, так и на Linux . Для отладки BrookGPU также может имитировать виртуальную видеокарту на ЦП.
Статус
Последний крупный бета-выпуск (v0.4) был в октябре 2004 года, но возобновленная разработка началась и снова остановилась в ноябре 2007 года с выпуском v0.5 beta 1.
Новые функции v0.5 включают значительно обновленный и более быстрый бэкэнд OpenGL, который использует объекты фреймбуфера вместо PBuffers и согласовал код со стандартными интерфейсами OpenGL вместо использования проприетарных расширений поставщиков. Была добавлена поддержка GLSL, которая привносит в OpenGL все функции (сложные ветвления и циклы), ранее поддерживаемые только DirectX 9. В частности, это означает, что Brook теперь работает с Linux так же, как и с Windows .
Другие улучшения в серии v0.5 включают использование нескольких серверных модулей, при котором разные потоки могут запускать разные программы Brook одновременно (что позволяет максимально использовать настройку нескольких графических процессоров), а также поддержку SSE и OpenMP для серверной части ЦП (это позволяет практически максимально использовать современные ЦП).
Сравнение производительности
Подобное сравнение между настольными процессорами и GPGPU проблематично из-за алгоритмических и структурных различий.
Например, процессор Intel Core 2 Duo с тактовой частотой 2,66 ГГц может выполнять максимум 25 GFLOP (25 миллиардов операций с плавающей запятой одинарной точности в секунду) при оптимальном использовании SSE и потокового доступа к памяти, поэтому предварительная выборка работает идеально. Однако традиционно (из-за ограничений длины шейдерных программ) большинство ядер GPGPU, как правило, выполняют относительно небольшие объемы работы с большими объемами данных параллельно, поэтому большая проблема с прямым выполнением алгоритмов GPGPU на процессорах настольных ПК заключается в значительно более низкой пропускной способности памяти, как правило процессор большую часть времени проводит в ожидании ОЗУ . Например, двухканальная оперативная память PC2-6400 DDR2 может пропускать около 11 Гбит / с, что составляет максимум около 1,5 Гфлопс, учитывая, что общая пропускная способность составляет 3 Гфлопс, и нужно как читать, так и писать. В результате, если пропускная способность памяти ограничена, серверная часть ЦП Brook не превысит 2 Гфлопс. На практике это даже ниже, особенно для всего, кроме float4, который является единственным типом данных, который может быть ускорен с помощью SSE.
На ATI HD 2900 XT (ядро 740 МГц, память 1000 МГц) Brook может выполнять максимум 410 GFLOP через свой серверный модуль DirectX 9. OpenGL в настоящее время (из-за ограничений драйвера и компилятора Cg ) намного менее эффективен в качестве бэкэнда GPGPU на этом графическом процессоре, поэтому Brook может управлять только 210 гигафлопами при использовании OpenGL на этом графическом процессоре. На бумаге это выглядит примерно в двадцать раз быстрее, чем процессор, но, как только что объяснялось, это не так просто. В настоящее время графические процессоры имеют штрафы за доступ к разветвлению и чтению / записи, поэтому ожидайте разумного максимума в одну треть от пикового максимума в реальном коде - это по-прежнему оставляет карту ATI со скоростью около 125 GFLOP, что примерно в пять раз быстрее, чем Intel Core 2 Duo.
Однако это обесценивает важную часть передачи данных, подлежащих обработке, в и из графического процессора. С интерфейсом PCI Express 1.0 x8 память ATI HD 2900 XT может быть записана со скоростью около 730 Мбит / с и считана со скоростью около 311 Мбит / с, что значительно медленнее, чем обычная память ПК. Для больших наборов данных это может значительно снизить увеличение скорости использования графического процессора по сравнению с хорошо настроенной реализацией процессора. Конечно, поскольку графические процессоры становятся быстрее, чем процессоры, а интерфейс PCI Express совершенствуется, имеет смысл переложить большие объемы обработки на графические процессоры.
Приложения и игры, использующие BrookGPU
Смотрите также
Внешние ссылки
- Официальный сайт BrookGPU - сайт BrookGPU Стэнфордского университета
- Ссылка для скачивания пакета BrookGPU
- GPGPU Вычисление общего назначения с использованием графических процессоров, обычное использование BrookGPU.
- Документ и презентация «Brook для графических процессоров: потоковые вычисления на графическом оборудовании» для SIGGRAPH 2004, написанные Яном Баком и др.
- AMD Brook + Презентация
Рекомендации
- ^ Тардити, Дэвид; Пури, Сидд; Оглсби, Хосе (2006). «Ускоритель: использование параллелизма данных для программирования графических процессоров общего назначения». Новости компьютерной архитектуры ACM SIGARCH . 34 (5).
- ^ Че, Шуай; Бойер, Майкл; Мэн, Цзяюань; Tarjan, D .; Шеффер, Джереми У .; Скадрон, Кевин (2008). «Исследование производительности приложений общего назначения на графических процессорах с использованием CUDA». J. Параллельные и распределенные вычисления . 68 (10): 1370–1380.