2013-01-09 13 views
5

Ho un'applicazione multiprocesso (non multi-thread!) Utilizzando il modulo multiprocesso su una macchina Linux. Questa applicazione utilizza la funzione numpy.linalg.solve, e se provo a creare a molti processi, allora ottengo l'errore:Errore di filettatura usando Atlas in numpy sotto Linux

assertion !pthread_create(&(ROOT->pid), ATTR, ROOT->fun, ROOT) failed, line 84 of file /build/buildd-atlas_3.8.4-9-amd64-jk6dgk/atlas-3.8.4/build/atlas-base/../..//src/pthreads/misc/ATL_thread_tree.c 

Nota che prima ho iniziato ad usare le funzioni da numpy.linalg, non ho avuto alcun problema.

Qualche idea di quale potrebbe essere il problema?

Modifica: Ho provato a utilizzare scipy.linalg.solve e il problema è lo stesso!

Modifica: Sostituendo l'atlante con blas, il problema scompare. In modo che davvero sembra il problema è all'interno di atlante

+0

sembra bug https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=766168 – Satish

+0

L'errore è lo stesso, il contesto è diverso, come non ho un programma multi-thread e anche io non sto usando Red Hat. – PierreBdR

risposta

2

Accade solo che lo sviluppatore ATLAS ha recentemente risposto a questa domanda qui: http://sourceforge.net/p/math-atlas/support-requests/873/

Nota: sto assumendo che abbiate ATLAS 3.10 installato.

Anche questo mi ha infastidito per un po '. E se avete lo stesso problema come il mio, allora è molto probabile che:

  1. ATLAS è stata costruita su un altro computer rispetto a quello che si sta eseguendo questo su
  2. Questa macchina build ha più core di macchina
  3. ATLAS 3.10 non sa come gestire un numero inferiore di core rispetto al numero che aveva al momento della compilazione e genera un'eccezione.

La soluzione è quella di creare ATLAS su una macchina con un numero di core inferiore o uguale alla macchina corrente.

Spero che questo aiuti,

+0

Interessante. Non so se questo è il mio problema però. Se questo è il caso, il problema non dovrebbe accadere sempre? Attualmente, succede solo se sto già utilizzando tutti i core avviando molti processi contemporaneamente. Inoltre, in questo caso, esiste un modo per impedire ad ATLAS di utilizzare complessivamente il multiprocessing? – PierreBdR

+0

Bene, ho lo stesso identico errore del tuo se le librerie usano affinità. Collegano il tuo programma compilato a una particolare macchina/CPU. Ho problemi simili con OpenBlas che sembra essere risolto (sto provando a passare ad openblas in effetti). Compattare contro libsatlas invece di libtatlas dovrebbe impedire l'atlas dal multithreading. – LeSchef