| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | 
							- /* StarPU --- Runtime system for heterogeneous multicore architectures.
 
-  *
 
-  * Copyright (C) 2010-2020  Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
 
-  *
 
-  * StarPU is free software; you can redistribute it and/or modify
 
-  * it under the terms of the GNU Lesser General Public License as published by
 
-  * the Free Software Foundation; either version 2.1 of the License, or (at
 
-  * your option) any later version.
 
-  *
 
-  * StarPU is distributed in the hope that it will be useful, but
 
-  * WITHOUT ANY WARRANTY; without even the implied warranty of
 
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
-  *
 
-  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
 
-  */
 
- #include <starpu.h>
 
- #include "../helper.h"
 
- static starpu_data_handle_t bcsr_handle;
 
- void cpu_show_bcsr(void *descr[], void *arg)
 
- {
 
- 	(void)arg;
 
- 	struct starpu_bcsr_interface *iface = descr[0];
 
- 	uint32_t nnz = iface->nnz;
 
- 	uint32_t nrow = iface->nrow;
 
- 	int *nzval = (int *)iface->nzval;
 
- 	uint32_t *colind = iface->colind;
 
- 	uint32_t *rowptr = iface->rowptr;
 
- 	uint32_t firstentry = iface->firstentry;
 
- 	uint32_t r = iface->r;
 
- 	uint32_t c = iface->c;
 
- 	uint32_t elemsize = iface->elemsize;
 
- 	uint32_t i, j, y, x;
 
- 	static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
- 	STARPU_PTHREAD_MUTEX_LOCK(&mutex);
 
- 	printf("\nnnz %u elemsize %u\n", nnz, elemsize);
 
- 	for (i = 0; i < nrow; i++)
 
- 	{
 
- 		uint32_t row_start = rowptr[i] - firstentry;
 
- 		uint32_t row_end = rowptr[i+1] - firstentry;
 
- 		printf("row %u\n", i);
 
- 		for (j = row_start; j < row_end; j++)
 
- 		{
 
- 			int *block = nzval + j * r*c;
 
- 			printf( " column %u\n", colind[j]);
 
- 			for (y = 0; y < r; y++)
 
- 			{
 
- 				for (x = 0; x < c; x++)
 
- 					printf("  %d", block[y*c+x]);
 
- 				printf("\n");
 
- 			}
 
- 		}
 
- 	}
 
- 	STARPU_PTHREAD_MUTEX_UNLOCK(&mutex);
 
- }
 
- struct starpu_codelet show_cl =
 
- {
 
- 	.cpu_funcs = { cpu_show_bcsr },
 
- 	.nbuffers = 1,
 
- 	.modes = { STARPU_R },
 
- };
 
- /*
 
-  * In this test, we use the following matrix:
 
-  *
 
-  *   +----------------+
 
-  *   |  0   1   0   0 |
 
-  *   |  2   3   0   0 |
 
-  *   |  4   5   8   9 |
 
-  *   |  6   7  10  11 |
 
-  *   |  0   0   0   0 |
 
-  *   |  0   0   0   0 |
 
-  *   +----------------+
 
-  *
 
-  * nzval  = [0, 1, 2, 3] ++ [4, 5, 6, 7] ++ [8, 9, 10, 11]
 
-  * colind = [0, 0, 1] (column index of each non-zero block)
 
-  * rowptr = [0, 1, 3] (index of first non-zero block for each row)
 
-  * r = c = 2
 
-  */
 
- /* Size of the blocks */
 
- #define R              2
 
- #define C              2
 
- #define NNZ_BLOCKS     3   /* out of 6 */
 
- #define NZVAL_SIZE     (R*C*NNZ_BLOCKS)
 
- #define NROWS          3
 
- static int nzval[NZVAL_SIZE]  =
 
- {
 
- 	0, 1, 2, 3,    /* First block  */
 
- 	4, 5, 6, 7,    /* Second block */
 
- 	8, 9, 10, 11   /* Third block  */
 
- };
 
- static uint32_t colind[NNZ_BLOCKS] = { 0, 0, 1 };
 
- static uint32_t rowptr[NROWS+1] = { 0, 1, NNZ_BLOCKS, NNZ_BLOCKS };
 
- int main(int argc, char **argv)
 
- {
 
- 	struct starpu_conf conf;
 
- 	starpu_conf_init(&conf);
 
- 	conf.precedence_over_environment_variables = 1;
 
- 	conf.ncuda = 0;
 
- 	conf.nopencl = 0;
 
- 	conf.nmic = 0;
 
- 	if (starpu_initialize(&conf, &argc, &argv) == -ENODEV)
 
- 		return STARPU_TEST_SKIPPED;
 
- 	if (starpu_cpu_worker_get_count() == 0 || starpu_memory_nodes_get_count() > 1) {
 
- 		starpu_shutdown();
 
- 		return STARPU_TEST_SKIPPED;
 
- 	}
 
- 	starpu_bcsr_data_register(&bcsr_handle,
 
- 				  STARPU_MAIN_RAM,
 
- 				  NNZ_BLOCKS,
 
- 				  NROWS,
 
- 				  (uintptr_t) nzval,
 
- 				  colind,
 
- 				  rowptr,
 
- 				  0, /* firstentry */
 
- 				  R,
 
- 				  C,
 
- 				  sizeof(nzval[0]));
 
- 	starpu_task_insert(&show_cl, STARPU_R, bcsr_handle, 0);
 
- 	struct starpu_data_filter filter =
 
- 	{
 
- 		.filter_func = starpu_bcsr_filter_vertical_block,
 
- 		.nchildren = 3,
 
- 	};
 
- 	starpu_data_partition(bcsr_handle, &filter);
 
- 	starpu_task_insert(&show_cl, STARPU_R, starpu_data_get_sub_data(bcsr_handle, 1, 0), 0);
 
- 	starpu_task_insert(&show_cl, STARPU_R, starpu_data_get_sub_data(bcsr_handle, 1, 1), 0);
 
- 	starpu_task_insert(&show_cl, STARPU_R, starpu_data_get_sub_data(bcsr_handle, 1, 2), 0);
 
- 	starpu_data_unpartition(bcsr_handle, STARPU_MAIN_RAM);
 
- 	starpu_data_unregister(bcsr_handle);
 
- 	starpu_shutdown();
 
- 	return 0;
 
- }
 
 
  |