|
cgma
|
#include <iostream>#include <stdio.h>#include <string.h>#include <sys/resource.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include "CGMmpi.h"#include "iGeom.h"Go to the source code of this file.
Defines | |
| #define | IGEOM_ASSERT(ierr) if (ierr!=0) printf("igeom assert\n"); |
| #define | IGEOM_NULL 0 |
| #define | STRINGIFY(S) XSTRINGIFY(S) |
| #define | XSTRINGIFY(S) #S |
Functions | |
| void | util_getrusage (struct rusage &r_usage) |
| int | main (int argc, char *argv[]) |
| #define IGEOM_ASSERT | ( | ierr | ) | if (ierr!=0) printf("igeom assert\n"); |
Definition at line 18 of file partest.cpp.
| #define IGEOM_NULL 0 |
Definition at line 19 of file partest.cpp.
| #define STRINGIFY | ( | S | ) | XSTRINGIFY(S) |
Definition at line 21 of file partest.cpp.
| #define XSTRINGIFY | ( | S | ) | #S |
Definition at line 22 of file partest.cpp.
| int main | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 26 of file partest.cpp.
{
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &size );
printf("Hello\n");
iGeom_Instance igeom;
int ierr;
igeom = IGEOM_NULL;
iGeom_newGeom("PARALLEL", &igeom, &ierr, 8);
IGEOM_ASSERT(ierr);
// check command line arg
const char* filename = 0;
int nMethod = 1;
std::string options;
if (argc == 3) {
filename = argv[1];
nMethod = atoi(argv[2]);
}
else {
if (rank == 0) {
printf("Usage: %s [<filename>] [<send_methond>]\n", argv[0]);
printf("No file specified. Defaulting to: %s\n", "Moto.brep");
printf("No send method specified. Defaulting to: read_delete\n");
}
filename = STRINGIFY(SRCDIR)"/../test/Moto.brep";
nMethod = 1;
}
// set geometry send method
if (nMethod == 0) options += "PARALLEL=READ;";
else if (nMethod == 1) options += "PARALLEL=READ_DELETE;";
else if (nMethod == 2) options += "PARALLEL=BCAST;";
else if (nMethod == 3) options += "PARALLEL=BCAST_DELETE;";
else if (nMethod == 4) options += "PARALLEL=SCATTER;";
else if (nMethod == 5) options += "PARALLEL=SCATTER_DELETE;";
else if (nMethod == 6) options += "PARALLEL=READ_PARALLEL;";
else {
printf("Send method %d is not supported. Defaulting to: read_delete\n", nMethod);
options = "READ_DELETE;";
}
// do body partitioning with round robin distribution
options += "PARTITION=GEOM_DIMENSION;PARTITION_VAL=3;PARTITION_DISTRIBUTE;";
struct rusage r_usage;
long int rss_before, rss_after, size_before, size_after;
static size_t pagesize = getpagesize();
if (rank == 0) {
util_getrusage(r_usage);
rss_before = r_usage.ru_maxrss*pagesize;
size_before = r_usage.ru_idrss*pagesize;
}
double tStart = MPI_Wtime();
iGeom_load(igeom, filename, options.c_str(), &ierr, strlen(filename), options.length());
MPI_Barrier(MPI_COMM_WORLD);
double tEnd = MPI_Wtime();
if (rank == 0) {
util_getrusage(r_usage);
rss_after = r_usage.ru_maxrss*pagesize;
size_after = r_usage.ru_idrss*pagesize;
printf("proc=%d, rss_before=%ld, size_before=%ld\n", rank, rss_before, size_before);
printf("proc=%d, rss_after=%ld, size_after=%ld\n", rank, rss_after, size_after);
}
IGEOM_ASSERT(ierr);
printf("Done. Geometry load time is %f\n", tEnd - tStart);
MPI_Finalize();
}
| void util_getrusage | ( | struct rusage & | r_usage | ) |
Definition at line 105 of file partest.cpp.
{
getrusage(RUSAGE_SELF, &r_usage);
// this machine doesn't return rss - try going to /proc
// print the file name to open
if (r_usage.ru_maxrss == 0) {
char file_str[4096], dum_str[4096];
int file_ptr = -1, file_len;
file_ptr = open("/proc/self/stat", O_RDONLY);
file_len = read(file_ptr, file_str, sizeof(file_str)-1);
if (file_len == 0) return;
close(file_ptr);
file_str[file_len] = '\0';
// read the preceeding fields and the ones we really want...
int dum_int;
unsigned int dum_uint, vm_size, rss;
static int page_size = getpagesize();
int num_fields = sscanf(file_str,
"%d " // pid
"%s " // comm
"%c " // state
"%d %d %d %d %d " // ppid, pgrp, session, tty, tpgid
"%u %u %u %u %u " // flags, minflt, cminflt, majflt, cmajflt
"%d %d %d %d %d %d " // utime, stime, cutime, cstime, counter, priority
"%u %u " // timeout, itrealvalue
"%d " // starttime
"%u %u", // vsize, rss
&dum_int,
dum_str,
dum_str,
&dum_int, &dum_int, &dum_int, &dum_int, &dum_int,
&dum_uint, &dum_uint, &dum_uint, &dum_uint, &dum_uint,
&dum_int, &dum_int, &dum_int, &dum_int, &dum_int, &dum_int,
&dum_uint, &dum_uint,
&dum_int,
&vm_size, &rss);
if (num_fields == 24) {
r_usage.ru_maxrss = rss/page_size;
r_usage.ru_idrss = vm_size/page_size;
}
}
}