ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
pc_zone<br />
ГЛЕБ ПОЛИКАРПОВ<br />
<strong>CUDA</strong><br />
КАТИТСЯ МИР?<br />
ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ С ИСПОЛЬЗОВАНИЕМ<br />
ВИДЕОКАРТЫ<br />
С тех пор, как на графических процессорах стали доступны неграфические<br />
вычисления, многое изменилось. Известен не один пример<br />
того, как кластер из нескольких машин с мощными видеокартами мог<br />
поспорить с бешено дорогими суперкомпьютерами. За счет чего получается<br />
такой прирост производительности и так ли все просто на<br />
самом деле?<br />
О возможности задействовать процессор<br />
видеокарты (GPU) для неграфических<br />
вычислений говорили давно. Впервые<br />
архитектура <strong>CUDA</strong> (Compute Unified Device<br />
Architecture) появилась в феврале 2007<br />
года, предоставив программистам возможность<br />
использовать технологию GPGPU<br />
(General-Purpose computing on Graphics<br />
Processing Units), благодаря которой на<br />
привычных языках высокого уровня (прежде<br />
всего — Си) можно реализовывать<br />
алгоритмы, которые выполняются на графических<br />
ускорителях GeForce восьмого поколения<br />
и старше. Видеоадаптер с поддержкой<br />
<strong>CUDA</strong> становится мощной программируемой<br />
архитектурой, подобно сегодняшим<br />
центральным процессорам.<br />
<strong>CUDA</strong> НА ПАЛЬЦАХ<br />
Бонусом за использование GPU стала<br />
появившаяся у разработчиков и невиданная<br />
досели степень параллелизма: возможность<br />
запустить процесс в десятках и<br />
сотнях тысяч потоков!<br />
Справедливости ради стоит сказать, что<br />
такие потоки достаточно сильно отличаются<br />
от потоков CPU, но <strong>CUDA</strong> всеми силами<br />
пытается скрыть от разработчика сложность<br />
их использования. Но несмотря на<br />
относительную простоту внедрения, взять<br />
и увеличить производительность любого<br />
приложения в N раз не выйдет. Благодаря<br />
<strong>CUDA</strong> возможно оптимизировать лишь ту<br />
частью приложения, которую можно распараллелить,<br />
а это, увы, далеко не всегда<br />
очевидная задача.<br />
Давай разберемся, в чем отличается основной<br />
процессор системы (CPU) и процессор<br />
видеокарты? Важно понимать, что CPU<br />
изначально приспособлен для решения<br />
задач общего плана и работает с произвольно<br />
адресуемой памятью. Программы на<br />
CPU могут обращаться напрямую к любым<br />
ячейкам линейной и однородной памяти.<br />
Сравни это с GPU, где используется сразу<br />
пять видов пямяти. Но и тут <strong>CUDA</strong> делает<br />
все, чтобы помочь программисту, позволяя<br />
процессам в рамках одного блока работать<br />
с общей памятью.<br />
Извечная проблема большинства вычислительных<br />
систем заключается в том, что<br />
память работает медленнее процессора.<br />
Чтобы нивелировать это недостаток, производители<br />
CPU используют кэш-память,<br />
работающую на частоте процессора. Таким<br />
образом, удается сэкономить время при<br />
обращении к наиболее часто используемым<br />
данным. На современных графических процессорах<br />
также есть система кеша, но она<br />
не такая мощная, как на CPU. Поэтому на<br />
GPU медленные обращения к памяти скрывают,<br />
используя параллельные вычисления.<br />
Пока одни задачи ждут данных, работают<br />
другие, готовые к вычислениям. Это один<br />
из основных принципов <strong>CUDA</strong>, позволяющих<br />
сильно поднять производительность<br />
системы в целом.<br />
Вычислительная архитектура <strong>CUDA</strong> основана<br />
на концепции—одна команда на множество<br />
данных (Single Instruction Multiple<br />
Data, SIMD) и понятии мультипроцессора.<br />
Концепция SIMD подразумевает, что одна<br />
инструкция позволяет одновременно обработать<br />
множество данных. Мультипроцессор<br />
— это многоядерный SIMD-процессор,<br />
позволяющий в каждый определенный<br />
момент времени выполнять на всех своих<br />
ядрах только одну инструкцию.<br />
Важно понимать, что использовать мощности<br />
графического процессора уместно<br />
далеко не всегда. GPU предназначен для<br />
вычислений с большим параллелизмом<br />
и интенсивной арифметикой. Это объясняется<br />
тем, что у него гораздо большее<br />
число транзисторов отведено на обработку<br />
данных, а не на управление исполнением<br />
(flow control). Поэтому GPU демонстрируют<br />
хорошие результаты в параллельной<br />
обработке данных, когда с помощью одной<br />
и той же последовательности действий<br />
обрабатывается большой объем данных.<br />
Именно по этой причине всю мощь от<br />
использования <strong>CUDA</strong> можно ощутить, когда<br />
028 XÀÊÅÐ 07 /127/ 09