J'ai essayé de paralléliser un algorithme d'optimisation écrit en FORTRAN90 et compilé/exécuté en utilisant l'interface cygwin avec gfortran XXXXX -fomp.cygwin OMP Core Dump
L'algorithme calcule une matrice de gradient et de Hesse par des différences finies à partir d'un appel de sous-programme. Le sous-programme est assez grand et implique la manipulation d'une matrice de ~ 2 mb à chaque fois. Pour les besoins de la discussion, j'utiliserai "call srtin()" comme exemple de l'appel du sous-programme.
Sans utiliser de code OMP n'importe où dans la compilation, le programme échoue si j'utilise l'option -fomp lors de la compilation (le code se compile sans accroc). La compilation et l'exécution régulières à l'aide de gfortran ne posent aucun problème. Cependant, au moment où j'ajoute l'option -fomp, l'exécutable résultant provoque une erreur de segmentation si un seul appel à srtin() est présent.
J'ai lu sur ce site qu'un problème commun avec omp est des problèmes de stack. J'ai déduit (peut-être faux) que la taille de la pile de threads maître est en cause parce que je n'ai pas encore inclus de code qui créerait des threads esclaves. D'après ce que j'ai compris, sur un ordinateur linux typique, j'utiliserais «ulimit -s XXX» pour réinitialiser cette pile à une valeur suffisamment élevée pour que l'erreur ne se produise plus. J'ai essayé ceci par mon interface de cygwin, mais l'erreur persiste. J'ai également essayé d'utiliser la commande peflags pour définir une mémoire de pile plus élevée pour cet exécutable sans succès. J'ai également augmenté la variable d'environnement OMP_STACKSIZE sans succès.
Quelqu'un a-t-il des suggestions?
J'utilise -Wl, - pile, 900000000 dans l'étape de liaison cygwin64 gfortran pour -fopenmp pour éviter une défaillance due à une taille de pile primaire insuffisante. Je pense que la variable d'environnement OMP_STACKSIZE est supportée, bien que je n'ai pas vu documenté quelles variables d'environnement sont supportées par libgfortran sous Windows. Je ne sais pas combien de pile peut être supportée par 32 bits cygwin gfortran; Je pense que c'est beaucoup moins. – tim18