a2z
07.11.2009, 18:52
http://battlefox.ru/~a2z/other/nvidia_cuda_logo.jpg
NVIDIA CUDA™ — технология GPGPU, позволяющая программистам реализовывать на упрощённом языке программирования Си алгоритмы, выполнимые на графических процессорах ускорителей GeForce восьмого поколения и старше (GeForce 8 Series, GeForce 9 Series, GeForce 200 Series), Nvidia Quadro и Tesla компании Nvidia. Технология CUDA разработана компанией nVidia.
Немного истории
Устройства для превращения персональных компьютеров в маленькие суперкомпьютеры известны довольно давно. Ещё в 80-х годах прошлого века на рынке предлагались так называемые транспьютеры, которые вставлялись в распространенные тогда слоты расширения ISA. Первое время их производительность в соответствующих задачах впечатляла, но затем рост быстродействия универсальных процессоров ускорился, они усилили свои позиции в параллельных вычислениях, и смысла в транспьютерах не осталось. Хотя подобные устройства существуют и сейчас — это разнообразные специализированные ускорители. Но зачастую сфера их применения узка и особого распространения такие ускорители не получили.
Но в последнее время эстафета параллельных вычислений перешла к массовому рынку, так или иначе связанному с трёхмерными играми. Универсальные устройства с многоядерными процессорами для параллельных векторных вычислений, используемых в 3D-графике, достигают высокой пиковой производительности, которая универсальным процессорам не под силу. Конечно, максимальная скорость достигается лишь в ряде удобных задач и имеет некоторые ограничения, но такие устройства уже начали довольно широко применять в сферах, для которых они изначально и не предназначались. Отличным примером такого параллельного процессора является процессор Cell, разработанный альянсом Sony-Toshiba-IBM и применяемый в игровой приставке Sony PlayStation 3, а также и все современные видеокарты от лидеров рынка — компаний NVIDIA и AMD.
http://battlefox.ru/~a2z/other/cpu_vs_gpu_graph.jpg
График производительности GPU по сравнению с CPU.
Cell мы трогать не будем, хоть он и появился раньше и является универсальным процессором с дополнительными векторными возможностями, речь сегодня не о нём. Для 3D видеоускорителей ещё несколько лет назад появились первые технологии неграфических расчётов общего назначения GPGPU (General-Purpose computation on GPUs). Ведь современные видеочипы содержат сотни математических исполнительных блоков, и эта мощь может использоваться для значительного ускорения множества вычислительно интенсивных приложений. И нынешние поколения GPU обладают достаточно гибкой архитектурой, что вместе с высокоуровневыми языками программирования и программно-аппаратными архитектурами, раскрывает эти возможности и делает их значительно более доступными.
Принцип работы
Современный центральный процессор заточен под получение максимальной производительности при обработке целочисленных данных и данных с плавающей запятой, особо не заботясь при этом о параллельной обработке информации. В то же время архитектура видеокарты позволяет быстро и без проблем «распараллелить» обработку данных. С одной стороны, идет обсчет полигонов (за счет 3D-конвейера), с другой – пиксельная обработка текстур. Т.е. происходит «слаженная разбивка» нагрузки в ядре карты. Кроме того, работа памяти и видеопроцессора оптимальнее, чем связка «ОЗУ-кэш-процессор». В тот момент, когда единица данных в видеокарте начинает обрабатываться одним потоковым процессором GPU, другая единица параллельно загружается в другой, и, в принципе, легко можно достичь загруженности графического процессора, сравнимой с пропускной способностью шины, однако для этого загрузка конвейеров должна осуществляться единообразно, без всяких условных переходов и ветвлений. Центральный же процессор в силу своей универсальности требует для своих процессорных нужд кэш, заполненный информацией.
boRQr7mrWI8
На создание GPCPU разработчиков побудило появление достаточно быстрых и гибких шейдерных программ, которые способны исполнять современные видеочипы. Разработчики задумали сделать так, чтобы GPU рассчитывали не только изображение в 3D приложениях, но и применялись в других параллельных расчётах. В GPGPU для этого использовались графические API: OpenGL и Direct3D, когда данные к видеочипу передавались в виде текстур, а расчётные программы загружались в виде шейдеров. Недостатками такого метода является сравнительно высокая сложность программирования, низкая скорость обмена данными между CPU и GPU и некоторые другие ограничения.
Вычисления на GPU развивались и развиваются очень быстро. И в дальнейшем, два основных производителя видеочипов, NVIDIA и AMD, разработали и анонсировали соответствующие платформы под названием CUDA (Compute Unified Device Architecture) и CTM (Close To Metal или AMD Stream Computing), соответственно. В отличие от предыдущих моделей программирования GPU, эти были выполнены с учётом прямого доступа к аппаратным возможностям видеокарт. Платформы не совместимы между собой, CUDA — это расширение языка программирования C, а CTM — виртуальная машина, исполняющая ассемблерный код. Зато обе платформы ликвидировали некоторые из важных ограничений предыдущих моделей GPGPU, использующих традиционный графический конвейер и соответствующие интерфейсы Direct3D или OpenGL.
Конечно же, открытые стандарты, использующие OpenGL, кажутся наиболее портируемыми и универсальными, они позволяют использовать один и тот же код для видеочипов разных производителей. Но у таких методов есть масса недостатков, они значительно менее гибкие и не такие удобные в использовании. Кроме того, они не дают использовать специфические возможности определённых видеокарт, такие, как быстрая разделяемая (общая) память, присутствующая в современных вычислительных процессорах.
Именно поэтому компания NVIDIA выпустила платформу CUDA — C-подобный язык программирования со своим компилятором и библиотеками для вычислений на GPU. Конечно же, написание оптимального кода для видеочипов совсем не такое простое дело и эта задача нуждается в длительной ручной работе, но CUDA как раз и раскрывает все возможности и даёт программисту больший контроль над аппаратными возможностями GPU. Важно, что поддержка NVIDIA CUDA есть у чипов G8x, G9x и GT2xx, применяемых в видеокартах GeForce серий 8, 9 и 200, которые очень широко распространены. В настоящее время выпущена финальная версия CUDA 2.2, в которой появились некоторые новые возможности, например, поддержка расчётов с двойной точностью. CUDA доступна на 32-битных и 64-битных операционных системах Linux, Windows и MacOS X.
Перспективы
В мире уже установлены миллионы GPU с поддержкой CUDA, и тысячи программистов уже бесплатно пользуются инструментами CUDA для ускорения приложений – от кодирования видео и аудио до поисков нефти и газа, моделирования продуктов, вывода медицинских изображений и научных исследований. О преимуществах CUDA сказано не мало, но как всегда есть и ложечка дёгтя. Один из немногочисленных недостатков CUDA — слабая переносимость. Эта архитектура работает только на видеочипах этой компании, да ещё и не на всех, а начиная с серии GeForce 8 и 9 и соответствующих Quadro и Tesla. Да, таких решений в мире очень много, NVIDIA приводит цифру в 90 миллионов CUDA-совместимых видеочипов. Это просто отлично, но ведь конкуренты предлагают свои решения, отличные от CUDA. Так, у AMD есть Stream Computing, у Intel в будущем будет Ct.
Которая из технологий победит, станет распространённой и проживёт дольше остальных — покажет только время.
Вывод
Технология NVIDIA CUDA™ - это современная перспективная среда разработки на C, которая позволяет программистам и разработчикам писать программное обеспечение для решения сложных вычислительных задач за меньшее время благодаря многоядерной вычислительной мощности графических процессоров.
Официальный сайт: http://www.nvidia.ru/object/cuda_learn_ru.html | Форум (http://forums.nvidia.com/index.php?showforum=71)
Дополнительно:
NVIDIA CUDA™ (http://ru.wikipedia.org/wiki/CUDA) by Википедия
NVIDIA CUDA™ — неграфические вычисления на графических процессорах (http://www.ixbt.com/video3/cuda-1.shtml) by iXBT.com
CUDA мы катимся: технология NVIDIA CUDA™ (http://www.xakep.ru/post/47507/) by Xakep Online
NVIDIA CUDA™: вычисления на видеокарте или смерть CPU? (http://www.thg.ru/graphic/nvidia_cuda/index.html) by Tom's Hardware Guide Russia
Технология NVIDIA CUDA™ (http://www.iths.ru/?q=node/57) by Высшая школа Информационных Технологий
Введение в технологию NVIDIA CUDA™ (http://cgm.computergraphics.ru/issues/issue16/cuda) by СЖ "Компьютерная Графика и Мультимедиа"
Знакомство с NVIDIA CUDA™, параллельные вычисления с помощью GPU в CG (http://www.render.ru/books/show_book.php?book_id=840) by Render.ru
NVIDIA CUDA™ — технология GPGPU, позволяющая программистам реализовывать на упрощённом языке программирования Си алгоритмы, выполнимые на графических процессорах ускорителей GeForce восьмого поколения и старше (GeForce 8 Series, GeForce 9 Series, GeForce 200 Series), Nvidia Quadro и Tesla компании Nvidia. Технология CUDA разработана компанией nVidia.
Немного истории
Устройства для превращения персональных компьютеров в маленькие суперкомпьютеры известны довольно давно. Ещё в 80-х годах прошлого века на рынке предлагались так называемые транспьютеры, которые вставлялись в распространенные тогда слоты расширения ISA. Первое время их производительность в соответствующих задачах впечатляла, но затем рост быстродействия универсальных процессоров ускорился, они усилили свои позиции в параллельных вычислениях, и смысла в транспьютерах не осталось. Хотя подобные устройства существуют и сейчас — это разнообразные специализированные ускорители. Но зачастую сфера их применения узка и особого распространения такие ускорители не получили.
Но в последнее время эстафета параллельных вычислений перешла к массовому рынку, так или иначе связанному с трёхмерными играми. Универсальные устройства с многоядерными процессорами для параллельных векторных вычислений, используемых в 3D-графике, достигают высокой пиковой производительности, которая универсальным процессорам не под силу. Конечно, максимальная скорость достигается лишь в ряде удобных задач и имеет некоторые ограничения, но такие устройства уже начали довольно широко применять в сферах, для которых они изначально и не предназначались. Отличным примером такого параллельного процессора является процессор Cell, разработанный альянсом Sony-Toshiba-IBM и применяемый в игровой приставке Sony PlayStation 3, а также и все современные видеокарты от лидеров рынка — компаний NVIDIA и AMD.
http://battlefox.ru/~a2z/other/cpu_vs_gpu_graph.jpg
График производительности GPU по сравнению с CPU.
Cell мы трогать не будем, хоть он и появился раньше и является универсальным процессором с дополнительными векторными возможностями, речь сегодня не о нём. Для 3D видеоускорителей ещё несколько лет назад появились первые технологии неграфических расчётов общего назначения GPGPU (General-Purpose computation on GPUs). Ведь современные видеочипы содержат сотни математических исполнительных блоков, и эта мощь может использоваться для значительного ускорения множества вычислительно интенсивных приложений. И нынешние поколения GPU обладают достаточно гибкой архитектурой, что вместе с высокоуровневыми языками программирования и программно-аппаратными архитектурами, раскрывает эти возможности и делает их значительно более доступными.
Принцип работы
Современный центральный процессор заточен под получение максимальной производительности при обработке целочисленных данных и данных с плавающей запятой, особо не заботясь при этом о параллельной обработке информации. В то же время архитектура видеокарты позволяет быстро и без проблем «распараллелить» обработку данных. С одной стороны, идет обсчет полигонов (за счет 3D-конвейера), с другой – пиксельная обработка текстур. Т.е. происходит «слаженная разбивка» нагрузки в ядре карты. Кроме того, работа памяти и видеопроцессора оптимальнее, чем связка «ОЗУ-кэш-процессор». В тот момент, когда единица данных в видеокарте начинает обрабатываться одним потоковым процессором GPU, другая единица параллельно загружается в другой, и, в принципе, легко можно достичь загруженности графического процессора, сравнимой с пропускной способностью шины, однако для этого загрузка конвейеров должна осуществляться единообразно, без всяких условных переходов и ветвлений. Центральный же процессор в силу своей универсальности требует для своих процессорных нужд кэш, заполненный информацией.
boRQr7mrWI8
На создание GPCPU разработчиков побудило появление достаточно быстрых и гибких шейдерных программ, которые способны исполнять современные видеочипы. Разработчики задумали сделать так, чтобы GPU рассчитывали не только изображение в 3D приложениях, но и применялись в других параллельных расчётах. В GPGPU для этого использовались графические API: OpenGL и Direct3D, когда данные к видеочипу передавались в виде текстур, а расчётные программы загружались в виде шейдеров. Недостатками такого метода является сравнительно высокая сложность программирования, низкая скорость обмена данными между CPU и GPU и некоторые другие ограничения.
Вычисления на GPU развивались и развиваются очень быстро. И в дальнейшем, два основных производителя видеочипов, NVIDIA и AMD, разработали и анонсировали соответствующие платформы под названием CUDA (Compute Unified Device Architecture) и CTM (Close To Metal или AMD Stream Computing), соответственно. В отличие от предыдущих моделей программирования GPU, эти были выполнены с учётом прямого доступа к аппаратным возможностям видеокарт. Платформы не совместимы между собой, CUDA — это расширение языка программирования C, а CTM — виртуальная машина, исполняющая ассемблерный код. Зато обе платформы ликвидировали некоторые из важных ограничений предыдущих моделей GPGPU, использующих традиционный графический конвейер и соответствующие интерфейсы Direct3D или OpenGL.
Конечно же, открытые стандарты, использующие OpenGL, кажутся наиболее портируемыми и универсальными, они позволяют использовать один и тот же код для видеочипов разных производителей. Но у таких методов есть масса недостатков, они значительно менее гибкие и не такие удобные в использовании. Кроме того, они не дают использовать специфические возможности определённых видеокарт, такие, как быстрая разделяемая (общая) память, присутствующая в современных вычислительных процессорах.
Именно поэтому компания NVIDIA выпустила платформу CUDA — C-подобный язык программирования со своим компилятором и библиотеками для вычислений на GPU. Конечно же, написание оптимального кода для видеочипов совсем не такое простое дело и эта задача нуждается в длительной ручной работе, но CUDA как раз и раскрывает все возможности и даёт программисту больший контроль над аппаратными возможностями GPU. Важно, что поддержка NVIDIA CUDA есть у чипов G8x, G9x и GT2xx, применяемых в видеокартах GeForce серий 8, 9 и 200, которые очень широко распространены. В настоящее время выпущена финальная версия CUDA 2.2, в которой появились некоторые новые возможности, например, поддержка расчётов с двойной точностью. CUDA доступна на 32-битных и 64-битных операционных системах Linux, Windows и MacOS X.
Перспективы
В мире уже установлены миллионы GPU с поддержкой CUDA, и тысячи программистов уже бесплатно пользуются инструментами CUDA для ускорения приложений – от кодирования видео и аудио до поисков нефти и газа, моделирования продуктов, вывода медицинских изображений и научных исследований. О преимуществах CUDA сказано не мало, но как всегда есть и ложечка дёгтя. Один из немногочисленных недостатков CUDA — слабая переносимость. Эта архитектура работает только на видеочипах этой компании, да ещё и не на всех, а начиная с серии GeForce 8 и 9 и соответствующих Quadro и Tesla. Да, таких решений в мире очень много, NVIDIA приводит цифру в 90 миллионов CUDA-совместимых видеочипов. Это просто отлично, но ведь конкуренты предлагают свои решения, отличные от CUDA. Так, у AMD есть Stream Computing, у Intel в будущем будет Ct.
Которая из технологий победит, станет распространённой и проживёт дольше остальных — покажет только время.
Вывод
Технология NVIDIA CUDA™ - это современная перспективная среда разработки на C, которая позволяет программистам и разработчикам писать программное обеспечение для решения сложных вычислительных задач за меньшее время благодаря многоядерной вычислительной мощности графических процессоров.
Официальный сайт: http://www.nvidia.ru/object/cuda_learn_ru.html | Форум (http://forums.nvidia.com/index.php?showforum=71)
Дополнительно:
NVIDIA CUDA™ (http://ru.wikipedia.org/wiki/CUDA) by Википедия
NVIDIA CUDA™ — неграфические вычисления на графических процессорах (http://www.ixbt.com/video3/cuda-1.shtml) by iXBT.com
CUDA мы катимся: технология NVIDIA CUDA™ (http://www.xakep.ru/post/47507/) by Xakep Online
NVIDIA CUDA™: вычисления на видеокарте или смерть CPU? (http://www.thg.ru/graphic/nvidia_cuda/index.html) by Tom's Hardware Guide Russia
Технология NVIDIA CUDA™ (http://www.iths.ru/?q=node/57) by Высшая школа Информационных Технологий
Введение в технологию NVIDIA CUDA™ (http://cgm.computergraphics.ru/issues/issue16/cuda) by СЖ "Компьютерная Графика и Мультимедиа"
Знакомство с NVIDIA CUDA™, параллельные вычисления с помощью GPU в CG (http://www.render.ru/books/show_book.php?book_id=840) by Render.ru