#include #include #include #include #include "common.h" // // saving parameters // #define SAVEFREQ 10 inline int min( int a, int b ) { return a < b ? a : b; } inline int max( int a, int b ) { return a > b ? a : b; } void apply_all_forces(particle_t*, int, char); //defined in nbody_kernel.cu int main( int argc, char **argv ) { if( find_option( argc, argv, "-h" ) >= 0 ) { printf( "Options:\n" ); printf( "-h to see this help\n" ); printf( "-t to enable step-by-step timing\n" ); printf( "-n to set the number of particles\n" ); printf( "-s to set the number of timesteps\n" ); printf( "-o to specify the output file name\n" ); return 0; } int step,i,j; char timing = 'n'; int n = read_int( argc, argv, "-n", 1000 ); int NSTEPS = read_int( argc, argv, "-s", 100); if( find_option(argc, argv, "-t" ) >= 0 ) timing = 'y'; char *savename = read_string( argc, argv, "-o", NULL ); FILE *fsave = savename ? fopen( savename, "w" ) : NULL; particle_t *particles = (particle_t*) malloc( n * sizeof(particle_t) ); set_size( n ); init_particles( n, particles ); for( step = 0; step < NSTEPS; step++ ) { // // compute forces // apply_all_forces(particles, n, timing); // This function is in kernel.cu // // move particles // for(i = 0; i < n; i++ ) move( &(particles[i]) ); // // save if necessary // if( fsave && (step%SAVEFREQ) == 0 ) save( fsave, n, particles ); } printf( "n = %d\n", n); free( particles ); if( fsave ) fclose( fsave ); return 0; }