Ho un'estensione C in cui mi piacerebbe utilizzare OpenMP. Quando importo il mio modulo, però, ottengo un errore di importazione:Estensioni Python e OpenMP C
ImportError: /home/.../_entropysplit.so: undefined symbol: GOMP_parallel_end
ho compilato il modulo con -fopenmp e -lgomp. Questo perché la mia installazione di Python non è stata compilata con il flag -fopenmp? Dovrò creare Python dal sorgente? O c'è qualche altra possibilità? Questa è l'unica volta che in realtà uso OpenMP nel mio modulo:
unsigned int feature_index;
#pragma omp parallel for
for (feature_index = 0; feature_index < num_features; feature_index++) {
mi piacerebbe attaccare con OpenMP se è possibile, proprio perché è così facile e la parallelizzazione in questo caso si adatta bene.
EDIT: ho morso il proiettile e ho ricompilato Python con il supporto OpenMP. Il mio modulo funziona perfettamente ora, ma questa non è davvero una grande soluzione. Non posso davvero distribuirlo se richiede una ricompilazione completa di Python. Quindi qualcuno sa in qualche modo intorno a questo? Funzionerebbero i ctypes, forse?
RISOLTO! Era un semplice problema di collegamento. (Ho ricostruito Python per quello ?!) OpenMP non era collegato correttamente durante la compilazione del modulo. Quindi è IS possibile caricare un'estensione Python C che utilizza OpenMP.
Si potrebbe considerare di copiare la soluzione in una risposta "reale" pubblicata sotto questa domanda, in modo che sia più semplice da vedere (e possa essere messo in vendita). –
Grazie, lo farò. – ajduff574