Автор Тема: NVIDIA CUDA  (Прочитано 649 раз)

Оффлайн Delin

  • Автор
  • Бородатый админ
  • *****
  • Сообщений: 1957
  • Репутация: 95
  • At The Opera Tonight!
NVIDIA CUDA
« : 16 Апреля 2009, 00:23:43 »
Решил попробовать сию разработку в действии. Скачал пару небольших дистрибутивов (либы и пакет SDK с примерами, ~70мб), установил. Все это интегрируется в Visual Studio 2005/2008, правда в одном месте пришлось пошаманить с настройками студии. Сама структура проектов поначалу выглядит громоздко, но после недлительного вкуривания доков и примеров все становится более-менее понятно:
1. заготовка данных - работает на CPU.
2. копирование данных в память GPU.
3. непосредственный расчет на GPU.
4. копирование результатов из памяти GPU в ram.

о главном, о скорости - перемножение матриц 512*512 на cpu заняло 3,685s, на видеокарте - 0,391s (release, x64). впрочем, насколько я могу судить, код для gpu можно еще сильнее распараллелить - т.е. расчет будет быстрее. watcher'ы в gpu-коде недоступны. операции копирования занимают порядка 0,04 и более секунд, так что перемещать лучше все данные за раз - чтобы минимизировать потери времени.

Оффлайн Alex_K

  • Ученик
  • **
  • Сообщений: 68
  • Репутация: 26
    • www.koscheev.ru
Re: NVIDIA CUDA
« Ответ #1 : 16 Апреля 2009, 22:40:54 »
это, конечно, забавно. А CPU - сколько ядер? Если распараллить при помощи OpenMP на все ядра (>1)?

Оффлайн Delin

  • Автор
  • Бородатый админ
  • *****
  • Сообщений: 1957
  • Репутация: 95
  • At The Opera Tonight!
Re: NVIDIA CUDA
« Ответ #2 : 16 Апреля 2009, 23:23:47 »
cpu - одно, ручками могу и под два сделать. с OpenMP к сожалению не работал, ничего сказать не могу.

Оффлайн Alex_K

  • Ученик
  • **
  • Сообщений: 68
  • Репутация: 26
    • www.koscheev.ru
Re: NVIDIA CUDA
« Ответ #3 : 16 Апреля 2009, 23:38:47 »
ну, если ядро одно, то параллелить на процессор смысла нет.
OpenMP есть в Visual Studio, только его включить надо в настройках проекта.