Solver sistema de armadillo lineal (con openblas)

He estado probando varios códigos de código abierto para resolver un sistema lineal de ecuaciones en C ++. Hasta ahora, lo más rápido que he encontrado es el armadillo, que también usa el paquete OPENblas. Para resolver un sistema NxN lineal denso, donde N = 5000 toma alrededor de 8.3 segundos en mi sistema, que es realmente rápido (sin OpenBlas instalado, toma alrededor de 30 segundos).

Una razón para este aumento es que armadillo + openblas parece permitir el uso de múltiples subprocesos. Se ejecuta en dos de mis núcleos, mientras que el armadillo sin openblas solo usa 1. Tengo un procesador i7, por lo que quiero aumentar el número de núcleos y probarlo más. Estoy usando ubuntu, así que desde la documentación de openblas puedo hacer en el terminal:

exportar OPENBLAS_NUM_THREADS = 4

sin embargo, ejecutar el código de nuevo no parece aumentar la cantidad de núcleos que se utilizan o la velocidad. ¿Estoy haciendo algo mal o es el 2 la cantidad máxima para usar el comando "resolver (A, b)" de armadillo? No pude encontrar el código fuente del armadillo en ninguna parte para echar un vistazo.

Incidentalmente, ¿alguien sabe los métodos que usan armadillo / openblas para resolver Ax = b (descomposición de LU estándar con paralelismo o algo más)? ¡Gracias!

edición: en realidad, el número de núcleos atascados en 2 parece ser un error al instalar openblas con el administrador de paquetes synapticmira aquí. La reinstalación desde la fuente le permite detectar cuántos núcleos tengo actualmente (8). Ahora puedo usar exportar OPENBLAS_NUM_THREADS = 4, etc. para gobernarlo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta