J'ai une extension C dans laquelle j'aimerais utiliser OpenMP. Quand j'importer mon module, cependant, je reçois une erreur d'importation:Extensions Python et OpenMP C
ImportError: /home/.../_entropysplit.so: undefined symbol: GOMP_parallel_end
J'ai compilé le module avec -fopenmp et -lgomp. Est-ce parce que mon installation Python n'a pas été compilée avec le drapeau -fopenmp? Devrai-je construire Python à partir de la source? Ou y a-t-il une autre possibilité? C'est la seule fois que je l'utilise en fait OpenMP dans mon module:
unsigned int feature_index;
#pragma omp parallel for
for (feature_index = 0; feature_index < num_features; feature_index++) {
J'aimerais rester avec OpenMP s'il est possible, juste parce qu'il est si facile et la parallélisation dans ce cas convient bien.
EDIT: J'ai mordu la puce et recompilé Python avec le support OpenMP. Mon module fonctionne parfaitement maintenant, mais ce n'est pas vraiment une bonne solution. Je ne peux pas vraiment le distribuer s'il nécessite une recompilation complète de Python. Est-ce que quelqu'un sait quelque chose à ce sujet? Est-ce que les ctypes fonctionneraient peut-être?
RÉSOLU! C'était un problème de liaison simple. (J'ai reconstruit Python pour cela?!) OpenMP n'était pas correctement lié pendant la compilation du module. Il est donc possible de charger une extension C Python utilisant OpenMP.
Vous pourriez envisager de copier votre solution dans une «vraie» réponse publiée sous cette question, afin qu'elle soit plus facile à voir (et qu'elle puisse être mise à jour). –
Merci, je vais le faire. – ajduff574