小编Wes*_*and的帖子

MVAPICH2缓冲区别名

我使用MVAPICH2启动了MPI程序,并收到此错误:

Fatal error in PMPI_Gather:
Invalid buffer pointer, error stack:
PMPI_Gather(923): MPI_Gather() failed
PMPI_Gather(857): Buffers must not be aliased
Run Code Online (Sandbox Code Playgroud)

我认为有两种方法可以解决此问题:

  1. 重写我的MPI程序(使用不同的缓冲区)
  2. 禁用检查缓冲区别名

有人知道我该如何使用MVAPICH2吗?一些编译器选项,参数,环境变量等?

像MV2_NO_BUFFER_ALIAS_CHECK之类的东西,但是它不起作用。

hpc mpi

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

带有 MPI_ANY_SOURCE 的 MPI Sendrecv

是否可以在一方不知道另一方的等级的情况下进行 MPI_Sendrecv 交换?如果不是,那么最好的方法是什么(我的下一个猜测就是一对发送和接收)?

例如,在 C 中,如果我想在等级 0 和其他等级之间交换整数,这种类型的事情是否可行?:

MPI_Status stat;
if(rank){
  int someval = 0;
  MPI_Sendrecv(&someval, 1, MPI_INT, 0, 1, &recvbuf, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &stat);
}else{
  int someotherval = 1;
  MPI_Sendrecv(&someotherval, 1, MPI_INT, MPI_ANY_SOURCE, someotherval, &recvbuf, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &stat);
}
Run Code Online (Sandbox Code Playgroud)

编辑:看起来这是不可能的。我将以下内容作为一种包装来添加我需要的功能。

void slave_sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
    int dest, int sendtag, void *recvbuf, int recvcount,
    MPI_Datatype recvtype, int source, int recvtag, MPI_Status *status){

    MPI_Send(sendbuf, sendcount, sendtype, dest, sendtag, MPI_COMM_WORLD);
    MPI_Recv(recvbuf, recvcount, recvtype, source, …
Run Code Online (Sandbox Code Playgroud)

c mpi

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

MPI 中 MPI_offset 的范围

我使用 MPI2.2 标准用 C 编写并行程序。我有 64 位机器。

/* MPI offset is long long*/

MPI_Offset my_offset; printf ("%3d: my offset = %lld\n", my_rank, my_offset);

int count; 
MPI_Get_count(&status, MPI_BYTE, &count);

printf ("%3d: read =%d\n", my_rank, count);
Run Code Online (Sandbox Code Playgroud)

我正在逐字节读取一个非常大的文件。为了并行读取文件,我正在使用偏移变量为每个进程设置偏移量。我对 MPI_offset 类型的数据类型感到困惑,那么"whither it is signed or unsigned"长?

我的第二个问题是关于 MPI_Get_count() 函数中使用的“计数变量范围”的限制。因为这里使用这个函数从每个进程的缓冲区中读取所有元素so i think it should also be of the long long type to read such a very large file.

c types mpi

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

MPI标准和Map-Reduce编程模型之间的比较?

正如我所学的,各种并行范例标准的基础知识,例如OpenMP,MPI,OpenCL,可以编写并行程序。但是我对Map-Reduce编程模型不了解很多。

众所周知,各种流行的公司都在遵循Map-Reduce编程模型来解决其庞大的数据密集型任务。MPI和MPI都是为大型并行计算机和工作站群集上的高性能计算而设计的。

所以我的第一个困惑是..我可以使用Map-Reduce模型代替MPI标准吗?反之亦然?还是取决于应用!

它们之间的确切区别是什么?

Which one is better and when?
Run Code Online (Sandbox Code Playgroud)

cloud mapreduce distributed-computing mpi

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

数据传输问题:MPI_Isend后跟MPI_Probe和MPI_Recv

我有以下代码

int main(int argc, char* argv[])
{
    int rank, size;

    MPI_Init (&argc, &argv);    
    MPI_Comm_rank (MPI_COMM_WORLD, &rank);  
    MPI_Comm_size (MPI_COMM_WORLD, &size);  

    MPI_Request mpiRequest;
    MPI_Status myStatus;
    int tag = 11;


    int testData = 12;
    MPI_Isend(&testData,1,MPI_INT,(rank+1)%size,tag,MPI_COMM_WORLD,&mpiRequest); 
    MPI_Wait (&mpiRequest,&myStatus);

    int source = (rank+size-1)%size;
    int sizeProb = MPI_Probe(source,tag,MPI_COMM_WORLD,&myStatus);
    int * recvTransferArray = new int [sizeProb];

    MPI_Recv(recvTransferArray,sizeProb,MPI_INT,source,tag,MPI_COMM_WORLD,&myStatus);

    MPI_Finalize();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是在sizeProb中我得到0,我应该得到1.

我可以使用MPI_ISend发送数据并使用MPI_Probe/MPI_Recv组合接收数据吗?

mpi

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

如何为每个任务 1 个 GPU 设置 slurm/salloc 但让作业使用多个 GPU?

我们正在寻求一些有关 slurm salloc GPU 分配的建议。目前,给出:

% salloc -n 4 -c 2 -gres=gpu:1
% srun env | grep CUDA   
CUDA_VISIBLE_DEVICES=0
CUDA_VISIBLE_DEVICES=0
CUDA_VISIBLE_DEVICES=0
CUDA_VISIBLE_DEVICES=0
Run Code Online (Sandbox Code Playgroud)

然而,我们希望使用的不仅仅是设备 0。
有没有办法用 srun/mpirun 指定 salloc 以获得以下内容?

CUDA_VISIBLE_DEVICES=0
CUDA_VISIBLE_DEVICES=1
CUDA_VISIBLE_DEVICES=2
CUDA_VISIBLE_DEVICES=3
Run Code Online (Sandbox Code Playgroud)

这是期望的,以便每个任务获得 1 个 GPU,但总体 GPU 使用量分布在 4 个可用设备中(请参阅下面的 gres.conf)。不是所有任务都获得 device=0 的地方。

这样,每个任务就不会像当前的情况一样等待设备 0 释放其他任务。

或者即使我们有超过 1 个可用/空闲的 GPU(总共 4 个)用于 4 个任务,这是否是预期的行为?我们遗漏或误解了什么?

  • salloc/srun 参数?
  • slurm.conf 或 gres.conf 设置?

总结我们希望能够使用 slurm 和 mpi,以便每个等级/任务使用 1 个 GPU,但作业可以在 4 个 GPU 之间分散任务/等级。目前看来我们仅限于设备 0。我们还希望避免由于 mpi 使用而在 salloc/sbatch 中多次提交 srun。

操作系统:CentOS …

gpu nvidia cluster-computing slurm

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

什么是MPI,MPICH和OPENMPI?在这种情况下,"实施"意味着什么?

我的问题对那些长期在场的人来说似乎很愚蠢,但我很感激你耐心为我详细阐述.

当他们说MPICH是MPI的"实现"时,它意味着什么?

以下类比是真的(?):如果我们将MPI视为FORTRAN编译器的一组标准,那么MPICH和OPENMPI是FORTRAN编译器的不同版本,如Intel.Fortran,Compaq.Fortran,GNU.Fortran和等等.

mpi openmpi mpich

3
推荐指数
1
解决办法
1058
查看次数

OpenMP可以扩展到包括图形处理器吗?

我正在阅读有关并行处理的OpenMP和其他主题,并发现其中大量声称CUDA或OpenCL将成为此类系统的未来.但是,我认为OpenMP的某些修改版本将是最佳解决方案,并且没有看到GPU不应该运行线程的原因.

所以我的问题是,GPU可以像CPU一样运行线程吗?可以扩展OpenMP以支持GPU吗?这有什么理论问题吗?

我读到最新的OpenMP标准支持GPU,但是没有一个实现.如果有实现,那么它比OpenCL使用的'内核'模型更好还是更差?

multithreading cuda gpu openmp opencl

3
推荐指数
1
解决办法
358
查看次数

差异;&和;; 在bash脚本中

我正在将一个bash脚本从一个Linux盒子复制到我的Mac笔记本电脑上,在这个过程中,脚本开始抱怨使用它;&.

有错误:

./build.sh:line 122:意外标记附近的语法错误`;'
./build.sh:line 122:`;&'

脚本中有一些用法,但简短的用法是:

case ${OPTION} in
    xxx)
        export DEVICES=xxx
         ;;
    yyy)
        export DEVICES=yyy
         ;;
    *)
        echo "${OPTION}: Unknown device type:  use xxx|yyy"
        exit 1
        ;&
    esac
