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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.