Дэвид Кирк призывает развивать параллелизм в программировании
Сайт eeTimes рассказывает о выступлении Дэвида Кирка (David Kirk), руководителя исследовательских работ компании NVIDIA, на конференции Hot Chips в Стэндфордском университете.
В своём выступлении Дэвид был пессимистичен в оценках нынешнего положения индустрии программирования, предрекая неизбежный кризис, который остановит развитие качества графики в играх, несмотря на непрерывное развитие GPU. Причина – отсутствие параллелизма в современных программных продуктах. "Если мы посмотрим на ситуацию с CPU общего назначения, то увидим, что системные архитекторы стремительно развивают многопоточный и многоядерный дизайн процессоров. Но мы не встретим параллельно работающих потоков в программах. Параллелизм, который мог быть реализован в алгоритмах, зачастую теряет значимость или полностью исчезает в процессе разработки программы." Кирк привёл пример из игровой индустрии: "Мы уже сталкивались с тем, что некоторые игры оказываются ограничены процессором. Мы можем осуществлять рендеринг изображения быстрее, чем CPU поставляет данные. Но когда разработчики игр пытаются использовать для исправления ситуации CPU с двумя ядрами, мы не чувствуем практически никакой отдачи от наличия второго ядра в процессоре. А если разработчики ещё и не понимают принципы взаимодействия между ядрами и кешем, то приложение на двухядерной машине работает даже медленнее, чем на одноядерной."
Для контраста ведущий исследователь NVIDIA привёл пример работы GPU, которые являются изначально параллельными устройствами, ввиду того что отдельные части изображения не зависят друг от друга, а значит могут обрабатываться параллельно. Программные технологии на GPU наоборот предназначены для сокрытия параллелизма от программиста. Кроме того, графические процессоры могут и дальше наращивать параллелизм, увеличивая свою производительность, в то время как масштабируемость центральных процессоров приближается к своему пределу. Выход из сложившейся ситуации Дэвид видит в развитии исследований параллельных языков, и внесении дисциплины программирования параллельных потоков в общий курс обучения программированию.
Совершенно очевидно, что в ближайшее время появятся программы и библиотеки, использующие многопоточность для всех вычислений с независимыми данными. Однако чтобы использовать эту технологию в разработке игр, от программистов потребуется больший опыт работы с параллельной архитектурой. На текущий момент параллельные вычисления успешно используются лишь в нескольких игровых продуктах.