问题标签 [hpc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2190 浏览

c - MPI_Isend 和 MPI_Irecv 似乎导致了死锁

我在 MPI 中使用非阻塞通信在进程之间发送各种消息。但是,我似乎陷入了僵局。我使用 PADB(请参见此处)查看消息队列并得到以下输出:

这似乎表明发送已完成,但所有接收都处于挂起状态(以上只是标记值为 16 的日志的一小部分)。然而,这怎么可能发生呢?如果没有相关的接收完成,发送肯定无法完成,因为在 MPI 中,所有发送和接收都必须匹配。至少我是这么认为的……

任何人都可以提供任何见解吗?

我可以提供我用来执行此操作的代码,但是无论调用它们的顺序如何,Isend 和 Irecv 肯定都应该工作,假设 MPI_Waital 在最后被调用。

更新:代码在这个要点上可用

更新:我对代码进行了各种修改,但仍然不能正常工作。新代码是相同的 gist,我得到的输出就是这个 gist。我对此代码有很多疑问/问题:

  1. 当我在它之前有一个 MPI_Barrier() 以确保在打印之前完成所有工作时,为什么最终循环的输出(打印所有数组)与其余输出穿插在一起?

  2. 从 0 级发送到 0 级是可能/明智的 - 可以吗?(当然,假设发布了正确的匹配接收)。

  3. 我在输出中得到了很多非常奇怪的长数字,我认为这是某种内存覆盖问题或变量大小问题。有趣的是,这一定是由 MPI 通信引起的,因为我将 new_array 初始化为 9999.99 的值,而通信显然导致它被更改为这些奇怪的值。任何想法为什么?

总体而言,似乎发生了一些转置(矩阵的位似乎被转置了......),但绝对不是全部 - 正是这些奇怪的数字即将出现让我最担心!

0 投票
1 回答
126 浏览

c - MPI 通信中出现奇怪的双值 - 内存问题?

这确实是这个问题的后续,因为我认为我已经解决了原始问题提出的问题,但现在还有一些其他问题。

我有一些 MPI 代码正在执行矩阵转置。它通过使用 MPI_Isend 和 MPI_Irecv 的点对点非阻塞通信来执行此操作。我正在使用双打,我所有的 MPI 代码都使用 MPI_DOUBLE 作为类型。然而,我似乎遇到了一些奇怪的记忆问题——其中关键的一个是在我的输出中包含了“无意义”的数字。例如:

我可以猜到不知何故存在内存问题 - 我正在读取一些内存作为双倍,而不是当它不是时作为双倍写入内存。知道如何进行调试吗?

该代码可在此处获得,但我不希望对代码进行详细分析,更多关于如何使用 MPI 通信发生此类错误的提示,以及我可以做些什么来追踪错误。

只是为了确认我尝试过的几件事:数组的初始化不是问题。我已经尝试将数组初始化为一个已知值(999)并且最后没有出现在数组中,所以显然所有新值(包括疯狂的值)都来自 MPI 通信。

有任何想法吗?

0 投票
1 回答
3783 浏览

c - 使用 MPI_Type_create_subarray 发送时可以转置数组吗?

我正在尝试使用 C 中的 MPI 转置矩阵。每个进程都有一个方形子矩阵,我想将其发送到正确的进程(网格上的“相反”进程),并将其作为通信的一部分进行转置。

我正在使用MPI_Type_create_subarraywhich 有一个订单参数,MPI_ORDER_C或者MPI_ORDER_FORTRAN分别是行优先和列优先。我认为如果我作为其中之一发送,作为另一个接收,那么我的矩阵将作为通信的一部分被转置。然而,这似乎并没有发生 - 它只是保持非转置。

代码的重要部分如下,整个代码文件可在此 gist中获得。有谁知道为什么这不起作用?这种转置方法应该起作用吗?MPI_ORDER_C在阅读了and的描述后,我本以为会的MPI_ORDER_FORTRAN,但也许不是。

0 投票
2 回答
1258 浏览

c - 是否可以在程序的多个文件中使用 OpenMP 指令?

我有一个由多个 .c 文件和多个 .h 文件组成的 C 程序。我想#pragma omp parallel在 main 函数中有一个指令(以便所有线程只创建一次),然后像#pragma omp for在其他文件中一样执行其他 OpenMP 操作。

但是,我似乎无法做到这一点。private()在编译主文件时,它抱怨指令的和shared()位中提到的一些变量#pragma omp parallel不存在(在那个文件中它们不存在 - 因为它们在另一个文件中),并且在编译另一个时文件它抱怨我有一个#pragma omp for没有封闭的#pragma omp parallel.

代码在文件之间很好地分开,我不想把它全部放回一个文件中。有没有办法解决?

0 投票
6 回答
2177 浏览

mpi - 现在 MPI 在 HPC 中广泛使用吗?

现在 MPI 在 HPC 中广泛使用吗?

0 投票
1 回答
234 浏览

performance - 需要参考:硬件架构和性能提升【HPC/并行计算】

有几种方法/方法可以提高 HPC 应用程序的性能。其中一种方法是基于硬件架构微调应用程序。这种微调主要是在多核架构上完成的。为了使用这种方法,人们应该真正了解底层硬件架构,例如内存、插槽数、每个插槽的核心数、L1/L2 缓存、GFlops 等......

尽管这些技术术语看起来很熟悉,但我仍然不清楚它在应用程序性能方面的确切含义。

任何人都可以建议一个我可以从性能方面了解硬件架构的好地方/书。

0 投票
2 回答
522 浏览

visual-studio - 构建 Windows 集群

我是一名研究生,我想在家里用我的笔记本电脑构建一个 Windows 集群来测试我的并行代码。

问题是我使用的是 Windows 7 Home Premium,而不是服务器版本。

我正在使用 Visual Studio 2010 Ultimate,并安装了带有 SP1 的 Microsoft HPC Packs,并且能够在我的本地主机上模拟 MPI 代码而没有问题。现在我想看看真正的应用程序。

我家里还有另外 3 台笔记本电脑,上面安装了 windows 7 starter。他们没有安装 Visual Studio,因为我只有 1 个大学的许可证。

那么有没有办法用这些配置来构建一个windows集群呢??

0 投票
2 回答
336 浏览

azure - Windows HPC 服务器和 Azure

我读到可以将 Windows HPC 服务器与 Azure 一起使用。它说可以在本地的头节点上运行 HPC 服务器并使用云上的计算节点。

我的问题是我可以在 Azure 上创建一个头节点并使用 Azure 上的计算节点吗?如果有一些关于如何做到这一点的教程将会非常有帮助..

0 投票
1 回答
4671 浏览

c - #pragma omp for 中忽略折叠子句

我有以下使用 OpenMP 的 C 代码:

据我所知,我遵循使用带有#pragma omp for 指令的collapse 子句的规则,但是当我编译它时出现以下错误:

我在这里做错了什么?我试过把#pragma omp collapse它作为一个单独的指令,但这也不起作用。

0 投票
1 回答
934 浏览

c - 用于测试 MPI_Type_vector 因 seg 故障而崩溃的简单 MPI 代码 - 为什么?

我有以下代码,我用它来测试我如何在另一个程序中使用 MPI_Type_vector。我编写了这个小测试程序,以便检查我提供给 MPI_Type_vector 的参数,以确保它们提取了数组的正确部分。但是,它似乎无法正常工作 - 它在运行时会出现分段错误(即使它首先执行一些输出),我似乎无法弄清楚原因。

有任何想法吗?

代码如下。第一个函数 ( alloc_3d_int) 是由其他人提供给我的,但已经过很好的测试。