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

Мы тестировали различные открытые исходные коды для решения линейной системы уравнений в 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)

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