| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | 
							- /* StarPU --- Runtime system for heterogeneous multicore architectures.
 
-  *
 
-  * Copyright (C) 2017-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.
 
-  */
 
- /* This example shows a basic StarPU vector scale app on top of StarPURM with a nVidia CUDA kernel */
 
- #include <stdlib.h>
 
- #include <stdio.h>
 
- #include <assert.h>
 
- #include <starpu.h>
 
- #include <starpurm.h>
 
- static int rm_cpu_type_id = -1;
 
- static int rm_nb_cpu_units = 0;
 
- static void test1();
 
- static void init_rm_infos(void);
 
- static int global_nb_tasks = 100;
 
- static const int nb_random_tests = 10;
 
- /* vector scale codelet */
 
- static void work_func(void *cl_buffers[], void *cl_arg)
 
- {
 
- 	double timestamp = starpu_timing_now();
 
- 	double timestamp2;
 
- 	do
 
- 	{
 
- 		timestamp2 = starpu_timing_now();
 
- 	}
 
- 	while ((timestamp2 - timestamp) < 1e6);
 
- }
 
- static struct starpu_codelet work_cl =
 
- {
 
- 	.cpu_funcs = {work_func},
 
- };
 
- /* main routines */
 
- static void test1()
 
- {
 
- 	int i;
 
- 	for (i=0; i<global_nb_tasks; i++)
 
- 	{
 
- 		int ret = starpu_task_insert(&work_cl, 
 
- 				0);
 
- 		assert(ret == 0);
 
- 	}
 
- 	starpu_task_wait_for_all();
 
- }
 
- static void init_rm_infos(void)
 
- {
 
- 	int cpu_type = starpurm_get_device_type_id("cpu");
 
- 	int nb_cpu_units = starpurm_get_nb_devices_by_type(cpu_type);
 
- 	if (nb_cpu_units < 1)
 
- 	{
 
- 		/* No CPU unit available. */
 
- 		exit(77);
 
- 	}
 
- 	rm_cpu_type_id = cpu_type;
 
- 	rm_nb_cpu_units = nb_cpu_units;
 
- }
 
- static void disp_selected_cpuset(void)
 
- {
 
- 	hwloc_cpuset_t selected_cpuset = starpurm_get_selected_cpuset();
 
- 	int strl = hwloc_bitmap_snprintf(NULL, 0, selected_cpuset);
 
- 	char str[strl+1];
 
- 	hwloc_bitmap_snprintf(str, strl+1, selected_cpuset);
 
- 	printf("selected cpuset = %s\n", str);
 
- }
 
- int main(int argc, char *argv[])
 
- {
 
- 	srandom(time(NULL));
 
- 	int drs_enabled;
 
- 	if (argc > 1)
 
- 	{
 
- 		global_nb_tasks = atoi(argv[1]);
 
- 	}
 
- 	starpurm_initialize();
 
- 	init_rm_infos();
 
- 	printf("using default units\n");
 
- 	disp_selected_cpuset();
 
- 	test1();
 
- 	if (rm_nb_cpu_units > 1)
 
- 	{
 
- 		const int nb_cpus = rm_nb_cpu_units;
 
- 		const int half_nb_cpus = nb_cpus/2;
 
- 		printf("nb_cpu_units = %d\n", nb_cpus);
 
- 		starpurm_set_drs_enable(NULL);
 
- 		drs_enabled = starpurm_drs_enabled_p();
 
- 		assert(drs_enabled != 0);
 
- 		printf("withdrawing %d cpus from StarPU\n", half_nb_cpus);
 
- 		starpurm_withdraw_cpus_from_starpu(NULL, half_nb_cpus);
 
- 		disp_selected_cpuset();
 
- 		test1();
 
- 		printf("assigning %d cpus to StarPU\n", half_nb_cpus);
 
- 		starpurm_assign_cpus_to_starpu(NULL, half_nb_cpus);
 
- 		disp_selected_cpuset();
 
- 		test1();
 
- 		int i;
 
- 		for (i=0; i<nb_random_tests; i++)
 
- 		{
 
- 			int some_cpus = 1+ random()%nb_cpus;
 
- 			printf("assigning exactly %d cpus to StarPU\n", some_cpus);
 
- 			starpurm_withdraw_all_cpus_from_starpu(NULL);
 
- 			starpurm_assign_cpus_to_starpu(NULL, some_cpus);
 
- 			disp_selected_cpuset();
 
- 			test1();
 
- 		}
 
- 		starpurm_set_drs_disable(NULL);
 
- 		drs_enabled = starpurm_drs_enabled_p();
 
- 		assert(drs_enabled == 0);
 
- 	}
 
- 	starpurm_shutdown();
 
- 	return 0;
 
- }
 
 
  |