#include "mpi.h" #include #include #include #include "EasyBMP.h" #include #include //#define INPUT_IMAGE "Vit.bmp" #define INPUT_IMAGE "Velka_fotka2.bmp" #define MEASURES_COUNT 100 #define THREADS 2 using namespace std; void flipBMP(BMP& bmp, int actualProcess, int maxProcesses, int threads); void flip_column(BMP& bmp, int column,int height); /******************************************************************************/ /** * MAIN */ int main(int argc, char** argv) { int o; double sum; //Count overhead LARGE_INTEGER start, stop, frequency; long overhead; QueryPerformanceFrequency(&frequency); QueryPerformanceCounter(&start); QueryPerformanceCounter(&stop); overhead = stop.QuadPart-start.QuadPart; /* LOAD IMAGE */ cout << "\r\n" << " Cteni zdrojoveho souboru...\r\n"; BMP image; image.ReadFromFile(INPUT_IMAGE); cout << "Probiha mereni: \r\n" ; /* INIT MPI */ int numprocs, rank, namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Get_processor_name(processor_name, &namelen); /* THREADS */ omp_set_num_threads (THREADS); cout << "Pocet vlaken: " << THREADS << " \r\n" ; /* MPI PART */ /* -- MEASUREMENT */ //Retry the same measurement on instance sum = 0; for( o = 1; o<=MEASURES_COUNT; o++ ) { //Time diff QueryPerformanceCounter(&start); flipBMP(image, rank, numprocs, THREADS); //flip image QueryPerformanceCounter(&stop); sum+=1000*(stop.QuadPart - start.QuadPart - overhead)/(double)frequency.QuadPart; } /* -- RESULTS */ cout << "Process "<>1; //height / 2 for(int i =0;i=width || (np-1)==iam )to = width-1; //flip columns for(int i=from; i<=to; i++) { flip_column(bmp,i,height); } } }