/* * Josh Holtrop * 2008-12-11 * barebones SDL program */ #include #include #include using namespace std; #define PROGNAME "Josh's CS677 Final : MPI Fractal Generator" bool createWindow(int width, int height, SDL_Surface ** screen, Uint32 ** pixels); void getSizes(int * rank, int * size, int * nprocs); int main(int argc, char * argv[]) { int width = 800; int height = 600; int my_rank; int world_size; int nprocs; SDL_Surface * screen; Uint32 * pixels; MPI_Init(&argc, &argv); getSizes(&my_rank, &world_size, &nprocs); if (my_rank == 0) { bool window_success = createWindow(width, height, &screen, &pixels); if (window_success) { for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { *pixels++ = (((x * 255 / width) & 0xFF) << 8) + ((y * 255 / height) & 0xFF); } } SDL_UpdateRect(screen, 0, 0, 0, 0); bool going = true; SDL_Event event; while (going && SDL_WaitEvent(&event) != 0) { switch (event.type) { case SDL_QUIT: going = false; break; case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_q) going = false; break; } } } } MPI_Finalize(); return 0; } bool createWindow(int width, int height, SDL_Surface ** screen, Uint32 ** pixels) { if (SDL_Init(SDL_INIT_VIDEO)) { cerr << "Failed to initialize SDL!" << endl; return false; } atexit(SDL_Quit); if (!(*screen = SDL_SetVideoMode(width, height, 32, 0))) { cerr << "Failed to set video mode!" << endl; return false; } SDL_WM_SetCaption(PROGNAME, PROGNAME); *pixels = (Uint32 *) (*screen)->pixels; return true; } void getSizes(int * rank, int * size, int * nprocs) { MPI_Comm_rank(MPI_COMM_WORLD, rank); MPI_Comm_size(MPI_COMM_WORLD, size); *nprocs = sysconf(_SC_NPROCESSORS_CONF); int displs[*size]; int counts[*size]; for (int i = 0; i < *size; i++) { displs[i] = i; counts[i] = 1; } int all_nprocs[*size]; MPI_Gatherv(nprocs, 1, MPI_INT, &all_nprocs[0], &counts[0], &displs[0], MPI_INT, 0, MPI_COMM_WORLD); if (*rank == 0) { int total_nprocs = 0; cout << "Number of cores on each MPI node:" << endl; for (int i = 0; i < *size; i++) { cout << all_nprocs[i] << " "; total_nprocs += all_nprocs[i]; } cout << endl; cout << "Total number of cores: " << total_nprocs << endl; } }