Файл результатов MPI все идет в файл .o [ошибка ввода-вывода файла] - PullRequest
0 голосов
/ 24 февраля 2019

Поскольку доступ к серверу моей школы возможен только по моему школьному IP, извините за отсутствие скриншотов.Я объясню подробно.

Ниже приведен основной файл (не важно).

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

/** distributing numbers to each node(e.g. distributing 1~100 numbers to 7 nodes: node 1 get 1, 8, 15, 22, ... node 2 get 2, 9, ...) **/    
qu = new mpi_que[size];
for (int i = 1; i <= size; i++) {
    qu[i-1].setId(i);
    qu[i-1].allocate(repeat_number, size - 1);
}

if (myid == MASTER_ID) // 0
    Master();
else
    Slave();

MPI_Finalize();

и это подчиненная функция.

void Slave() {
    //printf("I am Slave %d out of %d\n", myid, size - 1);

    Sand s(w, h);

    while (!qu[myid - 1].isFinished()) {
        int id_now = qu[myid - 1].current_id();
        int seed = time(NULL) + id_now;

        /** Do some Jobs**/
        string filename = "./data/avalanche" + ToString(w) + "x" + ToString(h) + "_drop" + ToString(count) + "_id" + ToString(id_now) + ".binary";
        writemod(aftershock, aftershock_length, filename);

        qu[myid - 1].finishOneJob();
    }
}

qu - глобальный указатель, которыйЯ сделал.Я не думаю, что здесь возникает ошибка.что делает qu изменяет значение id_now в каждом цикле, и поэтому имя файла меняет каждый цикл.

Ниже приведена функция writemod.

#define WRITE_VAR(_stream, v)   (_stream.write( (char *)(&(v)), sizeof(v)   ))

void writemod(afterBig a[], int len, string path) {

    ofstream outFile((path).c_str(), ios::binary);

    WRITE_VAR(outFile, len);
    for (int i = 0; i < len; i++) {
        WRITE_VAR(outFile, a[i].big_size);
        WRITE_VAR(outFile, a[i].after_size);
    }

    outFile.close();
}

В любом случае, когда я запускаю этот файл, происходит то, что

если я запускаю этот файл, все данные выходного файла, похоже, отправляются в файл [jobname] .o [jobid] (выходной текстовый файл по умолчанию).Это 8,7 Гб, поэтому я даже не могу открыть его с помощью emacs, чтобы увидеть, что произошло.

...