首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试读取大文件时,MPI_File_read_at_all提供了无效的计数参数

尝试读取大文件时,MPI_File_read_at_all提供了无效的计数参数
EN

Stack Overflow用户
提问于 2018-02-06 20:12:32
回答 1查看 584关注 0票数 0

我编写了一个简单的C程序来试用MPI-IO;该程序读取一个文本文件,每个进程输出它读取的部分的第一个字符。这个程序在不同的大小(100KB,30MB,500MB,2.5 got )下运行良好,但当我尝试7.5 got的文件时,我得到了这个错误:

代码语言:javascript
复制
Invalid count, error stack:
MPI_FILE_IREAD_AT(104): Invalid count argument

我尝试了集合方法(MPI_File_read_at_all)和独立方法(MPI_File_read),它们都无法读取7.5 to的文件。这是负责读取的代码:

代码语言:javascript
复制
MPI_File fh;
MPI_Offset total_number_bytes, number_bytes;
long long nchars;
int errclass, resultlen;
char err_buffer[MPI_MAX_ERROR_STRING];    

MPI_File_open(MPI_COMM_WORLD, "bigfastq", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
MPI_File_get_size(fh, &total_number_bytes);

number_bytes = total_number_bytes/size;
nchars = number_bytes/sizeof(char);
//char buf[nchars+1];
char *buf = (char*)malloc(sizeof(char)*nchars);
MPI_Offset offset = rank*number_bytes;

int err = MPI_File_read_at_all(fh, offset, buf, nchars, MPI_CHAR, &status);
if(err != MPI_SUCCESS){
    MPI_Error_class(err,&errclass);
    if (errclass== MPI_ERR_COUNT) {
        printf("Invalid count class!!\n");
    }
    MPI_Error_string(err,err_buffer,&resultlen);
    fprintf(stderr,err_buffer);

    MPI_File_close(&fh);
    MPI_Finalize();
    return 0;
}

MPI_File_close(&fh);

printf("rank: %d, buf[%lld]: %c, count: %lld\n", rank, offset, buf[offset], count);


MPI_Finalize();

你知道为什么在尝试7.5 it的文件时会出现这个错误吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-06 20:31:14

计数第四个参数( MPI_File_read_at_all() )是一个int。因此,您的long long可能会被截断为负整数。

您可以创建一个较大的派生数据类型,以便count适合有符号整数,或者执行几次较短的读取。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48642828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档