Liczenie znaków pliku tekstowego przy użyciu MPI

0

Witam, ostatnio dostałem pewne zadanie na uczelni i nie mogę się z nim jakoś uporać. Jak w temacie, mam zrobić program który będzie otwierał plik tekstowy oraz liczył ile jest w nim zapisanych znaków (synchronicznie).
Nie oczekuję gotowej odpowiedzi, chociaż bym taką nie pogardził.
Spędziłem dzisiaj dużo czasu na szukaniu przykładów i podpowiedzi które mogłyby mi pomóc, jednak nie udało mi się znaleźć nic nawet częściowo podobnego (zarówno w języku Polskim jak i Angielskim). Wszystkim dobrze znany Stack też nie pomógł.
Byłbym wdzięczny za podpowiedzi lub jeśli jest tutaj ktoś znający się na tym i ma chwilę, oraz oczywiście chęć, za większą pomoc

0

a po co do tego MPI?
Planujesz czytać pliki powyżej 18 exabajtów?

0

Ja nie, ale jak napisałem takie mam zadanie. Tak wymyślił wykładowca

1

Nie wiem nic o MPI, ale wyguglanie przykładów zajęło mi z jakieś 30 sekund

0

Mogłem używać złych słów kluczowych przy wyszukiwaniu. Zdarza się najlepszym.
Udało mi się dojść do takiego kodu:

#include "stdafx.h"
#include "mpi.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stack>

using namespace std;

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

	int   numprocs, rank, buffer[100];

	MPI_Init(&argc, &argv);
	MPI_Comm_rank(MPI_COMM_WORLD, &rank);
	MPI_Comm_size(MPI_COMM_WORLD, &numprocs);

	MPI_Status status;
	MPI_File fh;
	MPI_Offset size;
	int char_number;
	const char plik[10] = "file.txt";

	MPI_File_open(MPI_COMM_WORLD, plik, MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
	MPI_File_get_size(fh, &size);
	
	MPI_File_set_view(fh, rank*(size / numprocs), MPI_CHAR, MPI_CHAR, "native", MPI_INFO_NULL);

	MPI_File_read(fh, &buffer[100], 1, MPI_CHAR, &status);

	char_number = MPI_File_get_size(fh, &size);
	MPI_File_close(&fh);


	if (rank == 0) {

		for (int i = 0; i < numprocs; i++) {
			MPI_Recv(&char_number, i, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
		}
	}

	else {
		MPI_Send(&char_number, 0, MPI_INT, 0, 3, MPI_COMM_WORLD);
	}


	MPI_Finalize();

	return 0;
}

Jednak ten kod powoduje breakpoint'y przy debugowaniu, a informacje dostarczone przez debugger nic mi nie mówią.
Wykładowca odpisał na maila, że kod jest dobry, tylko żebym się zajął tym co wywołuje zatrzymanie programu.
Posiedziałem nad nim dzisiaj trochę, jednak nie mam na to pomysłu. Byłbym bardzo wdzięczny za dalszą pomoc

@Edit Udało mi się dokończyć to zadanie, temat można zamknąć!

1 użytkowników online, w tym zalogowanych: 0, gości: 1