Esempio n. 1
0
/*
 * 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;
}