решатель линейной системы броненосца (с открытым стеклом)

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

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

экспорт OPENBLAS_NUM_THREADS = 4

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

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос