Przeglądaj źródła

examples/stencil/stencil-kernels.c: use opencl pointer when appropriate (thanks to Sylvain Henry for helping to find the error)

Nathalie Furmento 11 lat temu
rodzic
commit
a3439e1a82
1 zmienionych plików z 12 dodań i 7 usunięć
  1. 12 7
      examples/stencil/stencil-kernels.c

+ 12 - 7
examples/stencil/stencil-kernels.c

@@ -289,8 +289,8 @@ static void load_subblock_from_buffer_opencl(struct starpu_block_interface *bloc
 	size_t boundary_size = K*block->ldz*block->elemsize;
 
 	unsigned offset = firstz*block->ldz;
-	cl_mem block_data = (cl_mem)block->ptr;
-	cl_mem boundary_data = (cl_mem)boundary->ptr;
+	cl_mem block_data = (cl_mem)block->dev_handle;
+	cl_mem boundary_data = (cl_mem)boundary->dev_handle;
 	cl_event event;
 
         cl_command_queue cq;
@@ -351,7 +351,7 @@ fprintf(stderr,"!!! DO update_func_opencl z %d OPENCL%d !!!\n", block->bz, worke
 	for (i=1; i<=K; i++)
 	{
 		struct starpu_block_interface *oldb = descr[i%2], *newb = descr[(i+1)%2];
-		TYPE *old = (void*) oldb->ptr, *newer = (void*) newb->ptr;
+		TYPE *old = (void*) oldb->dev_handle, *newer = (void*) newb->dev_handle;
 
 		/* Shadow data */
 		opencl_shadow_host(block->bz, old, oldb->nx, oldb->ny, oldb->nz, oldb->ldy, oldb->ldz, i);
@@ -361,15 +361,19 @@ fprintf(stderr,"!!! DO update_func_opencl z %d OPENCL%d !!!\n", block->bz, worke
 		opencl_life_update_host(block->bz, old, newer, oldb->nx, oldb->ny, oldb->nz, oldb->ldy, oldb->ldz, i);
 #else
 		cl_event event;
-                clEnqueueCopyBuffer(cq, old, newer, 0, 0, oldb->nx * oldb->ny * oldb->nz * sizeof(*newer), 0, NULL, &event);
+                cl_int ret = clEnqueueCopyBuffer(cq, old, newer, 0, 0, oldb->nx * oldb->ny * oldb->nz * sizeof(*newer), 0, NULL, &event);
+		if (ret != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(ret);
+
 		clWaitForEvents(1, &event);
 		clReleaseEvent(event);
 #endif /* LIFE */
 	}
 
+#ifndef LIFE
 	cl_int err;
 	if ((err = clFinish(cq)))
 		STARPU_OPENCL_REPORT_ERROR(err);
+#endif
 
 	if (block->bz == 0)
 		starpu_top_update_data_integer(starpu_top_achieved_loop, ++achieved_iter);
@@ -526,14 +530,15 @@ static void load_subblock_into_buffer_opencl(struct starpu_block_interface *bloc
 	size_t boundary_size = K*block->ldz*block->elemsize;
 
 	unsigned offset = firstz*block->ldz;
-	cl_mem block_data = (cl_mem)block->ptr;
-	cl_mem boundary_data = (cl_mem)boundary->ptr;
+	cl_mem block_data = (cl_mem)block->dev_handle;
+	cl_mem boundary_data = (cl_mem)boundary->dev_handle;
 
         cl_command_queue cq;
         starpu_opencl_get_current_queue(&cq);
 	cl_event event;
 
-        clEnqueueCopyBuffer(cq, block_data, boundary_data, offset, 0, boundary_size, 0, NULL, &event);
+        cl_int ret = clEnqueueCopyBuffer(cq, block_data, boundary_data, offset, 0, boundary_size, 0, NULL, &event);
+	if (ret != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(ret);
 
 	clWaitForEvents(1, &event);
 	clReleaseEvent(event);