NVidia CUDA

CUDA5

Отсюда (может быть туда без регистрации не пускают, точно не знаю, но регистрация быстрая):
The latest version of NVIDIA Nsight Eclipse Edition with support for CUDA C/C++ is available with the CUDA 5 Preview Toolkit and is supported on MAC and Linux platforms.
Что какбэ говорит нам, что сегодня (по Мск - завтра) не только CUDA5 анонсируют, но и почти сразу пощупать можно будет.

Пеар и моркетинг

Пресс-релиз от NVidia, фанфары:

NVIDIA Corporation, the inventor of the GPU, today announced the release of its OpenCL driver and software development kit (SDK) to developers participating in its OpenCL Early Access Program.
....Developers can apply to become a GPU Computing Registered Developer at: www.nvidia.com/opencl

Ну ладно, иду и apply, мне несложно.

Заполнил форму и думаю, что надо заглянуть в уголок CUDA-девелопера (только для бе.. туда нужно тоже через Application, я больше двух лет назад вписался), вдруг там что новое.

Ага, есть новое:

Looking for OpenCL drivers?
You are in the right place. Registered developers with access to this web site will receive an email notification as soon as our Beta drivers are ready.

Маркетинг отстрелялся, а осадок у меня остался.....

А в OpenCL мне, помимо потенциальной многоплатформенности, люба трансляция из исходников на лету, у меня столько идей....

NVidia GTX280: бенчмарки с плавающей точкой

gtx280.jpg Каждые полгода мы с друзьями я бенчмаркаю вычисления на видеокартах. В этот раз изучалась NVidia GTX280.

SGEMM/DGEMM на видеокарте и CPU, серия 7: NVidia GTX280
В чипе NVidia G200 появились операции с двойной точностью. Их производительность не феноменальна, но даже с учетом ввода-вывода данных в карту GTX280 обгоняет 4-ядерный 3-гигагерцовый Penryn. Если же рассматривать только скорость вычислений (что актуально, если задача позволяет спрятать затраты на ввод-вывод), то на двойной точности видеокарта быстрее CPU в 1.8 раза.
На одинарной точности разрыв видеокарты и CPU вырос: GTX280 обгоняет Core2Quad впятеро.

Понятно, что Core i7 разницу несколько сократит, но по тем бенчмаркам с плавающей точкой, что я видел (а видел я пока только Linpack, причем не факт что в оптимальном для i7 виде), рост в производительности i7 - процентов 20.

Всякие соображения про масштабируемость решения - в самой статье.

gtx280.jpg Каждые полгода мы с друзьями я бенчмаркаю вычисления на видеокартах. В этот раз изучалась NVidia GTX280.

SGEMM/DGEMM на видеокарте и CPU, серия 7: NVidia GTX280
В чипе NVidia G200 появились операции с двойной точностью. Их производительность не феноменальна, но даже с учетом ввода-вывода данных в карту GTX280 обгоняет 4-ядерный 3-гигагерцовый Penryn. Если же рассматривать только скорость вычислений (что актуально, если задача позволяет спрятать затраты на ввод-вывод), то на двойной точности видеокарта быстрее CPU в 1.8 раза.
На одинарной точности разрыв видеокарты и CPU вырос: GTX280 обгоняет Core2Quad впятеро.

Понятно, что Core i7 разницу несколько сократит, но по тем бенчмаркам с плавающей точкой, что я видел (а видел я пока только Linpack, причем не факт что в оптимальном для i7 виде), рост в производительности i7 - процентов 20.

Всякие соображения про масштабируемость решения - в самой статье.

Теоретический взгляд на GTX 280

закрутившись, пропустил анонс новой видеокарты от NVidia. Из интересного мне - может считать с двойной точностью. Но что-то не очень быстро. Мои мысли про это - на GPGPU.ru

NVidia GTX 280, Tesla T10P

CUDA: конкурс разработчиков

Совершенно случайно узнал, но не могу пройти мимо не анонсировав.

NVidia (совместно с iXBT, как я понял) проводит конкурс программ для CUDA, как положено с призами.

Конкурс проводится среди разработчиков из России и СНГ, а значит шансы выиграть достаточно высоки (ибо потенциальных участников мало).

Увы, но научные программы на конкурс не допускаются, поэтому расчетчики, желающие выиграть ноутбук или Quadro 3700, должны срочно заняться чем-то полезным.

