У меня есть расширение C, в котором я хотел бы использовать OpenMP. Когда я импортирую свой модуль, я получаю ошибку импорта:
ImportError: /home/.../_entropysplit.so: undefined symbol: GOMP_parallel_end
Я скомпилировал модуль с помощью -fopenmp и -lgomp. Это потому, что моя установка Python не была скомпилирована с флагом -fopenmp? Придется ли мне собирать Python из исходного кода? Или есть какая-то другая возможность? Это единственный раз, когда я на самом деле использую openmp в моем модуле:
unsigned int feature_index;
#pragma omp parallel for
for (feature_index = 0; feature_index < num_features; feature_index++) {
Я бы хотел придерживаться openmp, если это возможно, просто потому, что это так просто, и распараллеливание в этом случае хорошо ему подходит.
РЕДАКТИРОВАТЬ: я укусил пулю и перекомпилировал Python с поддержкой OpenMP. Мой модуль работает отлично, но это не очень хорошее решение. Я не могу распространять это, если это требует полной перекомпиляции Python. Так кто-нибудь знает как-нибудь обойти это? Сработает ли ctypes?
РЕШИТЬ! Это была простая проблема с ссылками. (Я перестроил Python для этого ?!) OpenMP не был должным образом связан во время компиляции модуля. Так что IS можно загрузить расширение C Python, использующее OpenMP.