2017-05-26 54 views
0

我經常需要調試使用大型複雜數據陣列的舊Fortran代碼,並且可用的最佳選項是TotalView。我創建了自己的可視化工具來查看數據(按照TotalView的說明here),效果很好。它比默認的更靈活,並且能夠攝取和顯示覆雜的數據,但TotalView不會通過可視化管道發送複雜的數組。如何將複雜數據發送到TotalView中的可視化工具?

有沒有什麼辦法讓TotalView能夠顯示覆雜的數據,而無需使用額外的調試數組重新編譯代碼來獲取絕對值?

E.g.像下面這個簡短的示例代碼,我可以使Fortran的另一個數組,但我真的很想剛剛停下來檢查的變量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 

對於小數組,我可以像逃脫這作爲一個表達式:

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

但這不會工作的東西非常大,TotalView抱怨內存。

我正在使用TotalView 8.13。

回答

0

你可以做到這一點,如果你的數組是在內存中連續你可以調整你的可視化輸入複雜的數據與含有實部和虛部分一個額外的維度真正的數組。

在你上面的例子,如果你「潛水」到變量my_arr,它會顯示爲類型

COMPLEX(4)(100,30) 

這實際上是作爲TotalView的內置$complex_8相同。您可以通過簡單地重新鍵入以下到重鑄的類型和尺寸「類型:」字段:

$real_4(2,100,30) 

然後實部和虛部將駐留在第一(最快的迭代)維和TotalView軟件將讓你將3D浮點數組傳遞給可視化工具。注意:默認情況下,TotalView將自身限制爲可視化2D數組,因此您需要在「最大化」下的「啓用Visualizer啓動」框中的「首選項 - >啓動字符串」下將其更改爲3D(或無論您的可視化工具可以處理多少)陣列排名「。

分配數組:

動態大小的數組可以以同樣的方式來處理,但是需要幾個額外的步驟。

  1. 通常參考陣列的地址不在存儲器中的實際數組的地址,所以你將不得不手動調整潛水窗口的地址。

    在右側的潛水窗口中,滾動條上方有一個選項按鈕,用於指示窗口中顯示的列 - 打開「地址」並記下陣列中第一個元素的十六進制地址。通過更改類型字符串重新進行重新設置後,將該十六進制地址鍵入頂部的「地址」字段,然後您的數據將正確顯示。

    TotalView variable window with button circled

  2. 類型字符串將包含沿COMPLEX(4),allocatable::(:,:)線的東西,而「實際類型」串會告訴你的尺寸。重做時,請確保刪除,allocatable::並將(:,:)更改爲實際尺寸(例如(100,30))。

相關問題