/* * Run the whole workload. */ static void runit(unsigned numthinkers, unsigned numgrinders, unsigned numponggroups, unsigned ponggroupsize) { pid_t pids[numponggroups + 2]; time_t startsecs; unsigned long startnsecs; char buf[32]; unsigned i; tprintf("Running with %u thinkers, %u grinders, and %u pong groups " "of size %u each.\n", numthinkers, numgrinders, numponggroups, ponggroupsize); usem_init(&startsem, STARTSEM); createresultsfile(); forkem(numthinkers, nop, think, nop, 0, &pids[0]); forkem(numgrinders, nop, grind, nop, 1, &pids[1]); for (i=0; i<numponggroups; i++) { forkem(ponggroupsize, pong_prep, pong, pong_cleanup, i+2, &pids[i+2]); } usem_open(&startsem); tprintf("Forking done; starting the workload.\n"); __time(&startsecs, &startnsecs); Vn(&startsem, numthinkers + numgrinders + numponggroups * ponggroupsize); waitall(pids, numponggroups + 2); usem_close(&startsem); usem_cleanup(&startsem); openresultsfile(O_RDONLY); tprintf("--- Timings ---\n"); if (numthinkers > 0) { calcresult(0, startsecs, startnsecs, buf, sizeof(buf)); tprintf("Thinkers: %s\n", buf); } if (numgrinders > 0) { calcresult(1, startsecs, startnsecs, buf, sizeof(buf)); tprintf("Grinders: %s\n", buf); } for (i=0; i<numponggroups; i++) { calcresult(i+2, startsecs, startnsecs, buf, sizeof(buf)); tprintf("Pong group %u: %s\n", i, buf); } closeresultsfile(); destroyresultsfile(); }
int rand_lp(int n, double a[600000][4], double b[], double c[], double result[]) { int num,sign1,sign2,i,j; double opt,left; int ineq1,ineq2,ineq3,ineq4; double im_a[4][5],im_b[5]; num = 0; for(i = 0; i < 4; i++) { result[i] = 10000; } opt = c[0] * result[0] + c[1] * result[1] + c[2] * result[2] + c[3] * result[3]; ineq1 = 0; ineq2 = 1; ineq3 = 2; ineq4 = 3; for(i = 4; i < n; i++) { left = a[i][0] * result[0] + a[i][1] * result[1] + a[i][2] * result[2] + a[i][3] * result[3]; if(left > b[i]) { for(j = 0; j < 4; j++) { switch(j){ case 0: { im_a[0][0] = a[ineq2][0]; im_a[0][1] = a[ineq2][1]; im_a[0][2] = a[ineq2][2]; im_a[0][3] = a[ineq2][3]; im_a[0][4] = b[ineq2]; im_a[1][0] = a[ineq3][0]; im_a[1][1] = a[ineq3][1]; im_a[1][2] = a[ineq3][2]; im_a[1][3] = a[ineq3][3]; im_a[1][4] = b[ineq3]; im_a[2][0] = a[ineq4][0]; im_a[2][1] = a[ineq4][1]; im_a[2][2] = a[ineq4][2]; im_a[2][3] = a[ineq4][3]; im_a[2][4] = b[ineq4]; im_a[3][0] = a[i][0]; im_a[3][1] = a[i][1]; im_a[3][2] = a[i][2]; im_a[3][3] = a[i][3]; im_a[3][4] = b[i]; im_b[0] = a[ineq1][0]; im_b[1] = a[ineq1][1]; im_b[2] = a[ineq1][2]; im_b[3] = a[ineq1][3]; im_b[4] = b[ineq1]; sign1 = calcresult(im_a,result); if(sign1 == 1) { sign2 = update(im_b,result); if(sign2 == 1) { ineq1 = i; break; } } } case 1: { im_a[0][0] = a[ineq1][0]; im_a[0][1] = a[ineq1][1]; im_a[0][2] = a[ineq1][2]; im_a[0][3] = a[ineq1][3]; im_a[0][4] = b[ineq1]; im_a[1][0] = a[ineq3][0]; im_a[1][1] = a[ineq3][1]; im_a[1][2] = a[ineq3][2]; im_a[1][3] = a[ineq3][3]; im_a[1][4] = b[ineq3]; im_a[2][0] = a[ineq4][0]; im_a[2][1] = a[ineq4][1]; im_a[2][2] = a[ineq4][2]; im_a[2][3] = a[ineq4][3]; im_a[2][4] = b[ineq4]; im_a[3][0] = a[i][0]; im_a[3][1] = a[i][1]; im_a[3][2] = a[i][2]; im_a[3][3] = a[i][3]; im_a[3][4] = b[i]; im_b[0] = a[ineq2][0]; im_b[1] = a[ineq2][1]; im_b[2] = a[ineq2][2]; im_b[3] = a[ineq2][3]; im_b[4] = b[ineq2]; sign1 = calcresult(im_a,result); if(sign1 == 1) { sign2 = update(im_b,result); if(sign2 == 1) { ineq2 = i; break; } } } case 2: { im_a[0][0] = a[ineq1][0]; im_a[0][1] = a[ineq1][1]; im_a[0][2] = a[ineq1][2]; im_a[0][3] = a[ineq1][3]; im_a[0][4] = b[ineq1]; im_a[1][0] = a[ineq2][0]; im_a[1][1] = a[ineq2][1]; im_a[1][2] = a[ineq2][2]; im_a[1][3] = a[ineq2][3]; im_a[1][4] = b[ineq2]; im_a[2][0] = a[ineq4][0]; im_a[2][1] = a[ineq4][1]; im_a[2][2] = a[ineq4][2]; im_a[2][3] = a[ineq4][3]; im_a[2][4] = b[ineq4]; im_a[3][0] = a[i][0]; im_a[3][1] = a[i][1]; im_a[3][2] = a[i][2]; im_a[3][3] = a[i][3]; im_a[3][4] = b[i]; im_b[0] = a[ineq3][0]; im_b[1] = a[ineq3][1]; im_b[2] = a[ineq3][2]; im_b[3] = a[ineq3][3]; im_b[4] = b[ineq3]; sign1 = calcresult(im_a,result); if(sign1 == 1) { sign2 = update(im_b,result); if(sign2 == 1) { ineq3 = i; break; } } } case 3: { im_a[0][0] = a[ineq1][0]; im_a[0][1] = a[ineq1][1]; im_a[0][2] = a[ineq1][2]; im_a[0][3] = a[ineq1][3]; im_a[0][4] = b[ineq1]; im_a[1][0] = a[ineq2][0]; im_a[1][1] = a[ineq2][1]; im_a[1][2] = a[ineq2][2]; im_a[1][3] = a[ineq2][3]; im_a[1][4] = b[ineq2]; im_a[2][0] = a[ineq3][0]; im_a[2][1] = a[ineq3][1]; im_a[2][2] = a[ineq3][2]; im_a[2][3] = a[ineq3][3]; im_a[2][4] = b[ineq3]; im_a[3][0] = a[i][0]; im_a[3][1] = a[i][1]; im_a[3][2] = a[i][2]; im_a[3][3] = a[i][3]; im_a[3][4] = b[i]; im_b[0] = a[ineq4][0]; im_b[1] = a[ineq4][1]; im_b[2] = a[ineq4][2]; im_b[3] = a[ineq4][3]; im_b[4] = b[ineq4]; sign1 = calcresult(im_a,result); if(sign1 == 1) { sign2 = update(im_b,result); if(sign2 == 1) { ineq4 = i; break; } else { ineq4 = i; result[0]=100000; result[1]=100000; result[2]=100000; result[3]=100000; break; } } } } } opt = c[0] * result[0] + c[1] * result[1] + c[2] * result[2] + c[3] * result[3]; num++; } } return num; }