LINUX.ORG.RU

BLAS и поэлементые действия и срезы

 , ,


0

2

Доброй ночи!

Есть два массива x и y. Требуется поэлементно перемножить подмассивы этих массива, например x[0:10]*y[0:10]. Поможет ли здесь CBLAS или CLAPACK повысить эффективность программы? Не могу понять:

1. поддерживает ли CBLAS/CLAPACK поэлементное умножение векторов ??? другие операции (+-/) тоже интересуют.

2. можно ли делать срезы ???

3. имеется ли в этих библиотеках какой-нить удобный интерфейс для многомерных массивов, например

A[i][j][k]
и автоматом вычислилась позиция в непрерывном участке памяти ???



Последнее исправление: phys2015 (всего исправлений: 1)

Зачем для такой элементарщины брать BLAS, если можно просто в цикле умножать. А для распараллеливания взять openmp.

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

А для распараллеливания взять openmp.

На данной задаче он будет давать эффект только с -O0.

А вообще blas это не про это, а cblas это вообще не про эффективность. Если нужна эффективность, то надо брать реализацию от вендора железа или atlas, собранный под твое железо.

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

Так вот над этим и размышляю ). Будет ли BLAS быстрее циклов? Ведь в нем есть зачем-то alpha x + y - эту операцию тоже можно без проблем сделать в цикле.

P.S. хорошо бы учебник какой-нить основательный найти, и чтоб для чайников

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

atlas

ну это уже второе дело, как я понимаю atlas или mkl используют CBLAS/CLAPACK для Си.

первое дело --- ускорит ли он поэлементые действия для срезов массивов? и есть ли возможности работать со срезами ... ?

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

Почему решил подумать над усовершенствованием кода:

существуют же octave, numpy (может быть matlab)... которые используют BLAS, LAPACK и утверждают, что поэлементые и матричные операции очень эффективны.

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

octave, numpy (может быть matlab)... которые используют BLAS, LAPACK

Они используют любую совместимую библиотеку. OpenBLAS и ATLAS совместимы со стандартными реализациями.

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

Тот еще тормоз.

Только blas и lapack тут совершенно не при чём.

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

atlas, собранный под твое железо.

А оно не умеет собираться стразу под все оптимизации и динамически выбирать математическое ядро, как openblas?

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

как я понимаю atlas или mkl используют CBLAS/CLAPACK для Си.

Не используют. От них там только api.

первое дело --- ускорит ли он поэлементые действия для срезов массивов?

Не ускорит.

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

Оно почти так и делает, только итоговый код выбирает на основе запуска тестов на твоем железе, поэтому в итоговый бинарь попадает не всё.

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

хорошо бы учебник какой-нить основательный найти

Деммель Вычислительная линейная алгебра.

и чтоб для чайников

Такого не бывает :)

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

первое дело --- ускорит ли он поэлементые действия для срезов массивов?

Не ускорит

тогда зачем в BLAS функция alpha * x + y, ведь это же поэлементное сложение двух векторов (с поэлементным умножение на скаляр)? если, в циклы работают не медлее блазовской функции, то такого рода операцию лучше делать просто в цикле.

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

Поэлементное умножение не входит в blas api.

А со срезами как дела в BLAS-подобных и LAPACK-подобных библиотеках?

получится у меня подматрицу извлечь

например

int x[10];

x = y[10:20] // здесь какая-то функция из BLAS/LAPACK вместо оператора []
phys2015
() автор топика
Ответ на: комментарий от Reset

За книжку спасибо, устанавливает связи между численными методами и LAPACK!

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

Откуда ж мне знать? Читай мануал. Я не использую внешние библиотеки для такой элементарщины. Я вообще напрямую BLAS/LAPACK никогда не использовал, только через интерфейсы GSL. Да и нет у меня практически таких задач. Разве только аппроксимация наименьшими квадратами. Фурье я при помощи libfftw3 делаю, через Фурье же и свертку реализую; остальное все либо велосипежу с openmp, либо на куде (если есть возможность сильно распараллелить, а вычисления достаточно нудные).

Eddy_Em ☆☆☆☆☆
()

1. поддерживает ли CBLAS/CLAPACK поэлементное умножение векторов ??? другие операции (+-/) тоже интересуют.

Нет, но есть MKL интеловская, там есть.

2. можно ли делать срезы ???
3. имеется ли в этих библиотеках какой-нить удобный интерфейс для многомерных массивов, например

Если устроит на одном ядре, см Eigen.

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