Forráskód Böngészése

matvecmult: take ld into account

Samuel Thibault 5 éve
szülő
commit
60053b4899

+ 3 - 1
examples/matvecmult/matvecmult.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010-2015                                Université de Bordeaux
+ * Copyright (C) 2010-2015, 2020                          Université de Bordeaux
  * Copyright (C) 2010-2017, 2019                          CNRS
  * Copyright (C) 2013                                     Inria
  *
@@ -34,6 +34,7 @@ void opencl_codelet(void *descr[], void *_args)
 	cl_mem mult = (cl_mem)STARPU_VECTOR_GET_DEV_HANDLE(descr[2]);
 	int nx = STARPU_MATRIX_GET_NX(descr[0]);
 	int ny = STARPU_MATRIX_GET_NY(descr[0]);
+	int ld = STARPU_MATRIX_GET_LD(descr[0]);
 
         id = starpu_worker_get_id_check();
         devid = starpu_worker_get_devid(id);
@@ -47,6 +48,7 @@ void opencl_codelet(void *descr[], void *_args)
         err |= clSetKernelArg(kernel, n++, sizeof(nx), (void*)&nx);
         err |= clSetKernelArg(kernel, n++, sizeof(ny), (void*)&ny);
 	err |= clSetKernelArg(kernel, n++, sizeof(mult), &mult);
+	err |= clSetKernelArg(kernel, n++, sizeof(ld), (void*)&ld);
         if (err) STARPU_OPENCL_REPORT_ERROR(err);
 
 	{

+ 3 - 3
examples/matvecmult/matvecmult_kernel.cl

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010,2011,2017                           CNRS
- * Copyright (C) 2014                                     Université de Bordeaux
+ * Copyright (C) 2014,2020                                Université de Bordeaux
  *
  * 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
@@ -15,7 +15,7 @@
  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  */
 
-__kernel void matVecMult(const __global float *A, const __global float *X, int n, int m, __global float *Y)
+__kernel void matVecMult(const __global float *A, const __global float *X, int n, int m, __global float *Y, int ld)
 {
 	const int i = get_global_id(0);
 	if (i < m)
@@ -24,7 +24,7 @@ __kernel void matVecMult(const __global float *A, const __global float *X, int n
 		int j;
 
 		for (j = 0; j < n; j++)
-		       val += A[i*n+j] * X[j];
+		       val += A[i*ld+j] * X[j];
 
 		Y[i] = val;
 	}