Вообще говоря, до крайнего срока подачи работ еще 2.5 месяца, этого срока вполне достаточно, чтобы освоиться с инструментарием и перенести на GPU что-то полезное, от обработки изображений до подбора паролей.

CUDA 2.0 (beta)

Не прислав мне никакого уведомления (хотя раньше присылали), NVidia выпустила CUDA 2.0 beta.

Вообще, и анонс в форуме довольно куцый, складывается впечатление, что по политическим причинам попросили выкатить то, что есть прямо сейчас.

Из важного

  • Поддержка Vista (32 и 64 бита);
  • Нет поддержки GeForce 9800GTX (вышедшей на пару недель раньше этой беты), что довольно странно.
  • С двойной точностью какая-то непонятная совсем история:
    1. В CuBLAS она заявлена в документации, символы в библиотеке имеются (собирать еще ничего не пробовал).
    2. В документации (programming guide) слово double встречается 8 раз (на 99 страниц текста), что как-то безобразно мало.
    3. Времена вычислений для double в соответствующей секции не описаны (но я подозреваю, что они другие, чем у float).
    4. Таблица с описанием double-функций (на которую есть указание в тексте) - отсутствует.
    Другими словами, работы ведутся и довольно скоро все может появиться.
Да, dgemm я, естественно, в ближайшие дни попробую опробовать. Интересно же.

CUDA для Mac

Вышла бета версия NVidia CUDA for Mac OS X. На удивление, сразу в публичный доступ, через девелоперский сайт прогонять не стали.

Естественно, требует Мака с видеокартой NVidia 8xxx. Менее естественно, но требует Leopard 10.5.2 и установленного Leopard Graphic Update. Так как все это у меня было, я слегка поигрался.

Выводы:

  • Все примеры вроде работают.
  • 8600M - довольно медленная карта, разница в скорости в сравнении с 8800GTX от двух до восьми раз, чем лучше сделано приложение, тем больше разница. И если простые потоковые вычисления очевидно имеет смысл тащить на видеокарту, то с чем-то более сложным уже не факт. Например, пример historgram256 работает на CPU быстрее, чем на видеокарте (790Mb/sec против 850. 8800GTX считает ту же гистограмму со скоростью 5.4Gb/sec).
  • 128 мегабайт видеопамяти - это очень мало. Для тех же примеров с гистограммами пришлось размер данных уменьшать со 100 мегабайт до 20. Если вспомнить, что одна из идей была - перенести процессинг графики на видео, а 20-мегапиксельный файл - это 80 мегабайт, то становится немного грустно.

Исходники CuBLAS/CuFFT

Программирующим на CUDA может быть интересно: NVidia начала раздавать исходники библиотек CUBLAS/CUFFT.

Я, правда, не очень понимаю статус этого дела:

  • С одной стороны, все выложено на девелоперском сайте, куда нужна регистрация (и говорят, что стоит большая очередь желающих оной регистрации, хотя меня в прошлом году зарегистрировали за один день).
  • С другой стороны, в девелоперской рассылке пришли ссылки на незапароленый сайт, бери кто хочет.
Посему, ссылки не публикую, если кому-то нужно и нет терпения ждать (со временем все попадает в полностью открытый доступ, всегда так было) - пишите лично.

А вот что точно открыто всем желающим, так это визуальный профайлер (beta) для той же CUDA. Пока не смотрел, руки не дошли.

CUDA в массы - 2

Я протормозил, а 169-я версия драйверов от NVidia вышла из беты еще 19 декабря. nvcuda.dll в наличии.

Свершилось, теперь вполне можно выпускать реальные приложения для end-users, а в требованиях спокойно писать "Windows XP, Geforce 8xxx, официальные драйвера 169.+".

Кто бы глянул, есть ли nvcuda.dll в комплекте драйверов для Vista.....

NVidia CUDA 1.1 released

Вышла NVidia CUDA 1.1

В сравнении с бета-версией, больших изменений не видно, но все вкусности, которые были доступны только партнерам с партнерского сайта, теперь доступны всем.

Впрочем, общий драйвер, который для всех пользователей, но с поддержкой CUDA, все еще в бете, поэтому распространять собственный софт с CUDA все еще неудобно. Но ждать, по всей видимости, недолго.

