Explorar o código

- enable to set an offset when registering vectors, in order to facilitate the implementation of OpenMP's array slices

Olivier Aumage %!s(int64=10) %!d(string=hai) anos
pai
achega
569eaf01c4

+ 3 - 0
include/starpu_data_interfaces.h

@@ -251,6 +251,9 @@ struct starpu_vector_interface
 };
 
 void starpu_vector_data_register(starpu_data_handle_t *handle, unsigned home_node, uintptr_t ptr, uint32_t nx, size_t elemsize);
+#ifdef STARPU_OPENMP
+void starpu_vector_data_register_with_offset(starpu_data_handle_t *handleptr, unsigned home_node, uintptr_t ptr, uint32_t nx, size_t elemsize, size_t offset);
+#endif /* STARPU_OPENMP */
 void starpu_vector_ptr_register(starpu_data_handle_t handle, unsigned node, uintptr_t ptr, uintptr_t dev_handle, size_t offset);
 uint32_t starpu_vector_get_nx(starpu_data_handle_t handle);
 size_t starpu_vector_get_elemsize(starpu_data_handle_t handle);

+ 26 - 5
src/datawizard/interfaces/vector_interface.c

@@ -103,6 +103,15 @@ static void register_vector_handle(starpu_data_handle_t handle, unsigned home_no
 	}
 }
 
+static void _starpu_vector_data_register(starpu_data_handle_t * const handleptr, unsigned home_node, struct starpu_vector_interface * const vector)
+{
+#ifdef STARPU_USE_SCC
+	_starpu_scc_set_offset_in_shared_memory((void*)vector->ptr, (void**)&(vector->dev_handle), &(vector->offset));
+#endif
+
+	starpu_data_register(handleptr, home_node, vector, &starpu_interface_vector_ops);
+}
+
 /* declare a new data with the vector interface */
 void starpu_vector_data_register(starpu_data_handle_t *handleptr, unsigned home_node,
                         uintptr_t ptr, uint32_t nx, size_t elemsize)
@@ -116,13 +125,25 @@ void starpu_vector_data_register(starpu_data_handle_t *handleptr, unsigned home_
                 .dev_handle = ptr,
                 .offset = 0
 	};
+	_starpu_vector_data_register(handleptr, home_node, &vector);
+}
 
-#ifdef STARPU_USE_SCC
-	_starpu_scc_set_offset_in_shared_memory((void*)vector.ptr, (void**)&(vector.dev_handle), &(vector.offset));
-#endif
-
-	starpu_data_register(handleptr, home_node, &vector, &starpu_interface_vector_ops);
+#ifdef STARPU_OPENMP
+void starpu_vector_data_register_with_offset(starpu_data_handle_t *handleptr, unsigned home_node,
+                        uintptr_t ptr, uint32_t nx, size_t elemsize, size_t offset)
+{
+	struct starpu_vector_interface vector =
+	{
+		.id = STARPU_VECTOR_INTERFACE_ID,
+		.ptr = ptr,
+		.nx = nx,
+		.elemsize = elemsize,
+                .dev_handle = ptr,
+                .offset = offset
+	};
+	_starpu_vector_data_register(handleptr, home_node, &vector);
 }
+#endif /* STARPU_OPENMP */
 
 void starpu_vector_ptr_register(starpu_data_handle_t handle, unsigned node,
 			uintptr_t ptr, uintptr_t dev_handle, size_t offset)