Accéder au contenu.
Menu Sympa

starpu-devel - [Starpu-devel] Execute on 2 OpenCL devices

Objet : Developers list for StarPU

Archives de la liste

[Starpu-devel] Execute on 2 OpenCL devices


Chronologique Discussions 
  • From: Julian Holzmüller <h-julian@gmx.at>
  • To: starpu-devel@lists.gforge.inria.fr
  • Subject: [Starpu-devel] Execute on 2 OpenCL devices
  • Date: Thu, 10 Oct 2013 14:51:18 +0200
  • List-archive: <http://lists.gforge.inria.fr/pipermail/starpu-devel>
  • List-id: "Developers list. For discussion of new features, code changes, etc." <starpu-devel.lists.gforge.inria.fr>

Hi, i have a problem with my implementation of jacobi equation.
I want to execute my program parallel on a CPU and GPU wich are 2 OpenCL devices.

Unfortunately it is only executed on one OpenCL device. The other Device is only waiting...

It looks like this (in this case only on CPU-Device): http://imageshack.us/a/img21/5926/fjrz.png

Here is my function where i submit:

int execute_on(uint32_t where, float *matrix, float *matrixTemp)
{
struct starpu_codelet cl;
starpu_data_handle_t matrixHandle, matrixTempHandle;

starpu_matrix_data_register(&matrixHandle, 0, (uintptr_t)matrix, N, N, N, sizeof(float));
starpu_matrix_data_register(&matrixTempHandle, 0, (uintptr_t)matrixTemp, N, N, N, sizeof(float));

starpu_codelet_init(&cl);
cl.where = where;
        cl.cpu_funcs[0] = cpu_codelet;
        cl.opencl_funcs[0] = opencl_codelet;
        cl.nbuffers = 2;
cl.modes[0] = STARPU_RW,
cl.modes[1] = STARPU_RW,
        cl.model = NULL;

struct starpu_task *task = starpu_task_create();
task->cl = &cl;
task->callback_func = NULL;
        task->handles[0] = matrixHandle;
        task->handles[1] = matrixTempHandle;

int ret = starpu_task_submit(task);

starpu_task_wait_for_all();

starpu_data_unregister(matrixHandle);
starpu_data_unregister(matrixTempHandle);

return 0;
}

my funktion call:

ret = starpu_opencl_load_opencl_from_file("jacobi.cl", &opencl_code, NULL);
STARPU_CHECK_RETURN_VALUE(ret, "starpu_opencl_load_opencl_from_file");
ret = execute_on(STARPU_OPENCL, matrix, matrixTemp);

i execute it with:

STARPU_OPENCL_ON_CPUS=1 STARPU_DISABLE_ASYNCHRONOUS_COPY=1 STARPU_DISABLE_ASYNCHRONOUS_OPENCL_COPY=1 STARPU_SCHED=dmda STARPU_GENERATE_TRACE=1 ./jacobi

What doing i wrong? How can i manage that the program will run parallel on both devices? The performance is not important at this point.



Archives gérées par MHonArc 2.6.19+.

Haut de le page