gpt4 book ai didi

c - 用简单的 MPI 代码读写测试文件时出错

转载 作者:行者123 更新时间:2023-12-02 00:05:12 24 4
gpt4 key购买 nike

我有一个 MPI 代码,其中进程读取二进制文件并再次将其写回。数据分布的方式是进程 0 读取(然后写入)文件的前半部分,而进程 1 读取(然后写入)文件的后半部分。现在这里的问题是输入和输出文件不匹配(diff 表明它们不同)。如果只有 1 个进程,则一切正常。有人可以指出出了什么问题吗?

使用OpenMPI,编译为:mpicc -Wall test_mpi.c -o test_mpi
运行方式:mpirun -np 2 ./test_mpi

提前致谢。

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

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

int rank, np, i; //np = no. of processes
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &np);

int filesize = 48*1048576; //input filesize 48MB

double *data = (double*) malloc (filesize/np);
FILE* fpa;
fpa = fopen ( "512_featurevec.out", "rb");
fseek(fpa, filesize/np*rank, SEEK_SET);
printf("read: %d\n", (int)fread(&data[0], sizeof(double), filesize/(np*sizeof(double)), fpa));
fclose(fpa);

char* outfile = "outfile.txt";
for(i=0; i<np; i++) {
if(rank == i) {
fpa = fopen ( outfile, "ab");
fseek(fpa, filesize/np*rank, SEEK_SET);
fwrite ( &data[0], sizeof(double), filesize/(np*sizeof(double)), fpa);
fclose ( fpa );
}
}

free(data);
MPI_Finalize();
exit(0);
}

最佳答案

看起来问题是由于每个 child 都打开文件进行写入,这导致了争用。

尝试让文件名取决于等级(例如,写入 out file.txt.(rank) 并查看是否所有输出都匹配。

关于c - 用简单的 MPI 代码读写测试文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com