int main(int argc, char** argv) { int i, j, size, k, step, pos, res; pthread_t threads[THR_NUM]; pthread_attr_t attr; if(argc > 1) size = atoi(argv[1]); else size = SIZE; printf("Выделение памяти\n"); int *m1 = alloc_matrix(size); int *m2 = alloc_matrix(size); int *ans = alloc_matrix(size); for(i=0; i<size; i++) for(j=0; j<size; j++) { m1[i + j * size] = 1;//i* size +j; m2[i + j * size] = 1;//i* 1000 +j; } printf("Умножение\n"); double t0 = dtime(); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); step = (int)((double)size/(double)THR_NUM); pos = 0; for(k = 0; k < THR_NUM; k++) { ARG[k].m1 = m1; ARG[k].m2 = m2; ARG[k].ans = ans; ARG[k].size = size; ARG[k].start = pos; pos += step; ARG[k].end = (k == THR_NUM - 1) ? size : pos; res = pthread_create(&threads[k], &attr, multiply_matrix, (void *)&ARG[k]); if (res) { fprintf(stderr, "Поток не создан!\n"); exit(1); } } pthread_attr_destroy(&attr); for(k = 0; k < THR_NUM; k++) pthread_join(threads[k], NULL); printf("Время выполнениея программы: %f\n", dtime() - t0); FILE *f = fopen("out", "w"); printf("Вычисление\n"); for(i=0; i<size; i++) { for(j=0; j<size; j++) fprintf(f, "%d\t", ans[i*size + j]); fprintf(f, "\n"); } fclose(f); del_matrix(m1); del_matrix(m2); del_matrix(ans); pthread_exit(NULL); }
void test_blob_col2patch() { printf("------test blob col2patch------\n"); Blob* blob = new_blob(3,3,1,1); Matrix* matrix = new_matrix(4,4); matrix->data[0] = 0; matrix->data[1] = 1; matrix->data[2] = 3; matrix->data[3] = 4; matrix->data[4] = 1; matrix->data[5] = 2; matrix->data[6] = 4; matrix->data[7] = 5; matrix->data[8] = 3; matrix->data[9] = 4; matrix->data[10] = 6; matrix->data[11] = 7; matrix->data[12] = 4; matrix->data[13] = 5; matrix->data[14] = 7; matrix->data[15] = 8; blob_col2patch(blob, matrix, 2, 2, 0, 0, 1, 1); matrix_print(matrix); LINE; blob_print(blob, true); del_matrix(matrix); del_blob(blob); }
void test_blob_flatten() { printf("------test blob flatten------\n"); Blob* blob = new_blob(2,2,2,3); int32_t bulk = blob_bulk(blob), i; for (i = 0; i < bulk; ++i) blob->data[i] = i; Matrix* matrix = new_matrix(3,8); blob_flattened2d(matrix, blob); matrix_print(matrix); del_matrix(matrix); del_blob(blob); }
void test_blob_patch2col() { printf("------test blob patch2col------\n"); Blob* blob = new_blob(3,3,1,1); int32_t bulk = blob_bulk(blob), i; for (i = 0; i < bulk; ++i) blob->data[i] = i; Matrix* matrix = new_matrix(4,4); blob_patch2col(matrix, blob, 2, 2, 0, 0, 1, 1); matrix_print(matrix); del_matrix(matrix); del_blob(blob); }