2010-08-25 6 views
2

J'essaie d'exécuter un code sur ssh qui fonctionne parfaitement pour un maillage plus petit, mais comme le nouveau maillage est beaucoup plus grand, j'ai utilisé la commande ifort pour le compiler, ifort -mcmodel = medium -i-dynamic -otest.out * .Fla sortie de mon code fortran est tué, une suggestion?

et il est conforme, mais quand je le lance, la sortie est: tué

je sais ce problème est de la mémoire, personne ne sait s'il y a un moyen de l'exécuter? comment puis-je comprendre où dans le code provoque un problème de mémoire?

Merci Shadi

+1

Que signifie "tué"? – Rook

+0

Voulez-vous dire qu'il refuse simplement de courir? Peut-être que vous demandez trop de mémoire. Essayez d'estimer la quantité de mémoire dont votre programme a besoin - au moins les grands tableaux. Peut-être passer de la mémoire statique à l'aide de tableaux allouables. Quelle version d'ifort et OS? –

+0

La documentation Intel contient une note indiquant que -shared-intel doit être utilisé lorsque -mcmodel = medium ou -mcmodel = large est utilisé. –

Répondre

1

essayer d'utiliser valgrind. J'ai essayé de trouver des fuites de mémoire dans mon code Fortran avec un bon succès.

http://valgrind.org/

1

A partir de la ligne de commande ifort, je pense que vous exécutez sur Linux. Voir «tué» comme résultat est généralement le résultat de l'intervention du démon Out of Memory (MOO) de Linux pour prévenir un crash imminent (parce que les applications demandent souvent plus de mémoire et ont besoin de plus de mémoire que est actuellement disponible sont acceptés - vérifiez pour "Out of Memory: Killed processus [PID] [nom du processus]" dans les fichiers journaux système). Le tueur OOM est généralement assez bon à se débarrasser de l'application responsable de l'utilisation de toute la mémoire, de sorte que l'endroit à commencer est l'utilisation de la mémoire de vos applications. La première chose à faire est d'essayer et d'estimer (même si ce n'est qu'en gros) la quantité de mémoire que vous attendez de votre application. Une approche consiste à estimer la taille des matrices principales et à les multiplier par le nombre de bits requis par élément. Une autre approche consiste à penser à la façon dont vous vous attendez à ce que l'utilisation de la mémoire augmente avec la taille du maillage. Vous pouvez étudier cela par expérience (exécuter avec différentes tailles de mailles, mesurer l'utilisation de la mémoire et extrapoler) ou à partir d'une mesure et la connaissance de la façon dont l'échelle du tableau majeur. Il se peut que vous demandiez beaucoup plus de mémoire alors vous avez sur la machine: et la solution à ceci est probablement d'obtenir un accès à un plus grand ordinateur. (Ou vous pourriez essayer et trouver un algorithme alternatif qui utilise moins de mémoire.)

S'il s'agit d'une fuite de mémoire, vous devriez voir plus d'utilisation de la mémoire que prévu, même pour le plus petit maillage. Si tel est le cas, valgrind devrait aider. Passer du stockage statique au stockage dynamique ne va probablement pas aider ici - je m'attendrais à voir une erreur de segmentation si vous étiez juste en train de dépasser l'espace disponible sur la pile.

Questions connexes