void ArrayVersion_misaligned(BenchmarkExt<int>& bench) { bench.beginImplementation("Array<T,1> (misal.)"); while (!bench.doneImplementationBenchmark()) { int N = bench.getParameter(); long iters = bench.getIterations(); cout << bench.currentImplementation() << ": N = " << N << endl; Array<double,1> xfill(N+6); Array<double,1> x(xfill(Range(0,N+0-1))); initializeRandomDouble(x.dataFirst(), N); Array<double,1> afill(N+6); Array<double,1> a(afill(Range(1,N+1-1))); initializeRandomDouble(a.dataFirst(), N); Array<double,1> bfill(N+6); Array<double,1> b(bfill(Range(2,N+2-1))); initializeRandomDouble(b.dataFirst(), N); Array<double,1> cfill(N+6); Array<double,1> c(cfill(Range(3,N+3-1))); initializeRandomDouble(c.dataFirst(), N); Array<double,1> dfill(N+6); Array<double,1> d(dfill(Range(4,N+4-1))); initializeRandomDouble(d.dataFirst(), N); Array<double,1> yfill(N+6); Array<double,1> y(yfill(Range(5,N+5-1))); initializeRandomDouble(y.dataFirst(), N); bench.start(); for (long i=0; i < iters; ++i) { x = a*b + c*d; y = b+d; sink(); } bench.stop(); bench.startOverhead(); for (long i=0; i < iters; ++i) { sink(); } bench.stopOverhead(); } bench.endImplementation(); }
void ArrayVersion_unaligned(BenchmarkExt<int>& bench) { bench.beginImplementation("Array<T,1> (unal.)"); while (!bench.doneImplementationBenchmark()) { int N = bench.getParameter(); long iters = bench.getIterations(); cout << bench.currentImplementation() << ": N = " << N << endl; Array<double,1> xfill(N+1); Array<double,1> x(xfill(Range(1,N))); initializeRandomDouble(x.dataFirst(), N); Array<double,1> afill(N+1); Array<double,1> a(afill(Range(1,N))); initializeRandomDouble(a.dataFirst(), N); Array<double,1> bfill(N+1); Array<double,1> b(bfill(Range(1,N))); initializeRandomDouble(b.dataFirst(), N); Array<double,1> cfill(N+1); Array<double,1> c(cfill(Range(1,N))); initializeRandomDouble(c.dataFirst(), N); Array<double,1> dfill(N+1); Array<double,1> d(dfill(Range(1,N))); initializeRandomDouble(d.dataFirst(), N); bench.start(); for (long i=0; i < iters; ++i) { x = (a+b)*(c+d); sink(); } bench.stop(); bench.startOverhead(); for (long i=0; i < iters; ++i) { sink(); } bench.stopOverhead(); } bench.endImplementation(); }
void ArrayVersion_misaligned(BenchmarkExt<int>& bench, double u, double v, double w, double z) { bench.beginImplementation("Array<T,1> (misal.)"); while (!bench.doneImplementationBenchmark()) { int N = bench.getParameter(); long iters = bench.getIterations(); cout << bench.currentImplementation() << ": N = " << N << endl; Array<double,1> afill(N+5); Array<double,1> a(afill(Range(0,N+0-1))); initializeRandomDouble(a.dataFirst(), N); Array<double,1> bfill(N+5); Array<double,1> b(bfill(Range(1,N+1-1))); initializeRandomDouble(b.dataFirst(), N); Array<double,1> cfill(N+5); Array<double,1> c(cfill(Range(2,N+2-1))); initializeRandomDouble(c.dataFirst(), N); Array<double,1> dfill(N+5); Array<double,1> d(dfill(Range(3,N+3-1))); initializeRandomDouble(d.dataFirst(), N); Array<double,1> xfill(N+5); Array<double,1> x(xfill(Range(4,N+4-1))); initializeRandomDouble(x.dataFirst(), N); bench.start(); for (long i=0; i < iters; ++i) { x=(1.0-c*c)/((4*w)*sin(1.0+c*c-2*v*c))*a*b*u*exp(-z*d); sink(); } bench.stop(); bench.startOverhead(); for (long i=0; i < iters; ++i) { sink(); } bench.stopOverhead(); } bench.endImplementation(); }
////////////////// // parsing function ////////////////// void parse(char* prev_link, char* page){ char *tmp, *link, *copy; char *saveptr = NULL; copy = strdup(page); tmp = strtok_r(page, " \n", &saveptr); while(tmp != NULL){ if((link = checkif_link(tmp)) != NULL){ pthread_mutex_lock(&d_lock); while(downldItems == dq_size) pthread_cond_wait(&dfull, &d_lock); if(!check_visited(link)){ dfill(link);//means that the link has not been downloaded before pthread_cond_signal(&dempty); } pthread_mutex_unlock(&d_lock); _edge_function(prev_link, link); } tmp = strtok_r(NULL, " \n", &saveptr); } ///////// pthread_mutex_lock(&w_lock); work--; pthread_cond_signal(&done); pthread_mutex_unlock(&w_lock); }
///Main function! Kind of. int crawl(char *start_url, int download_workers, int parse_workers, int queue_size, char * (*_fetch_fn)(char *url), void (*_edge_fn)(char *from, char *to)) { //start code here: pthread_initialize(); //assign queue_size to global var dq_size = queue_size; _fetch_function = _fetch_fn; _edge_function = _edge_fn; p_init(); d_init(); dfill(start_url); check_visited(start_url); pthread_t pid[download_workers], cid[parse_workers]; int i; for(i = 0; i < download_workers; i++){ pthread_create(&pid[i], NULL, download_thread, NULL); } for(i = 0; i < parse_workers; i++){ pthread_create(&cid[i], NULL, parse_thread, NULL); } pthread_mutex_lock(&w_lock); while(work > 0){ pthread_cond_wait(&done, &w_lock); } pthread_mutex_unlock(&w_lock); return 0; }
/* * Main program : Molecular Dynamics simulation. */ int main(){ int move; double x[npart*3], vh[npart*3], f[npart*3]; double ekin; double vel; double sc; double start, time; /* * Parameter definitions */ double den = 0.83134; double side = pow((double)npart/den,0.3333333); double tref = 0.722; double rcoff = (double)mm/4.0; double h = 0.064; int irep = 10; int istop = 20; int iprint = 5; int movemx = 20; double a = side/(double)mm; double hsq = h*h; double hsq2 = hsq*0.5; double tscale = 16.0/((double)npart-1.0); double vaver = 1.13*sqrt(tref/24.0); /* * Initial output */ printf(" Molecular Dynamics Simulation example program\n"); printf(" ---------------------------------------------\n"); printf(" number of particles is ............ %6d\n",npart); printf(" side length of the box is ......... %13.6f\n",side); printf(" cut off is ........................ %13.6f\n",rcoff); printf(" reduced temperature is ............ %13.6f\n",tref); printf(" basic timestep is ................. %13.6f\n",h); printf(" temperature scale interval ........ %6d\n",irep); printf(" stop scaling at move .............. %6d\n",istop); printf(" print interval .................... %6d\n",iprint); printf(" total no. of steps ................ %6d\n",movemx); /* * Generate fcc lattice for atoms inside box */ fcc(x, npart, mm, a); /* * Initialise velocities and forces (which are zero in fcc positions) */ mxwell(vh, 3*npart, h, tref); dfill(3*npart, 0.0, f, 1); /* * Start of md */ printf("\n i ke pe e temp " " pres vel rp\n ----- ---------- ----------" " ---------- -------- -------- -------- ----\n"); start = secnds(); for (move=1; move<=movemx; move++) { /* * Move the particles and partially update velocities */ domove(3*npart, x, vh, f, side); /* * Compute forces in the new positions and accumulate the virial * and potential energy. */ forces(npart, x, f, side, rcoff); //kernelWrapper(npart,x,f,side,rcoff); /* * Scale forces, complete update of velocities and compute k.e. */ ekin=mkekin(npart, f, vh, hsq2, hsq); /* * Average the velocity and temperature scale if desired */ vel=velavg(npart, vh, vaver, h); if (move<istop && fmod(move, irep)==0) { sc=sqrt(tref/(tscale*ekin)); dscal(3*npart, sc, vh, 1); ekin=tref/tscale; } /* * Sum to get full potential energy and virial */ if (fmod(move, iprint)==0) prnout(move, ekin, epot, tscale, vir, vel, count, npart, den); } time = secnds() - start; printf("Time = %f\n",(float) time); }