БрукГПУ
![]() | Эту статью необходимо обновить . ( апрель 2021 г. ) |
Разработчик(и) | Стэнфордский университет |
---|---|
Стабильная версия | v0.5 Бета 1 / 2007 |
Репозиторий | |
Операционная система | Линукс , Винда |
Тип | Компилятор/время выполнения |
Лицензия | Лицензия BSD (части находятся под лицензией GPL ) |
Веб-сайт | http://graphics.stanford.edu/projects/brookgpu/ |
Язык программирования Brook и его реализация BrookGPU были ранними и влиятельными попытками обеспечить выполнение вычислений общего назначения на графических процессорах . [1] [2] Brook, разработанный графической группой Стэнфордского университета , представлял собой компилятор и реализацию языка потокового программирования во время выполнения , предназначенного для современных высокопараллельных графических процессоров , таких как те, которые используются на ATI или Nvidia видеокартах .
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.
Новые функции версии 0.5 включают значительно обновленный и более быстрый бэкэнд OpenGL , который использует объекты фреймбуфера вместо PBuffers и гармонизирует код со стандартными интерфейсами OpenGL вместо использования собственных расширений поставщиков. Была добавлена поддержка GLSL , которая переносит все функции (сложные ветвления и циклы), ранее поддерживаемые только DirectX 9, в OpenGL. В частности, это означает, что Brook теперь так же работоспособен в Linux, как и в Windows .
Другие улучшения в серии v0.5 включают использование нескольких серверных частей, благодаря чему разные потоки могут одновременно запускать разные программы Brook (таким образом максимизируя использование установки с несколькими графическими процессорами), а также поддержку SSE и OpenMP для серверной части ЦП (это позволяет почти максимально использовать современные процессоры).
Сравнение производительности [ править ]
Сравнение процессоров настольных ПК и графических процессоров похожее проблематично из-за алгоритмических и структурных различий.
Например, процессор Intel Core 2 Duo с тактовой частотой 2,66 ГГц может выполнять максимум 25 GFLOP (25 миллиардов операций с плавающей запятой одинарной точности в секунду) при оптимальном использовании SSE и потоковом доступе к памяти, чтобы предварительная выборка работала идеально. Однако традиционно (из-за ограничений длины шейдерных программ) большинство ядер GPGPU имеют тенденцию выполнять относительно небольшие объемы работы с большими объемами данных параллельно, поэтому большой проблемой при непосредственном выполнении алгоритмов GPGPU на настольных процессорах является значительно более низкая пропускная способность памяти, вообще говоря. ЦП проводит большую часть своего времени в ожидании оперативной памяти . Например, двухканальная оперативная память DDR2 PC2-6400 может иметь пропускную способность около 11 Гбит/с, что составляет максимум около 1,5 GFLOP, учитывая, что общая пропускная способность составляет 3 GFLOP, и необходимо как читать, так и записывать. В результате, если пропускная способность памяти ограничена, производительность процессора Брука не превысит 2 GFLOP. На практике оно даже ниже, особенно для всего, кроме float4, который является единственным типом данных, который может быть ускорен SSE.
На ATI HD 2900 XT (ядро 740 МГц, память 1000 МГц) Brook может выполнять максимум 410 GFLOP через серверную часть DirectX 9. OpenGL в настоящее время (из-за ограничений драйвера и компилятора Cg ) гораздо менее эффективен в качестве серверной части GPGPU на этом графическом процессоре, поэтому Брук может управлять только 210 GFLOP при использовании OpenGL на этом графическом процессоре. На бумаге это выглядит примерно в двадцать раз быстрее, чем процессор, но, как только что объяснялось, это не так просто. Графические процессоры в настоящее время имеют серьезные штрафы за доступ к ветвлениям и чтению/записи, поэтому ожидайте разумного максимума в одну треть от пикового максимума в реальном коде - это по-прежнему оставляет карту ATI со скоростью около 125 GFLOP, примерно в пять раз быстрее, чем Intel Core 2 Duo.
Однако это не учитывает важную часть передачи данных, подлежащих обработке, на графический процессор и обратно. Благодаря интерфейсу PCI Express 1.0 x8 память ATI HD 2900 XT может записываться со скоростью около 730 Мбит/с и читаться со скоростью около 311 Мбит/с, что значительно медленнее, чем обычная память ПК. Для больших наборов данных это может значительно снизить прирост скорости использования графического процессора по сравнению с хорошо настроенной реализацией процессора. Конечно, поскольку графические процессоры становятся быстрее, чем центральные процессоры, а интерфейс PCI Express улучшается, будет иметь больше смысла переносить большую часть обработки на графические процессоры.
Приложения и игры, использующие BrookGPU [ править ]
См. также [ править ]
Ссылки [ править ]
- ^ Тардити, Дэвид; Пури, Сидд; Оглсби, Хосе (2006). «Ускоритель: использование параллелизма данных для программирования графических процессоров общего назначения» (PDF) . Новости компьютерной архитектуры ACM SIGARCH . 34 (5). дои : 10.1145/1168919.1168898 .
- ^ Че, Шуай; Бойер, Майкл; Мэн, Цзяюань; Тарьян, Д.; Шиффер, Джереми В.; Скадрон, Кевин (2008). «Исследование производительности приложений общего назначения на графических процессорах с использованием CUDA». J. Параллельные и распределенные вычисления . 68 (10): 1370–1380. дои : 10.1016/j.jpdc.2008.05.014 .
Внешние ссылки [ править ]
- Официальный сайт Стэнфордского университета