xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Category:

Зачем нужны GPU? Зачем нужна CUDA?

Этот пост логически принадлежит гайду по CUDA, но из-за ограничений ЖЖ на максимальный размер поста я вынужден был разбить гайд на несколько частей: 1) Зачем нужны GPU? Зачем нужна CUDA? (сейчас вы читаете эту часть), 2) Программная модель CUDA, 3) Хардварная реализация CUDA, 4) CUDA-совместимые видеокарты.

Disclaimer.
  1. Здесь будут затронуты лишь архитектура и спецификации устройств, имеющих compute capability 1.0-1.3, а именно: 1) десктопных карточек GeForce 8, GeForce 9, GeForce 1xx и GeForce 2xx, 2) их мобильных аналогов, 3) их профессиональных или, как сейчас модно выражаться, HPC аналогов семейств Quadro и Tesla. Более подробно читаем в CUDA Programming Guide 2.3 (Appendix A. Technical Specifications).
  2. Соответственно, инфа в этом гайде неприменима к: 1) видеокартам GeForce 7 и ниже (у них кардинально иная микроархитектура), 2) видеокартам ATI/AMD (несмотря на сходства высокоуровневой модели программирования, на низком уровне эти GPU очень сильно отличаются от решений NVIDIA), 3) видеокартам GeForce 300 и Tesla 2xxx (они построены на несколько отличной архитектуре, известной под кодовым названием Fermi; о ней поговорим как-нибудь в другой раз).
  3. В этом посте будет очень сжатый саммари (минимум воды и ноль картинго), поэтому для более мягкого погружения в архитектуру CUDA рекомендую ознакомиться с тремя презентациями на эту тему: общая инфа про архитектуре GPU, описание CUDA - много топиков сразу, но, на удивление, с хорошей детализацией, оптимизация алгоритмов для CUDA - там все последовательно, с необходимой для фтыкания с нуля избыточностью информации и с пачкой картинго. Не стоит забывать и про референсные документы, но они будут потяжелее для восприятия: CUDA Programming Guide 2.3, Best Practices - CUDA 2.3, CUDA PTX ISA 1.4.
  4. Здесь не будет информации о результатах на реальных задачах, ибо они индивидуальны для каждого алгоритма.
  5. Наконец, этот гайд - work in progress, поэтому что-то в нем может быть неточным, а что-то тупо неправильным. Со временем гайд будет расширяться и дополняться. Замечания и дополнения по делу всяко приветствуются. Вопросы о непонятных местах приветствуются еще больше (разрешены анонимные каменты, такчт задать вопрос очень легко - а мне ответить будет только в радость)!

Зачем нужны GPU? Зачем нужна CUDA?

На сегодняшний день графические процессоры (GPU) представляют собой самое яркое воплощение архитектуры SIMD. Их ALU многочисленны и быстры (см. сравнение пиковой single-precision floating point производительности CPU и GPU NVIDIA (2003-2008й годы)), их память обладает впечатляющей пропускной способностью (см. сравнение пропускной способности DRAM CPU и GPU NVIDIA (2003-2007й годы)), а темпы роста производительности являются самыми значительными в индустрии (сравните уклон двух приведенных графиков для CPU и GPU).

Несмотря на провоцирующую букву G (graphical) в названии, GPU хорошо подходят не только для расчета и отрисовки графики, но и для выполнения многих (но не всех!) general-purpose вычислительных задач (отсюда и название области исследований - GPGPU). Производительность GPU на выполнении подходящих алгоритмов в десятки и сотни раз превосходит производительность современных CPU (примеры ускорения алгоритмов на GPU NVIDIA можно посмотреть на страничке CUDA Zone - там еще можно поиграться с чекбоксами в категории "Filter by Application Type").

Впечатляющая вычислительная мощь GPU достигается за счет ограничений программной модели и неудобства программирования. Первую из этих проблем устранить невозможно, ибо это фундаментальный trade-off в проектировании железа - та цена, которую надо платить за непревзойденную производительность (больше на эту тему можно прочитать вот тут). Вторую проблему призвана устранить CUDA, отходя от канонического подхода к выражению параллелизма по данными при помощи векторных инструкций (как, например, сделано в SSE) и предоставляя более удобную модель программирования массово параллельных (massively-parallel) SIMD-устройств (подход CUDA концептуально не оригинален и во многом похож на шейдерные языки HLSL/GLSL, но зато предоставляет существенное расширение программной модели).
Tags: cuda
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments