0

複雑なデータの大規模な配列を利用している従来の Fortran コードを定期的にデバッグする必要があり、利用可能な最良のオプションは TotalView です。うまく機能するデータを表示するための独自のビジュアライザーを作成しました (ここの TotalView の指示に従って)。デフォルトのものよりも柔軟で、複雑なデータを取り込んで表示する機能がありますが、TotalView は視覚化パイプを介して複雑な配列を送信しません。

絶対値を取得するためだけに追加のデバッグ配列を使用してコードを再コンパイルすることなく、TotalView で複雑なデータを表示できるようにする方法はありますか?

たとえば、次の短い例のようなコードの場合、 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 を使用しています。

4

1 に答える 1

0

これは、配列がメモリ内で連続しており、ビジュアライザーを調整して、実数部と虚数部を含む追加の次元を持つ実数配列として複雑なデータを入力できる場合に実行できます。

上記の例では、変数に「飛び込む」my_arrと、タイプとして表示されます

COMPLEX(4)(100,30)

これは、実際には TotalView 組み込みの と同じ$complex_8です。「Type:」フィールドに次のように再入力するだけで、タイプとディメンションを再キャストできます。

$real_4(2,100,30)

次に、実数部と虚数部が最初の (最も高速に反復される) 次元に存在し、TotalView を使用して 3D float 配列をビジュアライザーに渡すことができます。注: デフォルトでは、TotalView は 2D 配列の視覚化に制限されているため、「最大値」の下の「ビジュアライザーの起動を有効にする」ボックスの「設定 -> 起動文字列」の下で、それを 3D (またはビジュアライザーが処理できる数) に変更する必要があります。配列ランク。」

割り当て可能な配列:

動的にサイズ変更された配列も同じ方法で処理できますが、いくつかの追加手順が必要です。

  1. 通常、配列への参照のアドレスはメモリ内の実際の配列のアドレスではないため、ダイブ ウィンドウのアドレスを手動で調整する必要があります。

    右側のダイブ ウィンドウには、スクロール バーのすぐ上にオプション ボタンがあり、ウィンドウに表示される列を示します。[アドレス] をオンにして、配列の最初の要素の 16 進アドレスを書き留めます。タイプ文字列を変更して再キャストした後、その 16 進アドレスを上部の「アドレス」フィールドに入力すると、データが正しく表示されます。

    ボタンが丸で囲まれた TotalView 変数ウィンドウ

  2. タイプ文字列には の行に沿ったものが含まれますがCOMPLEX(4),allocatable::(:,:)、「実際のタイプ」文字列には寸法が表示されます。リキャストを行う場合は、必ず を取り外し、を実際の寸法 (例) に,allocatable::変更してください。(:,:)(100,30)

于 2017-05-26T16:26:20.830 に答える