;;
Run Code Online (Sandbox Code Playgroud)

我已经更换了所有的用法;&;;这一切都很好,但我仍然好奇,我做了什么.案例陈述中分号符号和双分号之间的区别是什么?

linux macos bash

3
推荐指数
1
解决办法
609
查看次数

发生异常时未调用 MPI 错误处理程序

在过去的几天里,我一直在尝试使用 MPI 用 C 语言编写容错应用程序。我正在尝试学习如何将错误处理程序附加到 MPI_COMM_WORLD 通信器,以便在节点出现故障(可能是由于崩溃)的情况下并退出而不调用 MPI_Finalize() 程序仍然可以从这种情况中恢复并继续计算。

到目前为止,我遇到的问题是,在我将错误处理程序函数附加到通信并导致节点崩溃后,MPI 不会调用错误处理程序,而是强制所有线程退出。

我认为这可能是我的应用程序的问题,所以我在线查找示例代码并尝试运行它,但情况是相同的...我当前尝试运行的示例代码如下。(我从这里得到https://www.google.co.uk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.shodor.org% 2Fmedia%2Fcontent%2F%2Fpetascale%2Fmaterials%2FdistributedMemory%2Fpresentations%2FMPI_Error_Example.pdf&ei=jq6KUv-BBcO30QW1oYGABg&usg=AFQjCNFa5L_Q6Irg3VrJ3fsQBIyqjBlSgA&sig2=8An4SqBvhCACx5YLwB mROA对 PDF 格式表示歉意,但它不是我写的,所以我现在粘贴下面相同的代码):

/* Template for creating a custom error handler for MPI and a simple program 
to demonstrate its' use. How much additional information you can obtain 
is determined by the MPI binding in use at build/run time. 

To illustrate that the program works correctly use -np 2 through -np 4.

To illustrate an MPI error set victim_mpi = 5 and use -np 6. …
Run Code Online (Sandbox Code Playgroud)

c fault-tolerance mpi

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