LINUX.ORG.RU

ATLAS vs CUDA

 , ,


1

1

Продолжаю серию тем про LAPACK.
Прикрутил MAGMA к своему проекту, получается, что при инвертировании матрицы atlas только процентов на 10 медленнее magma на GeForce 425M, процессор core i5 480M
На матрицах небольшого размера (5000 x 5000) разницы нет?


Ответ на: комментарий от anonymous

Не слишком маленькая матрица для оверхеда? Хотя для интереса можно время посмотреть, да.

aptyp
() автор топика
Ответ на: комментарий от aptyp

Смысл пинать? Они в книжках явно пишут, что нужно принимать во внимание скорость чтения записи в видеопамять. Я саму CUDA всё никак не покручу, но книжечку «CUDA в примерах» купил прочитал. Так вот там есть глава 10 в которой обсуждается момент оптимизации ввода\вывода в видеопамять с помощью планирования потоков на GPU. Если коротко, то GPU может копировать кусок памяти и одновременно считать что-то на другом куске памяти. Может стоит попробовать оптимизировать ваш код под этот момент?

Norgat
()
Ответ на: комментарий от Norgat

Я использую не напрямую куду, а обёртку - MAGMA. В моём случае такое не прокатит.
Кстати запустил valgrind --tool=callgrind, показывает, что это место вообще времени не занимает. Или валгринд для видеокарт вообще использовать не стоит? nvvp какой-то обкуренный вообще.

aptyp
() автор топика
Ответ на: комментарий от aptyp

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

Norgat
()

при инвертировании матрицы atlas только процентов на 10 медленнее magma на GeForce 425M, процессор core i5 480M

Возьми gotoBLAS (или как там он сейчас называется), собери с жёсткой оптимизацией под свой процессор, или Intel MKL - и эти 10 процентов уйдут.

anonymous
()
Ответ на: комментарий от aptyp

есть другая инфа кстати, Reset вроде давал.

Reset давал.

/0

anonymous
()
Ответ на: комментарий от aptyp

На счёт nvvp — там точно можно измерить время выполнения глобальной функции(ядра), также показывает время выполнения cudaMemcpy{DeviceToHost, HostToDevice}.
Если без него как-то быть, то это таймеры на каждый чих запускать в host-code. Может обвинение в обкуренности прозвучало ввиду того, то не смогли програму в nvvp запустить вообще?
Там есть 2 режима анализа, 1 «выстрел» и 24 последовательных теста. Второе очень бесит и ненужно(но не вообще), т.к. после одного запуска и так всё понятно.
Также утечки device memory проверять с помощью cuda-memcheck, а не valgrind, второй оных вообще не увидит.

blinkenlichten
()
Ответ на: комментарий от aptyp

Ну, а результаты какие?
Может быть, cudaMemcpy слишком долго выполняется?
Может и работа с глобальной памятью происходит медлено.

В некоторых задачах большие данные лучше делать 3Д масивом, привязывать «поверхность» к ним с помощью cudaBindSurfaceToArray(surface, cudaArray*) и использовать value = surf3Dread<T>(surface, x,y,z); surf3Dwrite<T>(value, surface, x,y,z);

Много чего прийдется переписать, если идти таким путём, но в моём случае это работало в 3 раза быстрее, чем глобальная память, размер массива данных 256^3.
Для остальных случаев ничего не гарантирую.

blinkenlichten
()
Ответ на: комментарий от blinkenlichten

ммм, ясно. Я напрямую с кудой не работаю, обёртка видимо не очень оптимизированна. Да и не буду напрямую работать, начальник доволен текущей скоростью:-)

aptyp
() автор топика

Или валгринд для видеокарт вообще использовать не стоит?

Не стоит.

Не слишком маленькая матрица для оверхеда?

Под двести метров-то?

buddhist ☕☕☕☕
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.