Из интересных проектов с CUDA увидел два:

  • Texture Tools от Гугла, которые обещают офигенно быструю texture compression, аж в 12.5 раз быстрее. Гейм-девелоперам будет приятно.
  • PyStream - Python interface to CUDA. Жизнь там пока вялая, но идея интересная.

CUDA в массы!

Анонсирована NVidia CUDA 1.1 (beta).

Несмотря на некруглый номер версии, это революция:

  • CUDA-функциональность теперь будет в обычном драйвере;
  • Необходимые DLL-s из SDK можно редистрибутировать вместе с приложением;

По сути, это означает, что из тестовой системы оно стало боевой: в требованиях к программе можно писать просто NVidia 8x00 и минимальную версию (обычных!) драйверов и у любого пользователя оно будет работать.

Вообще, анонс довольно интересный и требует подробного комментирования.

NVidia G92: совсем не то, что хотелось

Как многие уже знают, сегодня Nvidia анонсировала видеокарту GeForce 8800GT на новом чипсете G92.

То что анонсировано, сильно отличается от того, что прогнозировали весной, никакого терафлопа нету, новый чипсет медленнее и предыдущей топовой модели 8800Ultra и следующей за ней 8800GTX.

Умножение матриц, серия 5: вычисления на GPU (2)

Почему переделываем тесты?

Предыдущая моя статья на эту тему была написана в феврале 2007 года, сразу после выхода первой публичной бета-версии CUDA Toolkit/CUDA SDK. Представители NVidia предупреждали, что в бета-версии производительность не является оптимальной, к релизу она будет улучшена.

За прошедшие полгода, пока я занимался совсем другими вещами, были выпущены релизы:

  • NVidia CUDA: SDK и библиотеки CUBLAS/CUFFT v1.0;
  • NVidia CUDA Display Driver 162.xx (драйвер, собственно, транслирует псевдокод в реальные программы GPU);
  • RapidMind Platform версий 2.0.0, а затем и 2.0.1.

Интересно посмотреть, стала ли производительность лучше.

О пирамидальном сложении на параллельной архитектуре

На параллельных архитектурах часто приходится делать операцию reduce (складывать и умножать вектора, считать среднее и так далее). В отличие от однопоточной конструкции, где все тривиально, параллельная reduce разбивается на два этапа: сначала мы всеми исполняющими юнитами обрабатываем куски данных, а потом должны сложить (усреднить, поделить) результаты уже меньшим числом процессоров.

Для второго шага reduce обычно используется пирамидальная схема: сначала в N/2 потоков сложим N результатов попарно, затем сложим N/2 в N/4 и так далее. Число итераций равно, очевидно, log2N.

Возникает вопрос, «сколько данных складывать на каждой итерации?» Ведь можно складывать в N/4-N/16-N/256 кучек, можно по 1/8-64-512 и так далее. Из общих соображений, складывать по несколько лучше чем по два. Конечно, потоков получается меньше, но меньше и оверхед на создание-завершение потока.

Программирование NVidia 8800: вести с веба

В University of Illinois at Urbana, куда я чуть было не уехал заниматься геологией 15 лет назад, в настоящее время читается курс ECE 498 AL : Programming Massively Parallel Microprocessors.

Опуская обычные охи "ну почему этому не учат на ВМК" - все в наших руках и я думаю, что через пару лет такие курсы будут и у нас, тема вкусная - хочу обратить внимание на слайды и транскрипты лекций, доступные вот тут. Читают приглашенные лекторы из NVidia, поэтому основное внимание уделено, сюрприз, NVidia 8800. Курс включает в себя лабы, которые сделаны очень интересно: есть готовая рыба, делающая подготовительную работу (I/O, печать результаты) и студент должен только написать несколько десятков-сотен строк изучаемой функциональности. Что, конечно, экономит кучу непроизводительного времени (смотреть тут)

Я успел посмотреть не все, из того что посмотрел - многое нравится, а многое не нравится:
Не нравится то, что танцы идут от предыдущего поколения видеокарт. Если говорить о программировании вообще (а все примеры - про это), а не про видеоигры, то надо забывать про шейдеры и текстурные буферы. Ведь студентов учат, которые, я надеюсь, всего этого ужаса не нюхали.

Нравится, как практику, подробный разбор аппаратуры. Вылезает множество подробностей, которые нигде не опубликованы.

Вот о подробностях - ниже.

