Ich habe eine C-Erweiterung, in der ich OpenMP verwenden möchte. Wenn ich mein Modul importieren, obwohl, erhalte ich einen Importfehler:Python und OpenMP C Extensions
ImportError: /home/.../_entropysplit.so: undefined symbol: GOMP_parallel_end
ich das Modul mit -fopenmp und -lgomp kompiliert haben. Liegt das daran, dass meine Python-Installation nicht mit dem Flag -fopenmp kompiliert wurde? Muss ich Python aus der Quelle erstellen? Oder gibt es eine andere Möglichkeit? Dies ist das einzige Mal, dass ich tatsächlich openmp in meinem Modul verwenden:
unsigned int feature_index;
#pragma omp parallel for
for (feature_index = 0; feature_index < num_features; feature_index++) {
Ich mag mit openmp bleiben, wenn es möglich ist, nur weil es so einfach ist und die Parallelisierung in diesem Fall paßt es gut.
EDIT: Ich biss das Bullet und rekompilierte Python mit OpenMP-Unterstützung. Mein Modul funktioniert jetzt perfekt, aber das ist keine wirklich gute Lösung. Ich kann das nicht wirklich verteilen, wenn es eine komplette Neukompilierung von Python erfordert. Kennt also irgendjemand etwas in der Umgebung? Würden Cytypen vielleicht funktionieren?
Gelöst! Es war ein einfaches Verknüpfungsproblem. (Ich habe Python dafür neu erstellt ?!) OpenMP wurde während der Kompilierung des Moduls nicht richtig verbunden. So ist es IS möglich, eine C Python-Erweiterung zu laden, die OpenMP verwendet.
Sie könnten in Erwägung ziehen, Ihre Lösung in eine "echte" Antwort zu kopieren, die unter dieser Frage angezeigt wird, so dass sie einfacher zu sehen ist (und hochgestuft werden kann). –
Danke, ich werde das tun. – ajduff574