瀏覽代碼

Add starpu_data_get_coordinates_array

Samuel Thibault 5 年之前
父節點
當前提交
04c456453f
共有 4 個文件被更改,包括 39 次插入2 次删除
  1. 1 0
      ChangeLog
  2. 9 1
      include/starpu_data.h
  3. 5 0
      src/datawizard/coherency.h
  4. 24 1
      src/datawizard/interfaces/data_interface.c

+ 1 - 0
ChangeLog

@@ -56,6 +56,7 @@ Small features:
   * And STARPU_LIMIT_BANDWIDTH environment variable.
   * And STARPU_LIMIT_BANDWIDTH environment variable.
   * Add field starpu_conf::precedence_over_environment_variables to ignore
   * Add field starpu_conf::precedence_over_environment_variables to ignore
     environment variables when parameters are set directly in starpu_conf
     environment variables when parameters are set directly in starpu_conf
+  * Add starpu_data_get_coordinates_array
 
 
 StarPU 1.3.3 (git revision 11afc5b007fe1ab1c729b55b47a5a98ef7f3cfad)
 StarPU 1.3.3 (git revision 11afc5b007fe1ab1c729b55b47a5a98ef7f3cfad)
 ====================================================================
 ====================================================================

+ 9 - 1
include/starpu_data.h

@@ -123,7 +123,7 @@ void starpu_data_set_name(starpu_data_handle_t handle, const char *name);
    tools. \p dimensions is the size of the \p dims array. This can be
    tools. \p dimensions is the size of the \p dims array. This can be
    for instance the tile coordinates within a big matrix.
    for instance the tile coordinates within a big matrix.
 */
 */
-void starpu_data_set_coordinates_array(starpu_data_handle_t handle, int dimensions, int dims[]);
+void starpu_data_set_coordinates_array(starpu_data_handle_t handle, unsigned dimensions, int dims[]);
 
 
 /**
 /**
    Set the coordinates of the data, to be shown in various profiling
    Set the coordinates of the data, to be shown in various profiling
@@ -133,6 +133,14 @@ void starpu_data_set_coordinates_array(starpu_data_handle_t handle, int dimensio
 void starpu_data_set_coordinates(starpu_data_handle_t handle, unsigned dimensions, ...);
 void starpu_data_set_coordinates(starpu_data_handle_t handle, unsigned dimensions, ...);
 
 
 /**
 /**
+   Get the coordinates of the data, as set by a previous call to
+   starpu_data_set_coordinates_array() or starpu_data_set_coordinates()
+   \p dimensions is the size of the \p dims array.
+   This returns the actual number of returned coordinates.
+*/
+unsigned starpu_data_get_coordinates_array(starpu_data_handle_t handle, unsigned dimensions, int dims[]);
+
+/**
    Unregister a data \p handle from StarPU. If the data was
    Unregister a data \p handle from StarPU. If the data was
    automatically allocated by StarPU because the home node was -1, all
    automatically allocated by StarPU because the home node was -1, all
    automatically allocated buffers are freed. Otherwise, a valid copy
    automatically allocated buffers are freed. Otherwise, a valid copy

+ 5 - 0
src/datawizard/coherency.h

@@ -281,6 +281,11 @@ struct _starpu_data_state
 
 
 	int partition_automatic_disabled;
 	int partition_automatic_disabled;
 
 
+	/** Application-provided coordinates. The maximum dimension (5) is
+	  * relatively arbitrary. */
+	unsigned dimensions;
+	int coordinates[5];
+
 	/** A generic pointer to data in the user land (could be anything and this
 	/** A generic pointer to data in the user land (could be anything and this
 	 * is not manage by StarPU) */
 	 * is not manage by StarPU) */
 	void *user_data;
 	void *user_data;

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

@@ -1117,8 +1117,18 @@ int starpu_data_get_home_node(starpu_data_handle_t handle)
 	return handle->home_node;
 	return handle->home_node;
 }
 }
 
 
-void starpu_data_set_coordinates_array(starpu_data_handle_t handle STARPU_ATTRIBUTE_UNUSED, int dimensions STARPU_ATTRIBUTE_UNUSED, int dims[] STARPU_ATTRIBUTE_UNUSED)
+void starpu_data_set_coordinates_array(starpu_data_handle_t handle, unsigned dimensions, int dims[])
 {
 {
+	unsigned i;
+	unsigned max_dimensions = sizeof(handle->coordinates)/sizeof(handle->coordinates[0]);
+
+	if (dimensions > max_dimensions)
+		dimensions = max_dimensions;
+
+	handle->dimensions = dimensions;
+	for (i = 0; i < dimensions; i++)
+		handle->coordinates[i] = dims[i];
+
 	_STARPU_TRACE_DATA_COORDINATES(handle, dimensions, dims);
 	_STARPU_TRACE_DATA_COORDINATES(handle, dimensions, dims);
 }
 }
 
 
@@ -1135,3 +1145,16 @@ void starpu_data_set_coordinates(starpu_data_handle_t handle, unsigned dimension
 
 
 	starpu_data_set_coordinates_array(handle, dimensions, dims);
 	starpu_data_set_coordinates_array(handle, dimensions, dims);
 }
 }
+
+unsigned starpu_data_get_coordinates_array(starpu_data_handle_t handle, unsigned dimensions, int dims[])
+{
+	unsigned i;
+
+	if (dimensions > handle->dimensions)
+		dimensions = handle->dimensions;
+
+	for (i = 0; i < dimensions; i++)
+		dims[i] = handle->coordinates[i];
+
+	return dimensions;
+}