如何在TotalView中将复杂数据发送到我的可视化工具?

时间:2017-05-26 16:26:21

标签: fortran totalview

我经常需要调试利用大型复杂数据阵列的传统Fortran代码,而最好的选择是TotalView。我创建了自己的可视化工具来查看运行良好的数据(根据TotalView的说明here)。它比默认数据库更灵活,并且能够摄取和显示复杂数据,但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。

1 个答案:

答案 0 :(得分:0)

如果你的数组在内存中是连续的,那么你可以这样做你可以调整你的可视化工具,将复杂的数据作为一个真实数组输入,其中包含真实和虚部的额外维度。

在上面的示例中,如果您“潜入”变量my_arr,它将显示为类型

COMPLEX(4)(100,30)

这实际上与TotalView内置$complex_8相同。您只需在“类型:”字段中重新输入以下内容即可重新输入类型和尺寸:

$real_4(2,100,30)

然后,实部和虚部将驻留在第一个(最快迭代)维度中,TotalView将允许您将3D浮点数组传递给可视化工具。注意:默认情况下,TotalView将自身限制为可视化2D数组,因此您需要在“启用可视化器启动”框下的“首选项 - >启动字符串”下将其更改为3D(或者您的可视化工具可以处理多少)最大阵列等级。“

可分配数组:

动态大小的数组可以以相同的方式处理,但需要几个额外的步骤。

  1. 通常,数组引用的地址不是内存中实际数组的地址,因此您必须手动调整潜水窗口的地址。

    在右侧的潜水窗口中,滚动条上方有一个选项按钮,用于指示窗口中显示的列 - 打开“地址”并记下数组中第一个元素的十六进制地址。通过更改类型字符串重新设置后,在顶部的“地址”字段中键入该十六进制地址,然后您的数据将正确显示。

    TotalView variable window with button circled

  2. 类型字符串将包含COMPLEX(4),allocatable::(:,:)行的内容,而“实际类型”字符串将显示尺寸。进行重铸时,请务必删除,allocatable::并将(:,:)更改为实际尺寸(例如(100,30))。