J'utilise OpenCV dans une application commerciale et je n'ai pas d'autorisation de gestion pour acheter des licences TBB. J'ai donc construit OpenCV avec OpenMP comme framework de parallélisme. Toutes les caméras de vision industrielle que nous utilisons comme sources de trames que nous traitons en temps réel ont des SDK qui remplissent les mémoires tampons dans une file circulaire avec des données et appellent des rappels fournis par l'utilisateur pour les traiter simultanément dans les threads des SDKs 'propres pools de threads. Cela fonctionne très bien si je ne considère pas OpenMP, car je fais un tas de traitement (sans mémoire) sur des images individuelles avant de les sérialiser par des tampons inter-threads pour alimenter l'état de traitement où les trames doivent être traitées dans l'ordre. Si c'était juste le traitement d'image simultané, alors je n'aurais pas besoin d'OpenMP du tout; cependant, je dois le laisser activé dans OpenCV afin que le traitement de trame en ordre soit également accéléré. Ce qui m'inquiète, c'est comment je peux m'attendre à ce que l'OpenMP fonctionne quand il est utilisé dans la première phase, les callbacks exécutés simultanément dans les threads créés explicitement par les SDK de la caméra. Puis-je supposer que le runtime OpenMP est suffisamment intelligent pour utiliser efficacement son pool de threads lorsque des régions parallèles sont déclenchées dans plusieurs threads créés de l'extérieur?OpenMP et interopérabilité explicite des threads lors de l'utilisation d'OpenCV
La plate-forme est garantie x86-64 (VC 15 ou GCC).
Si vous espérez que le pool de threads openmp prenne en compte vos threads d'appel, vous devez utiliser la même implémentation de threads que openmp. Ms thread pour ms ou Intel libiomp pthread pour libgomp – tim18
Peut nécessiter _OMP_NESTED – tim18
Ou, remplacez ces threads explicites par omp tâche, et utilisez omp imbri – tim18