added logic for getting number of cpus

git-svn-id: svn://anubis/gvsu@316 45c1a28c-8058-47b2-ae61-ca45b979098e
This commit is contained in:
josh 2008-12-06 20:19:17 +00:00
parent 83ae452669
commit 3937191f37

View File

@ -13,7 +13,7 @@ using namespace std;
bool createWindow(int width, int height,
SDL_Surface ** screen, Uint32 ** pixels);
void getSizes(int * rank, int * size);
void getSizes(int * rank, int * size, int * nprocs);
int main(int argc, char * argv[])
{
@ -21,11 +21,17 @@ int main(int argc, char * argv[])
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)
{
createWindow(width, height, &screen, &pixels);
for (int y = 0; y < height; y++)
{
@ -52,6 +58,8 @@ int main(int argc, char * argv[])
break;
}
}
}
MPI_Finalize();
return 0;
@ -80,8 +88,35 @@ bool createWindow(int width, int height,
return true;
}
void getSizes(int * rank, int * size)
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;
}
}