Je voudrais exécuter une fonction Fortran90 avec différents paramètres dans différents std::threads
, qui utilise de nombreux modules pour stocker les paramètres et quelques données générales. Le problème que je vois est que les modules Fortran sont comme des objets singleton. Lorsque j'appelle la fonction avec deux threads, ils fonctionnent sur le même module. Y at-il un moyen de rendre les modules threadprivate comme avec openmp?Utiliser le module Fortran en C++ avec std :: thread
Par exemple avec OpenMP un module avec des données threadprivate ressemble à ceci:
MODULE EXAMPLE
USE OMP_LIB
! some threadprivate data:
INTEGER :: VALUE = 0
! make value threadprivate.
!$OMP THREADPRIVATE(VALUE)
CONTAINS
END MODULE EXAMPLE
Puis-je faire quelque chose de similaire pour le std::thread
?
Il n'y a pas de norme qui couvre cela, mais au moins sur certains systèmes ELF (notamment Linux), GNU OpenMP runtime et 'std :: thread' utilisent tous deux ELF TLS pour stocker les variables locales. Ainsi, les variables privées OpenMP OpenMP sont également locales dans les threads C++. Encore une fois, ce n'est ni standard ni portable. –
Notez que même sur Linux, il y a plus de temps d'exécution que de GOMP. Ils peuvent être compatibles avec cette fonctionnalité mais ils ne sont pas compatibles en général. Mais les threads C++ sont très susceptibles d'être implémentés sur le même calque de bas niveau (par exemple les threads POSIX) que les threads OpenMP, ce qui est assez naturel. –