打印2D Matrix文件,在MPI c程序中获取错误数据

时间:2014-09-28 18:51:35

标签: c file-io matrix mpi

int fh = open (filename, O_RDONLY);
int **InputBuffer;
InputBuffer = (int **)malloc(rowLocal * sizeof(int));
for (i = 0; i < rowLocal; i++)
{
    InputBuffer[i] = (int*)malloc(clmLocal * sizeof(int));
}
lseek(fh, rowLocal * clmLocal * sizeof(int) * MyRank,SEEK_SET);
for (index = 0; index < rowLocal; index++)
{
    for (i = 0; i < clmLocal; i++)
    {
        int readchk = read (fh,&(InputBuffer[index][i]),sizeof(int));
    }
}

for (index = 0; index < rowLocal; index++)
{
    for (i = 0; i < clmLocal; i++)
    {
        printf(" %d \t",InputBuffer[index][i]);
    }
}

它输错了输出:

Rank 1 of 2 processes
 6475664     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   End of File for process 1 
Rank 0 of 2 processes
 540614708   540221496   171319349   540287026   540221493   170926129   540483637   540155956   171384881   540352564   540221497   170926130   540614707   540024881   171057205   540352562   540024881   170991670   End of File for process 0 

实际档案: 猫测试 4 9 8 3 5 6 2 4 5 3 1 0 5 7 4 2 1 7 4 5 9 3 2 0 3 9 1 0 5 2 2 5 1 0 6 1

整个它是一个MPI C程序。任何人都可以帮忙,让我知道我哪里出错了。

解决方案:读取是二进制操作不读取文本文件。尝试读取二进制文件时问题已解决。感谢每一位人士的帮助。

1 个答案:

答案 0 :(得分:0)

问题可能是ASCII文本被生成为输入...而read()读取二进制数据。

引用here,流级I / O更灵活,通常更方便;因此,程序员通常只在必要时才使用描述符级函数。

您可以切换到stdio.h documentation。 open变得fopen而lseek变成fseek。如果您的输入是ASCII,那么fscanf(pFile,"%d",&(InputBuffer[index][i]));也许可以做到这一点。