Example #1
0
void memo_lcs_back(void *arg_in)
{
	struct work_struct *arg = arg_in;
	const char *a = arg->a;
	ushort alen   = arg->alen;
	const char *b = arg->b;
	ushort blen   = arg->blen;

	ushort **best = (ushort **) calloc_2d_int(2, blen + 1);
	ushort i = 0, j = 0, iTog0 = 0, iTog1 = 1;
	for (i = alen - 1; i >= (1 + alen / 2); i--) {
		best[iTog1][blen+1] = 0;
		for (j = blen-1; j > 0; j--) {
			if (a[i] == b[j])
				best[iTog1][j - 1] = best[iTog0][j] + 1;
			else {
				if (best[iTog1][j] > best[iTog0][j - 1])
					best[iTog1][j - 1] = best[iTog1][j];
				else
					best[iTog1][j - 1] = best[iTog0][j - 1];
			}
		}

		iTog0 = 1 - iTog0;
		iTog1 = 1 - iTog1;
	}

	arg->ret = best[iTog0];

	if (arg->id == 0)
		job_exit();
}
Example #2
0
void memo_lcs_front(void *arg_in)
{
	struct work_struct *arg = arg_in;
	const char *a = arg->a;
	ushort alen   = arg->alen;
	const char *b = arg->b;
	ushort blen   = arg->blen;

	ushort **best = (ushort **) calloc_2d_int(2, blen + 1);
	ushort i = 0, j = 0, iTog0 = 0, iTog1 = 1;
	for (; i < (1 + alen / 2); i++) {
		best[iTog1][0] = 0;
		for (j = 0; j < blen; j++) {
			if (a[i] == b[j])
				best[iTog1][j + 1] = best[iTog0][j] + 1;
			else {
				if (best[iTog1][j] > best[iTog0][j + 1])
					best[iTog1][j + 1] = best[iTog1][j];
				else
					best[iTog1][j + 1] = best[iTog0][j + 1];
			}
		}
		iTog0 = 1 - iTog0;
		iTog1 = 1 - iTog1;
	}

	arg->ret = best[iTog0];

	if (arg->id == 0)
		job_exit();
}
Example #3
0
static void mv(void *args)
{
	struct work_struct *s = args;
	int i;

	//printf("[%d]MV size = %d, threads = %d \n", s->id, matrixSize, CPUCORES);

	for (i = s->id; i < matrixSize; i += CPUCORES){
		cc[i][0] = vectors_dot_prod(aa[i], bb);
	}
	//printf("%d", s->id);
	 if (s->id)
		job_exit();
}
Example #4
0
static void add(void *args)
{
	struct work_struct *s = args;
	int i,j;

	//printf("[%d]ADD size = %d, threads = %d \n", s->id, matrixSize, CPUCORES);

	for (i = s->id; i < matrixSize; i += CPUCORES) {
		for (j = 0; j < matrixSize; j++) {
			cc[i][j] = aa[i][j] + bb[i][j];
		}
	}  
	//printf("%d", s->id);
	if(s->id)
		job_exit();
}
Example #5
0
static void scale(void *args)
{
	struct work_struct *s = args;
	double factor = bb[0][0];
	int i,j;

	//printf("[%d]SCALE size = %d, threads = %d \n", s->id, matrixSize, CPUCORES);

	for (i = s->id; i < matrixSize; i += CPUCORES) {
		for (j = 0; j < matrixSize; j++) {
			cc[i][j] = aa[i][j] * factor;
		}
	}
	//printf("%d", s->id);
	if (s->id)
		job_exit();
}
Example #6
0
static void mm(void *args)
{
	struct work_struct *s = args;
	int i,j,k;

	//printf("[%d]MM size = %d, threads = %d \n", s->id, matrixSize, CPUCORES);

	for (i = s->id; i < matrixSize; i += CPUCORES) {
		for (k = 0; k < matrixSize; k++) {
				for (j = 0; j < matrixSize; j++) {
					cc[i][j] += aa[i][k] * bb[k][j];
					//printf("\t[%d] cc[%d][%d]= %lf, aa= %lf, bb= %lf\n", k, i, j, cc[i][j], aa[i][k], bb[k][j]);	
			}
			//printf("cc[%d][%d]= %lf\n", i, j, cc[i][j]);
		}
	}
	//printf("%d", s->id);
	if (s->id)
		job_exit();
  
}
Example #7
0
void cmus_exit(void)
{
	job_exit();
	if (cache_close())
		d_print("error: %s\n", strerror(errno));
}