Tengo una extensión C en la que me gustaría usar OpenMP. Cuando importo mi módulo, sin embargo, me sale un error de importación:Extensiones Python y OpenMP C
ImportError: /home/.../_entropysplit.so: undefined symbol: GOMP_parallel_end
He compilado el módulo con -fopenmp y -lgomp. ¿Esto es porque mi instalación de Python no se compiló con el indicador -fopenmp? ¿Tendré que construir Python desde la fuente? ¿O hay alguna otra posibilidad? Esta es la única vez que realmente utilizo en mi OpenMP módulo:
unsigned int feature_index;
#pragma omp parallel for
for (feature_index = 0; feature_index < num_features; feature_index++) {
me gustaría seguir con OpenMP si es posible, simplemente porque es muy fácil y la paralelización en este caso se adapte bien.
EDITAR: Pordé la viñeta y recompuse Python con soporte OpenMP. Mi módulo funciona perfectamente ahora, pero esta no es realmente una gran solución. Realmente no puedo distribuir esto si requiere una compilación completa de Python. Entonces, ¿alguien sabe alguna forma de evitar esto? ¿Podrían funcionar los ctypes?
¡RESUELTO! Fue un simple tema de enlace. (¿Reconstruí Python para eso ?!) OpenMP no se vinculó correctamente durante la compilación del módulo. Por lo tanto, IS es posible cargar una extensión C Python que use OpenMP.
Puede considerar copiar su solución en una respuesta "real" publicada bajo esta pregunta, para que sea más fácil de ver (y se puede subir). –
Gracias, lo haré. – ajduff574