Objet : Developers list for StarPU
Archives de la liste
- From: Nathalie Furmento <nathalie.furmento@labri.fr>
- To: starpu-devel@lists.gforge.inria.fr
- Subject: [Starpu-devel] Pointer arithmetic and OpenCL
- Date: Fri, 05 Mar 2010 15:33:49 +0100
- 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>
As OpenCL does not allow to perform pointer arithmetics on a cl_mem object, it is necessary to keep the original pointer and the offset when splitting data in StarPU.
Here a patch (approved by Cédric himself ;)) fixing the vector interface in that regard. Comments welcome!
Nathalie
-----------------------------------------------------------------------------------------------------------------
Index: include/starpu-data-interfaces.h
===================================================================
--- include/starpu-data-interfaces.h (revision 1822)
+++ include/starpu-data-interfaces.h (working copy)
@@ -86,6 +86,8 @@
/* vector interface for contiguous (non-strided) buffers */
typedef struct starpu_vector_interface_s {
uintptr_t ptr;
+ uintptr_t dev_handle;
+ size_t offset;
uint32_t nx;
size_t elemsize;
} starpu_vector_interface_t;
Index: src/datawizard/interfaces/vector_interface.c
===================================================================
--- src/datawizard/interfaces/vector_interface.c (revision 1822)
+++ src/datawizard/interfaces/vector_interface.c (working copy)
@@ -87,13 +87,16 @@
if (node == home_node) {
local_interface->ptr = vector_interface->ptr;
+ local_interface->dev_handle = vector_interface->dev_handle;
}
else {
local_interface->ptr = 0;
+ local_interface->dev_handle = 0;
}
local_interface->nx = vector_interface->nx;
local_interface->elemsize = vector_interface->elemsize;
+ local_interface->offset = vector_interface->offset;
}
}
@@ -116,7 +119,9 @@
starpu_vector_interface_t vector = {
.ptr = ptr,
.nx = nx,
- .elemsize = elemsize
+ .elemsize = elemsize,
+ .dev_handle = ptr,
+ .offset = 0
};
_starpu_register_data_handle(handleptr, home_node, &vector, &interface_vector_ops);
@@ -228,6 +233,8 @@
/* update the data properly in consequence */
interface->ptr = addr;
+ interface->dev_handle = addr;
+ interface->offset = 0;
return allocated_memory;
}
Index: src/datawizard/interfaces/vector_filters.c
===================================================================
--- src/datawizard/interfaces/vector_filters.c (revision 1822)
+++ src/datawizard/interfaces/vector_filters.c (working copy)
@@ -28,6 +28,7 @@
uint32_t nx = vector_root->nx;
size_t elemsize = vector_root->elemsize;
+ uintptr_t dev_handle = vector_root->dev_handle;
/* we will have arg chunks */
nchunks = STARPU_MIN(nx, arg);
@@ -62,6 +63,8 @@
starpu_data_get_interface_on_node(root_handle, node);
local->ptr = local_root->ptr + offset;
+ local->dev_handle = local_root->dev_handle;
+ local->offset = local_root->offset + offset;
}
}
}
@@ -77,6 +80,7 @@
uint32_t nx = vector_root->nx;
size_t elemsize = vector_root->elemsize;
+ uintptr_t dev_handle = vector_root->dev_handle;
/* first allocate the children data_state */
starpu_data_create_children(root_handle, 2, root_handle->ops);
@@ -100,6 +104,8 @@
starpu_data_get_interface_on_node(root_handle, node);
local->ptr = local_root->ptr;
+ local->offset = local_root->offset;
+ local->dev_handle = local_root->dev_handle;
}
}
@@ -119,6 +125,8 @@
starpu_data_get_interface_on_node(root_handle, node);
local->ptr = local_root->ptr + length_first*elemsize;
+ local->offset = local_root->offset + length_first*elemsize;
+ local->dev_handle = local_root->dev_handle;
}
}
}
@@ -161,6 +169,8 @@
starpu_data_get_interface_on_node(root_handle, node);
local->ptr = local_root->ptr + current_pos*elemsize;
+ local->offset = local_root->offset + current_pos*elemsize;
+ local->dev_handle = local_root->dev_handle;
- [Starpu-devel] Pointer arithmetic and OpenCL, Nathalie Furmento, 05/03/2010
Archives gérées par MHonArc 2.6.19+.