Accéder au contenu.
Menu Sympa

starpu-devel - [Starpu-devel] Pointer arithmetic and OpenCL

Objet : Developers list for StarPU

Archives de la liste

[Starpu-devel] Pointer arithmetic and OpenCL


Chronologique Discussions 
  • 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+.

Haut de le page