У меня есть расширение 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 не был должным образом связан во время компиляции модуля. Таким образом, возможно загрузить расширение C Python, использующее OpenMP.