Метки

, , , ,

Использование обоих типов распараллеливания, в принципе, возможно. Для этого компилируем следующим образом

# Создаем объектные файлы из всех исходников CUDA
nvcc -c *.cu
# ... исходников MPI
mpiCC -c *.cpp
# Объединяем в один бинарник, по ходу подключив дополнительные
# библиотеки CUDA.
mpiCC *.o -lm -lcudart -L/opt/cuda/lib64 -I/opt/cuda/include -o myProgram


Но надо отметить, первый блин, распараллеленый по всем правилам mpi & cuda, вышел комом: cuda пока что работает медленней, чем остальное на порядки.

Ссылки:

  1. http://forums.nvidia.com/index.php?showtopic=30741
  2. http://www.bog.pp.ru/work/cuda.html

Upd 02/11/2010. Дело оказалось не в блинах. Проект заключался в решении задачи оптимизации, и смена арифметики с двойной точности на стандартную по факту сгубила весь итерационный процесс. Так что ждем появления на кластере NVIDIA Tesla 🙂

Upd 13/11/2010. Переписывание матричных операций на CUBLAS и LAPACK++ для GPU и CPU соответственно позволило минимизировать функцию
f(x_1,\ldots,x_n) = \sum\limits_{i=1}^n (x_i - i)^2,\quad f^* = 0
при n = 6350 (на большее не хватило памяти видеокарты) с использованем Фейеровского метода с растяжением пространства даже на точности float для GPU за 1,5 секунды против 11 на CPU. Может быть, более показательным было б сравнение не с lapack++, а с нетлибовским clapack, но на данный момент выбиралась реализация линейной алгебры, которая ставится руками проще, ибо кластер гол как сокол.

Реклама