Ваше местоположение в сети:
Рубрика:

Программирование на видеокартах

Разделы сайта:

С одной стороны, я уже писал на блоге про параллельное программирование, с другой - про параметры видеокарт, так что темы программирования на видеокарточказ уже касался. Тем не менее, мне кажется, что стоит поговорить об этом более детально.

Почему на видеокарточках?

Да данный момент развитие компьютеров столкнулось с определенными проблемами. Бурный в какой-то момент рост скорости процессоров приостановился. Виной, в первую очередь, служит банальный перегрев - если операции выполняются очень быстро, то процессор греется. И его невозможно достаточно эффективно охлаждать.

Поэтому очень популярным становится программирование паралельное, которое мы уже обсуждали ранее, когда у процессора есть несколько ядер, у компьютера - несколько процессоров, и все эти ядра могут работать более-менее независимо. Если программист может этим воспользоваться, то он задействует их все. Но и здесь есть свои пределы, слишком много ядер в один компьютер не нашпигуешь. А хочется больших скоростей!

Своеобразным решением являются суперкомпьютеры - множество компьютеров, работающих над одной задачей. Здесь, конечно, простор для увеличения количества ядер велик, но далеко не каждую задачу можно "разложить" на работу на суперкомпьютере. Ведь скорость обмена данными между узлами очень низка по сравнению со скоростью работы с оперативной памятью. И это становится узким местом во многих задачах.

Так что альтернативные решения для повышения производительности вычислений всегда востребованы, поэтому достаточно популярной темой на данный момент является программирование на видеокарточках.

Как на видеокарточках?
video coding

Да-да, на тех самых видеокартах, что изначально использовались лишь для вывода изображения на экран. В чем же сила этих устройств? А в том, что производители видеокарт давно уже пошли по пути отличному от производителей процессоров. Они стали наращивать не скорость индивидуальных процессоров, а их количество. Сами "процессоры" внутри видеокарты могут быть устроены очень просто и быть небыстрыми, но их может быть очень много. Почему это было сделано именно так? Да потому, что при создании изображения на экране можно просчитывать различные части экрана совершенно независимо, поэтому видеокарта и может содержать множество слабых процессоров.

Не следует, конечно, думать, что жизнь устроена просто, и вы сможете без труда овладеть программированием на видеокарточках, будучи знакомым с программированием параллельным. Дело в том, что "процессоры" внутри видеокарт устроены значительно проще, чем процессоры обычные. Вы не можете создать "нитки" (threads) вычисления, запустить из независимо выполняться. Работа с видеокартой устроена совершенно по-другому.

Грубо говоря, описать процесс можно следующим образом. Подгатавличается простейшая программа, например, складывающая два числа. Подгатавливается массив данных, каждый элемент которого представляет собой, в данном случае, пару чисел. Этот массив и эта программа записываются в память видеокарты. Затем дается команда, по которой видеокарта начинает выполнять эту программу независимым образом на разных точках массива. В итоге, на выходе мы получаем результат, в котором для каждого элемента массива указанные два числа были сложены друг с другом.

Как вы видите, это - совсем другая логика. Если "нитки" сравнивают с разбегающимся стадом баранов, то видекарты - с работой тысячи обезьян на калькуляторах, выполняющих одинаковые действия на различных начальных данных. Чтобы начать программировать таким образом, нужно совершенно перестроить свой мозг.

Встроенные видеокарты

Конечно, все это в первую очередь расчитано на использование видеокарт дискретных, отдельных. Однако, и на современных встроенных в процессоры Intel видеокарты HD Graphics можно заниматься программированием на видеокарточках с использованием OpenGL. Однако, я не берусь судить, насколько это эффективно. Здесь также есть и своя специфика, например, возможность включения и выключения технологии Intel Turbo Boost. Благодаря Turbo Boost частота Intel GPU может увеличиваться в два раза. Но только если это позволяет температура системы. А это происходит по понятным причинам только когда не сильно загружен основной процессор.

← Дополненная реальностьЧто такое компакт-диски? →
comments powered by Disqus