标签: mpi

OpenMPI 分段故障:地址未映射

在开发基于 OpenMPI 的程序期间,我有时会遇到分段错误:

[11655] *** Process received signal ***
[11655] Signal: Segmentation fault (11)
[11655] Signal code: Address not mapped (1)
[11655] Failing at address: 0x10
[11655] [ 0] /usr/lib/libpthread.so.0(+0x11940)[0x7fe42b159940]
[11655] [ 1] /usr/lib/openmpi/openmpi/mca_btl_vader.so(mca_btl_vader_alloc+0xde)[0x7fe41e94717e]
[11655] [ 2] /usr/lib/openmpi/openmpi/mca_btl_vader.so(mca_btl_vader_sendi+0x22d)[0x7fe41e949c5d]
[11655] [ 3] /usr/lib/openmpi/openmpi/mca_pml_ob1.so(+0x806f)[0x7fe41e30806f]
[11655] [ 4] /usr/lib/openmpi/openmpi/mca_pml_ob1.so(mca_pml_ob1_send+0x3d9)[0x7fe41e308f29]
[11655] [ 5] /usr/lib/openmpi/libmpi.so.12(MPI_Send+0x11c)[0x7fe42b3df1cc]
[11655] [ 6] project[0x400e41]
[11655] [ 7] project[0x401429]
[11655] [ 8] project[0x400cdc]
[11655] [ 9] /usr/lib/libc.so.6(__libc_start_main+0xea)[0x7fe42adc343a]
[11655] [10] project[0x400b3a]
[11655] *** End of error message ***
[11670] *** …
Run Code Online (Sandbox Code Playgroud)

c mpi openmpi

0
推荐指数
1
解决办法
2万
查看次数

MPI 上的文件 –np 上出现 execvp 错误

当我尝试使用此命令运行 c 文件时mpirun \xe2\x80\x93np 2 ./ hellow\nit 返回[proxy:0:0@suganthan-VirtualBox] HYDU_create_process (utils/launch/launch.c:74): execvp error on file ./ (Permission denied).\n我无法解决此错误。谁能建议任何方法来解决它?

\n

mpi

0
推荐指数
1
解决办法
4111
查看次数

多进程 MPI 与多线程 std::thread 性能

我编写了一个简单的测试程序来比较使用 MPI 并行化多个进程的性能,或者使用std::thread. 并行化的工作只是写入一个大数组。我看到的是,多进程 MPI 的性能远远优于多线程。

测试代码为:

#ifdef USE_MPI
#include <mpi.h>
#else
#include <thread>
#endif
#include <iostream>
#include <vector>

void dowork(int i){
    int n = 1000000000;
    std::vector<int> foo(n, -1);
}

int main(int argc, char *argv[]){
    int npar = 1;
#ifdef USE_MPI
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &npar);
#else
    npar = 8;
    if(argc > 1){
        npar = atoi(argv[1]);
    }
#endif
    std::cout << "npar = " << npar << std::endl;

    int i;

#ifdef USE_MPI
    MPI_Comm_rank(MPI_COMM_WORLD, &i);
    dowork(i);
    MPI_Finalize();
#else
    std::vector<std::thread> threads;
    for(i …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing performance multithreading mpi

0
推荐指数
1
解决办法
1122
查看次数

DPC++ &amp; MPI、缓冲区、共享内存、变量声明

我是 DPC++ 的新手,我尝试开发一个基于 MPI 的 DPC++ 泊松解算器。我读了这本书,对缓冲区和指针与共享或主机内存感到非常困惑。这两件事有什么区别,我开发代码时应该使用什么。

现在,我使用由具有 const 大小的 std::array 初始化的缓冲区作为串行代码,并且效果良好。然而,当我将 DPC++ 代码与 MPI 耦合时,我必须为每个设备声明本地长度,但我没有这样做。这里我附上我的代码

    define nx 359
    define ny 359
    constexpr int local_len[2];
    global_len[0] = nx + 1;
    global_len[1] = ny + 1;

    for (int i = 1; i < process; i++)
    {
        if (process % i == 0)
        {
            px = i;
            py = process / i;
            config_e = 1. / (2. * (global_len[1] * (px - 1) / py + global_len[0] * (py - 1) / …
Run Code Online (Sandbox Code Playgroud)

c++ mpi sycl intel-oneapi dpc++

0
推荐指数
1
解决办法
187
查看次数

从n个整数计算最小值

我需要编写一个C函数来计算n个输入的最小值,并在数组中按升序插入它们.输入没什么特别之处.所有正数和<100.棘手的部分是结果来自阻塞MPI_Recv(),输出不仅要计算n个输入的当前最小值,还需要跟踪已经插入的值结果数组,以便它们可以作为未来n个输入组的考虑因素.

简而言之,MPI master将masterArray(填充随机整数)拆分为subArrays.从属服务器对subArrays进行排序并将其返回给主服务器.然后,master必须将已排序的subArrays拼接回一个已排序的finalArray(除非我可以重用masterArray).主机获取n个subArrays,取决于从机的数量,需要选择,比如第一次,n个数组中n个值中的最小值,然后需要将指针前进到从中挑选的数组,所以该价值将不再被考虑.这需要做,直到所有值按升序传输到finalArray.

我存储已排序的subArrays的方式,因为它们来自master的Recv,是memcpy()临时数组的每个chunkSize元素,其中chunkSize = ARRAY_SIZE /(nprocs-1)到我调用的1D数组,semiSortedArrays.

首先,我不太确定如何定义一个接受n值的函数.我无法跟踪所有指针以及如何将n个参数传递给函数调用.我真的很感激一些帮助,因为我很困惑.

非常感谢,斯科特

c arrays sorting mpi

-5
推荐指数
1
解决办法
168
查看次数