2017-05-26 1 views
0

Je dois systématiquement déboguer du code Fortran hérité qui utilise de grandes baies de données complexes, et la meilleure option disponible est TotalView. J'ai créé mon propre visualiseur pour voir les données (selon les instructions de TotalView here) qui fonctionne bien. Il est plus flexible que celui par défaut et a la capacité d'intégrer et d'afficher des données complexes, mais TotalView n'enverra pas de tableaux complexes à travers son tube de visualisation.Comment envoyer des données complexes à mon visualiseur dans TotalView?

Est-il possible de faire en sorte que TotalView puisse afficher des données complexes sans avoir à recompiler le code avec des matrices de débogage supplémentaires uniquement pour prendre la valeur absolue?

E.g. pour le code comme dans l'exemple suivant court, je pourrait faire un autre tableau en Fortran, mais je voudrais vraiment juste arrêter et examiner la variable my_arr:

program main 

implicit none 

integer N, M, i, j 
parameter (N=100, M=30) 
complex my_arr(N, M) 
real pi 

pi = ACOS(-1.0) 

do j = 1, M 
    do i = 1, N 
     my_arr(i,j) = cmplx(i*cos(j/pi), i*sin(j/pi)) 
    end do 
end do 

return 

end 

Pour les petits tableaux que je peux sortir avec quelque chose comme cela comme une expression:

my_arr%Real_Part**2 + my_arr%Imaginary_Part**2 

mais cela ne fonctionne pas pour quelque chose de très grand, TotalView se plaint de la mémoire.

J'utilise TotalView 8.13.

Répondre

0

Vous pouvez le faire si votre baie est contiguë en mémoire et Vous pouvez ajuster votre visualiseur pour entrer les données complexes en tant que tableau réel avec une dimension supplémentaire contenant les parties réelle et imaginaire.

Dans votre exemple ci-dessus, si vous plonger »dans la my_arr variable, il sera affiché comme le type

COMPLEX(4)(100,30) 

Ceci est en fait le même que le TotalView intégré $complex_8. Vous pouvez refondre le type et les dimensions simplement retaper ce qui suit dans le « Type: » champ:

$real_4(2,100,30) 

Ensuite, les parties réelles et imaginaires résidera dans le premier (le plus rapide-itérer) dimension et TotalView vous permettra de passez le tableau flottant 3D au visualiseur. Note: TotalView se limite par défaut à la visualisation de tableaux 2D, vous devrez donc changer cela en 3D (ou quel que soit votre visualiseur) sous "Preferences-> Launch Strings" dans la case "Enable Visualizer Launch" sous "Maximum". rang de tableau. "

tableaux ALLOCATABLE:

tableaux Dynamiquement tailles peuvent être traitées de la même manière, mais ont besoin d'une ou deux étapes supplémentaires.

  1. Habituellement, l'adresse de la référence au tableau n'est pas l'adresse du tableau réel en mémoire, vous devrez régler manuellement l'adresse de la fenêtre de plongée. Dans la fenêtre de plongée sur le côté droit, il y a un bouton d'option juste au-dessus de la barre de défilement pour indiquer quelles colonnes sont affichées dans la fenêtre - allumer "Adresse" et écrire l'adresse hexadécimale du premier élément dans le tableau . Après avoir refondu en changeant la chaîne de caractères, tapez cette adresse hexadécimale dans le champ "Adresse" en haut, puis vos données s'afficheront correctement.

    TotalView variable window with button circled

  2. La chaîne de type contiendra quelque chose le long des lignes de COMPLEX(4),allocatable::(:,:), alors que la chaîne « type réel » vous montrera les dimensions. Lorsque vous effectuez la refonte, veillez à supprimer le ,allocatable:: et à remplacer le (:,:) par les dimensions réelles (par exemple, (100,30)).