решатель линейных систем armadillo (с openblas)

#c 11 #armadillo #blas #openblas

#многоядерный #blas #armadillo

Вопрос:

Я тестировал различные открытые исходные коды для решения линейной системы уравнений на C . Пока что самый быстрый, который я нашел, это armadillo, также использующий пакет OpenBLAS. Для решения плотной линейной системы NxN, где N = 5000, в моей системе требуется около 8,3 секунды, что действительно очень быстро (без установленной openblas это занимает около 30 секунд).).

Одна из причин этого увеличения заключается в том, что armadillo openblas, похоже, позволяет использовать несколько потоков. Он работает на двух моих ядрах, тогда как armadillo без openblas использует только 1. У меня процессор i7, поэтому я хочу увеличить количество ядер и протестировать его дальше. Я использую ubuntu, поэтому из документации openblas я могу сделать в терминале:

экспорт OPENBLAS_NUM_THREADS=4

однако повторный запуск кода, похоже, не увеличивает количество используемых ядер или скорость. Я делаю что-то не так, или 2 — это максимальное количество для использования команды armadillo «решить (A, b)»? Я нигде не смог найти исходный код armadillo, чтобы взглянуть.

Кстати, кто-нибудь знает методы, которые armadillo / openblas используют для решения Ax = b (стандартная декомпозиция LU с параллелизмом или что-то еще)? Спасибо!

редактировать: на самом деле количество ядер, застрявших на 2, похоже, является ошибкой при установке openblas с synaptic package manager см. Здесь . Переустановка из исходного кода позволяет определить, сколько ядер у меня фактически есть (8). Теперь я могу использовать export OPENBLAS_NUM_THREADS=4 и т.д., Чтобы управлять им.

Комментарии:

1. Как вы узнали, сколько ядер на самом деле используется?

2. @chandresh вы можете использовать top или htop в Linux

Ответ №1:

Armadillo не мешает OpenBLAS использовать больше ядер. Возможно, что текущая реализация OpenBLAS просто выбирает 2 ядра для определенных операций.

Вы можете увидеть исходный код Armadillo непосредственно в загружаемом пакете (с открытым исходным кодом), в папке «включить». В частности, взгляните на файл «include/armadillo_bits/fn_solve.hpp» (который содержит доступную пользователю функцию solve()) и файл «include/armadillo_bits/ auxlib_meat.hpp» (который содержит оболочку и служебный код для вызова мучительных функций Blas и Lapack).

Если на вашем компьютере уже установлен Armadillo, посмотрите «/usr/include/armadillo_bits» или «/usr/ local/include/armadillo_bits».

Комментарии:

1. Спасибо за информацию об исходном коде. См. Мою правку относительно количества ядер, используемых openblas