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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
void cmus_exit(void) { job_exit(); if (cache_close()) d_print("error: %s\n", strerror(errno)); }