LINUX.ORG.RU

ускорение dot,cross,norm


0

1

Продолжаю ускорять программы численных расчетов. У меня в модуле для ускорения часто встречается скалярное, векторное произведение вектора с тремя координатами и вычисление его нормы. Скорее всего грамотно последнее сделать вызовом функций BLAS, и действиетльно существует cblas_ddot и cblas_dnrm2 (Евклидова устроит). Какие есть проблемы:

1. cblas_dcross для векторного произведения не вижу

2. для маленьких векторов вот тут http://www.intuit.ru/department/se/intelmkl/2/ чел не рекомендует blas

Судя по новостям, ЛОР математику любит, поэтому прошу подсказать библиотеки, которые будут эффективно (быстро) работать из под Питона и выполнять простые операции, пока нужно dot, cross, norm.

P.S. по сути продолжаем этот разговор пытаемся ускорять с cython (комментарий)

P.S. Самописный вариант отбросим из рассмотрения

Самописный вариант отбросим из рассмотрения

Почему? Это же элементарнейшие операции - куда уж их упрощать? Если делаете много векторных операций «за раз», распараллеливайте (а еще лучше - считайте на GPU).

А вот если у вас вектор из 100500 компонент, то «в лоб», конечно, считать придется долго - но и здесь можно распараллелить...

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

процедуры blas эффективнее самописных процедур на си без привлечения ассемблера.

P.S. хочу добиться офигенной скорости

math-beginer ()

как минимум sse юзать а то и gpu

bga_ ★★ ()

> NVIDIA CUDA SDK включает функциональность BLAS (cuBLAS) для написания программ на C для видеокарт серии GeForce 8, GeForce 200, GeForce 300 (Fermi).

bga_ ★★ ()
Ответ на: комментарий от math-beginer

Только если используешь реализацию blas, заточенную под свой проц, желательно вендором проца, хотя правильно собранный atlas тоже неплохо работает.

Reset ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Смотря что считать. Если данные занимают всю видео память и используется blas level 3, то видюха будет рвать проц. Если используется маленький кусок видеопамяти и blas level <= 2, то проц будет рвать видюху.

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

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

// в принципе, оно на GPU и без BLAS'а быстро считается. Надо бы проверить, как с BLAS'ом будет...

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

Во-первых, если эти миллионы векторов гоняешь туда сюда после каждого перемножение, то видюха у тебя сольет. Во-вторых на gpu оно без blas'а быстрее не посчитается, ну если только быстрее референсного blas'а для cpu, который работает в 100 раз медленнее blas'а от вендора проца.

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

Если считать надо вершины да нормали из VBO, то все ОК.

Eddy_Em ☆☆☆☆☆ ()

перепиши вычисления в виде модуля на Си и вставь директивы OpenMP. ускорится в десятки раз :)

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

Веду борьбу с синтаксисом Python C API ;-) , если есть опыт подскажите книжку/учебник по расширению Питона (по документации тяжко). Проще самому написать, чем заставить Cython сгенерить что-то оптимальное.

Или вы имеете ввиду только C/C++, без использования Python.h? Это было бы гораздо проще, но непонятно как. Хотя, я работаю с массивами и типом double, может можно Питон заставить обращаться правильно к Сишным функциям, указывая точно тип данных.

P.S. Насчет ускорения в десятки раз. С OpenMP на 4-х ядрах точно ускориться в 4-ре раза, правда даже на одном ядре наблюдал ускорение при запуске нескольких потоков, но это наверное, за счет конвеерной обработки, и не факт что всегда будет работать.

math-beginer ()

> работать из под Питона и выполнять простые операции, пока нужно dot, cross, norm

numpy + mkl

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