#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