int main( int argc, char *argv[]) { if (argc < 2) { printf("Usage: NTHREADS\n"); return 0; } NTHREADS = atoi(argv[1]); InitSettings (); InitCoordinates(INPARAMS numMoles, BOXSIZE, perturb); InitVelocities (INPARAMS timeStep); InitForces (); CREATE_TM_THREADS( NTHREADS ); do_libtm_work(); DESTROY_TM_THREADS( NTHREADS ); printf("\n"); free(x); free(f); free(vh); free(inter); return 0; }
int main( int argc, char *argv[]) { if (argc < 2) { printf("Usage: ./moldyn NUM_THREADS\n"); return 1; } NTHREADS = atoi(argv[1]); int i; InitSettings (); InitCoordinates(INPARAMS numMoles, BOXSIZE, perturb); InitVelocities (INPARAMS timeStep); InitForces (); //Mike: added this to compensate for moving updatecoordinates to the end FirstCoordinates(); barrier_init(&barrier, NTHREADS); pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); pthread_t* threads = new pthread_t[ NTHREADS-1 ]; for( i = 1; i < NTHREADS; i++ ) pthread_create( &threads[i-1], &attr, do_thread_work, (void*)i ); do_thread_work ((void *)0); for( i = 1; i < NTHREADS; i++ ) pthread_join( threads[i-1], NULL ); printf("\n"); return 0; }