xeno_by (xeno_by) wrote,
xeno_by
xeno_by

Category:

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, поэтому что-то в нем может быть неточным, а что-то тупо неправильным. Со временем гайд будет расширяться и дополняться. Замечания и дополнения по делу всяко приветствуются. Вопросы о непонятных местах приветствуются еще больше (разрешены анонимные каменты, такчт задать вопрос очень легко - а мне ответить будет только в радость)!

Классификация

На сегодняшний момент к видеокартам, поддерживающим CUDA, относятся: 1) десктопные карточки GeForce 8, GeForce 9, GeForce 1xx и GeForce 2xx, 2) их мобильные аналоги, 3) их профессиональные аналоги семейств Quadro и Tesla.

CUDA-совместимые видеокарты во многом похожи друг на друга. Во-первых, программная модель одинакова для всех таких устройств. Кроме того, с момента представления первого CUDA GPU и по сей день не менялись размеры шарной памяти (16 КБ) и кэшей на SM (8 КБ для констант и 8 КБ для текстур), а также константы хардвары (типо SM = 8 SP, варп = 32 треда и так далее).

Различия между видеокартами CUDA делятся на две категории - качественные и количественные. Качественные различия определяются параметром Compute Capability, который может принимать одно из четырех значений: 1.0, 1.1, 1.2 и 1.3 (см. ниже). Количественные различия - это: 1) количество SM, 2) частота, на которой они работают, 3) размер видеопамяти, 4) частота видеопамяти, 5) ширина шины видеопамяти (тут все изменяется в широких пределах: от кастратов с 1 SM до монстров с 4x30 SM, ну и так далее).

Касательно Compute Capability (детально описанного в CUDA Programming Guide 2.3 (Appendix A. Technical Specifications)) все гораздо проще, чем в теории. CUDA-видеокарты делятся на две категории - с GPU на ядре GT200 (CC 1.3) и все остальные (CC 1.0 и 1.1). Отличия между CC 1.3 и CC 1.0 следующие: 1) каждый SM имеет в два раза больше регистров (16384 вместо 8192), 2) каждый SM имеет на треть увеличенный максимум одновременно выполняющихся варпов (32 вместо 24), 3) нативно поддерживается double-precision FP (в девайсах более низкой cc double-precision эмулируется несколькими single-precision операциями), 4) поддерживаются атомарные операции над 32- и 64-битными словами, 5) условия на коалесцирование запросов к памяти сильно упрощаются. CC 1.1 от CC 1.0 отличается незначительно - всего лишь поддержкой атомарных операций над 32-битными словами в глобальной памяти.

State of the art

Гигантское семейство GPU CUDA (которому уже более трех лет) венчается ядром GT200 (внимание, маркетинг! не все видеокарты GeForce 2xx построены на ядре GT200!). На основе этого GPU и его обрезков собраны потребительские видеокарты GeForce GTX 260-295 и high-performance решения Tesla 10xx.

Линейка high-end видеокарт на ядре GT200 открывается десктопной карточкой GTX 285 (видеокарты GTX 260 и GTX 260 Core 216 являются ее обрезками - т.е. содержат несколько бракованных и поэтому отключенных SM) и ее HPC-клоном Tesla S1050. Дальше GPU уже не улучшаются, а размножаются - GTX 295 представляет собой два GTX 285 на одной плате, а Tesla S1070 содержит целых четыре GTX 285.

Полноценное ядро GT200 имеет 30 SM, соответствующих compute capability 1.3 (см. выше), которые работают на частоте 1.3-1.5 Ghz (частоты варьируются в зависимости от конкретной модели). Частоты, на которых работает память в рассматриваемых устройствах, очень сильно отличаются: у C1060/S1070 они на уровне 1.6 Ghz (x512 бит шина = 102 GB/s), у GeForce 285 - 2.3-2.5 Ghz (x512 бит шина = 147.2-160 GB/s), у GeForce 295 - 2.0 Ghz (x512 бит шина = 128 GB/s).
Tags: cuda
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments