예제 #1
0
파일: main.c 프로젝트: DSG888/SibSUTIS
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);
}
예제 #2
0
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);
}
예제 #3
0
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);
}
예제 #4
0
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);
}