小编Kal*_*gin的帖子

GProf 输出中缺少函数

我正在尝试分析一些 C 代码,但最直观地成本最高的函数之一并未出现在 GProf 输出中。

int main() {
    initialise...
    haloSwap();

    for(...) {
        functions...

        propagate();

        functions...
    }
}

void propagate() {
    for (x)
        for (y)
            for (z)
                grid[xNew][yNew][zNew] = grid[x][y][z];

    haloSwap();
}

void haloSwap() {
    // Horizontal swap
    create buffers...
    MPI_Sendrecv(buffers);
    recreate grid from buffers...

    // Vertical swap
    create buffers...
    MPI_Sendrecv(buffers);
    recreate grid from buffers...
}
Run Code Online (Sandbox Code Playgroud)

希望伪代码能够以某种方式解释设置。haloSwap()涉及线程之间的大量通信,我觉得这是算法中昂贵的部分。它在初始化期间被调用,然后在算法循环期间被重复调用。

GProf 仅显示 1 次调用haloSwap(在 init 期间),尽管我知道它从内部被调用了 1000 多次propagate()

propagate()显示为代码中最昂贵的部分,但我想知道它是 xyz 循环还是 MPI 通信。

haloSwap有谁知道为什么对from的调用propagate在调用次数和函数中花费的时间上似乎都被忽略了? …

c mpi gprof

4
推荐指数
1
解决办法
3989
查看次数

标签 统计

c ×1

gprof ×1

mpi ×1