NVidia 8800GTX: скорость чтения текстур

В предыдущей части мы рассматривали чтение из глобальной памяти Geforce 8800 напрямую ("как из массива C"). При этом отсутствует кэширование, но при оптимальной схеме доступа получается (согласно указаниям NVidia) наибольшая производительность.

В то же время, скорость доступа при неоптимальном паттерне очень маленькая. Для решения этой проблемы (помимо оптимизации паттерна) NVidia CUDA предлагает доступ к памяти как к текстуре. При этом работает двумерное кэширование (оптимизированное под локальный доступ), пиковые скорости должны получаться меньше, а наихудшие варианты - наоборот лучше.

Все это, как обычно, нуждается в изучении.

NVidia 8800GTX: пропускная способность памяти (при использовании CUDA)

После чтения руководства по NVidia CUDA, остается ощущение сложности модели программирования: треды, блоки тредов, warp-ы, иерархическая память. Непонятно, какие параметры вычислительной задачи оптимальны и какие у них вообще допустимые значения. Само руководство точных рекомендаций не дает, дает лишь приблизительные.

Из общих соображений, понятно что самая медленная часть суперкомпьютера - память. С одной стороны, теоретическая пропускная способность (bandwidth) составляет 900MHz * 384 бита * 2 (DDR) = 86.4 GB/sec. С другой стороны, раздел 6.1.1.3 руководства говорит о 200-300 циклах memory latency (при, по всей видимости,случайном доступе).

К счастью, проблема легко изучается: если взять достаточно много данных (скажем, полгигабайта) и, например, сложить все 4-байтовые значения (как float), то основные затраты времени будут именно на чтение из памяти, а всей прочей арифметикой можно пренебречь (или подсчитать ее отдельно).

Читая веб и блоги: CUDA и прочее программирование на NVidia 8800

На удивление мало жизни происходит по запросу 'NVidia CUDA' в поиске по блогам и новостям. Что у Яндекса, что у Google. Мне это сильно удивительно - штука многообещающая, первая версия SDK датирована ноябрем (появилась примерно 1-го декабря), публичный SDK появился практически месяц назад, а большинство упоминаний в духе "вот вышло", в крайнем случае "читал доку". Таких текстов - навалом, маркетинг NVidia работает. Но скучно.

Помимо форумов NVidia, где заводится по 5-6 новых топиков в день, интересных публикаций немного.

Для начала: Beyond3D опубликовал большой текст про CUDA. Более подробный, чем все что я видел до сих пор (ну, кроме собственно документации).

NVidia CUDA: синхронизация и shared memory

Экспериментально выяснилось, что содержимое shared memory не сохраняется между запусками кода на G80. Всякий раз оно инициализировано, причем значения разные, то 10 (float), то 125.

Плакала идея синхронизации между мультипроцессорами путем завершения kernel. Нет, синхронизироваться можно, конечно, но если хочется сохранить результат, то надо писать в глобальную память.

Читая форумы: NVidia 8800GTX гигафлопсы, консистентность памяти и прочие тараканы

Третий день читаю форумы про NVidia CUDA и радуюсь сырости технологии.

  • Для начала, объявленные 520 GFLOP/s оказались обычным маркетингом The 520 GFLOPS number quoted in the technical brief includes some graphics-specific operations that are not directly accessible from CUDA. С точки зрения вычислений, гигафлопсов там 345 (считая Multiply-Add за две операции). Тоже неплохо. В реальности будет разика в два поменьше, но тоже ничего.
    Для сравнения, гипотетический (пока) 3Ghz 4-ядерный Core2Duo умеет 8 операций на такт * 4 ядра * 3Ghz = 96 GFLOP/s, а получить удастся процентов 70 от этого.
  • Отсутствие атомарных операций сильно усложняет жизнь. Предлагается в цикле писать значение в global memory, до тех пор пока не убедишься в успехе.
  • На текущий момент все вызовы - блокирующие. Т.е. нет возможности
    • Запустить счет и одновременно заливать/выливать данные для следующего/предыдущего счета.
    • Использовать две (и более) карт
    Обещают починить.
  • The performance gain you'll get by using CUDA over the graphics API largely depends on how much your application can take advantage of the shared memory. В-общем, идея понятная, но полностью противоречит всей прошлой истории GPGPU. Может оно и хорошо

Pages

Subscribe to NVidia CUDA