27.11.2014 Views

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!