如何使用和解释MPI-IO错误代码? [英] How to use and interpret MPI-IO Error codes?

查看:369
本文介绍了如何使用和解释MPI-IO错误代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include <stdio.h>
#include <iostream>
#include <Windows.h>
#include <C:\Program Files\Microsoft MPI\Inc\mpi.h>

using namespace std;


#define BUFSIZE 128


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

    int err;
    int rank;
    int size;
    double start_time = 0.0;
    double end_time;
    MPI_Comm comm = MPI_COMM_WORLD;
    MPI_File file;

    char cbuf[BUFSIZE];

    for(int i = 0; i < BUFSIZE; i++)
    {
        cbuf[i] = 'a' + i;
    }

    if(err = MPI_Init(&argc, &argv))
    {
        printf("%s \n", "Error! MPI is halted!");
        MPI_Abort(comm, err);
    }

    MPI_Comm_size(comm, &size);
    MPI_Comm_rank(comm, &rank);


    if(rank == 0)
    {
        start_time = MPI_Wtime();
    }

    err = MPI_File_open(comm, "testfile", MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL, &file);

    if(err != MPI_SUCCESS)
    {
        printf("Error %d! Can't open the file!\n", err);
        MPI_Abort(comm, err);
        return EXIT_FAILURE;
    }

    err = MPI_File_set_view(file, (MPI_Offset) (rank * BUFSIZE * sizeof(char)), MPI_CHAR, MPI_CHAR, "native", MPI_INFO_NULL);

    if(err != MPI_SUCCESS)
    {
        printf("%s \n", "Error! Can't set the view!");
        MPI_Abort(comm, err);
        return EXIT_FAILURE;
    }

    err = MPI_File_write(file, cbuf, BUFSIZE, MPI_CHAR, MPI_STATUSES_IGNORE);

    if(err != MPI_SUCCESS)
    {
        printf("%s \n", "Error! Problems with writing!");
        MPI_Abort(comm, err);
        return EXIT_FAILURE;
    }


    MPI_File_close(&file);

    if(rank == 0)
    {
        end_time = MPI_Wtime();
        printf("Time elapsed : %f seconds", (end_time - start_time) * 1000);
    }

    MPI_Finalize();

    return EXIT_SUCCESS;
}

我正在尝试使用MPI将一些符号写入文件.当我这样做时,我得到288的错误代码,并且无法打开该文件.我使用了命令行:mpiexec -n 10 myapp.exe.我正在搜索错误代码,但什么也没找到.

I'm trying to write some symbols to a file with MPI. When I do that, I get an errorcode of 288 and the file can't be opened. I used command line: mpiexec -n 10 myapp.exe. I was searching for the errorcode but didn't find anything at all.

推荐答案

再走一步.您的错误代码本身并不意味着任何东西.但是,您可以将该代码提供给MPI_Error_string并获得更易于理解的内容.我编写的每个MPI-IO代码都具有此功能:

Go one step further. Your error code doesn't mean anything by itself. But, you can feed that code to MPI_Error_string and get something more human readable. I have this function in every MPI-IO code I write:

static void handle_error(int errcode, char *str)
{       
    char msg[MPI_MAX_ERROR_STRING];
    int resultlen;
    MPI_Error_string(errcode, msg, &resultlen);
    fprintf(stderr, "%s: %s\n", str, msg);
    MPI_Abort(MPI_COMM_WORLD, 1);
}

然后定义此宏:

#define MPI_CHECK(fn) { int errcode; errcode = (fn);\
     if (errcode != MPI_SUCCESS) handle_error  (errcode, #fn ); }

所以我可以这样调用例程:

So I can call routines like this:

CHECK(MPI_File_open(comm, "testfile", 
    MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL, &file) );

这篇关于如何使用和解释MPI-IO错误代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