浏览代码

Change `starpu_handle_to_pointer' to handle not-yet-allocated data.

Ludovic Courtès 14 年之前
父节点
当前提交
ed3657f0d5

+ 2 - 1
include/starpu_data_interfaces.h

@@ -107,7 +107,8 @@ void starpu_data_register(starpu_data_handle *handleptr, uint32_t home_node,
 				struct starpu_data_interface_ops_t *ops);
 
 /* Return the local pointer associated with HANDLE or NULL if HANDLE's
- * interface does not support this operation.  */
+ * interface does not support this operation or if HANDLE has a "home node"
+ * equal to -1.  */
 void *starpu_handle_to_pointer(starpu_data_handle handle);
 
 extern struct starpu_data_interface_ops_t _starpu_interface_matrix_ops;

+ 1 - 1
src/datawizard/interfaces/data_interface.c

@@ -273,7 +273,7 @@ void starpu_data_register(starpu_data_handle *handleptr, uint32_t home_node,
 
 void *starpu_handle_to_pointer(starpu_data_handle handle)
 {
-	if (handle->ops->handle_to_pointer)
+	if (handle->ops->handle_to_pointer && handle->home_node != -1)
 	{
 		return handle->ops->handle_to_pointer(handle);
 	}

+ 8 - 0
tests/datawizard/handle_to_pointer.c

@@ -48,6 +48,14 @@ int main(int argc, char *argv[])
 	assert(starpu_handle_to_pointer(handle) == pointer);
 	starpu_data_unregister(handle);
 
+	/* Lazy allocation.  */
+	starpu_vector_data_register(&handle, -1, 0 /* NULL */,
+				    COUNT, sizeof(float));
+	assert(starpu_handle_to_pointer(handle) == NULL);
+	starpu_data_unregister(handle);
+
+	starpu_free(pointer);
+
 	starpu_shutdown();
 
 	return EXIT_SUCCESS;