| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | /* StarPU --- Runtime system for heterogeneous multicore architectures. * * Copyright (C) 2014  Université de Bordeaux 1 * * 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 <config.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <starpu.h>#include <stdlib.h>#include "../helper.h"#include <common/thread.h>#define NITERS 1000000#define NTASKS 128#ifdef STARPU_USE_CUDAextern void long_kernel_cuda(unsigned long niters);void codelet_long_kernel(STARPU_ATTRIBUTE_UNUSED void *descr[], STARPU_ATTRIBUTE_UNUSED void *_args){	long_kernel_cuda(NITERS);}static struct starpu_perfmodel model ={	.type = STARPU_HISTORY_BASED,	.symbol = "long_kernel",};static struct starpu_codelet cl ={	.cuda_funcs = {codelet_long_kernel, NULL},	.cuda_flags = {STARPU_CUDA_ASYNC},	.nbuffers = 0,	.model =  &model};#endifint main(int argc, char **argv){#ifndef STARPU_USE_CUDA	return STARPU_TEST_SKIPPED;#else	int ret = starpu_initialize(NULL, &argc, &argv);	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");	if (starpu_cuda_worker_get_count() == 0)	{		starpu_shutdown();		return STARPU_TEST_SKIPPED;	}	unsigned iter;	for (iter = 0; iter < NTASKS; iter++)	{		struct starpu_task *task = starpu_task_create();		task->cl = &cl;		ret = starpu_task_submit(task);		if (ret == -ENODEV) goto enodev;		STARPU_CHECK_RETURN_VALUE(ret, "starpu_task_submit");	}	starpu_shutdown();	STARPU_RETURN(EXIT_SUCCESS);enodev:	fprintf(stderr, "WARNING: No one can execute this task\n");	/* yes, we do not perform the computation but we did detect that no one 	 * could perform the kernel, so this is not an error from StarPU */	starpu_shutdown();	STARPU_RETURN(STARPU_TEST_SKIPPED);#endif}
 |