瀏覽代碼

new function starpu_data_print() to display basic informations on a handle

Nathalie Furmento 4 年之前
父節點
當前提交
d49e3ce83a
共有 2 個文件被更改,包括 64 次插入1 次删除
  1. 5 0
      include/starpu_data_interfaces.h
  2. 59 1
      src/datawizard/interfaces/data_interface.c

+ 5 - 0
include/starpu_data_interfaces.h

@@ -675,6 +675,11 @@ starpu_data_handle_t starpu_data_lookup(const void *ptr);
 int starpu_data_get_home_node(starpu_data_handle_t handle);
 
 /**
+   Print basic informations on \p handle on \p node
+ */
+void starpu_data_print(starpu_data_handle_t handle, unsigned node, FILE *stream);
+
+/**
    Return the next available id for a newly created data interface
    (\ref DefiningANewDataInterface).
 */

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

@@ -67,7 +67,12 @@ void _starpu_data_interface_shutdown()
 
 	if (registered_handles)
 	{
-		_STARPU_DISP("[warning] The application has not unregistered all data handles.\n");
+		_STARPU_DISP("[warning] The application has not unregistered all data handles....\n");
+		HASH_ITER(hh, registered_handles, entry, tmp)
+		{
+			starpu_data_print(entry->handle, STARPU_MAIN_RAM, stderr);
+		}
+		_STARPU_DISP("[warning] .... The application has not unregistered all data handles.\n");
 	}
 
 	_starpu_spin_destroy(&registered_handles_lock);
@@ -1285,3 +1290,56 @@ unsigned starpu_data_get_coordinates_array(starpu_data_handle_t handle, unsigned
 
 	return dimensions;
 }
+
+void starpu_data_print(starpu_data_handle_t handle, unsigned node, FILE *stream)
+{
+	switch (handle->ops->interfaceid)
+	{
+	case(STARPU_MATRIX_INTERFACE_ID):
+		fprintf(stream, "Matrix");
+		break;
+	case(STARPU_BLOCK_INTERFACE_ID):
+		fprintf(stream, "Block");
+		break;
+	case(STARPU_VECTOR_INTERFACE_ID):
+		fprintf(stream, "Vector");
+		break;
+	case(STARPU_CSR_INTERFACE_ID):
+		fprintf(stream, "CSR");
+		break;
+	case(STARPU_BCSR_INTERFACE_ID):
+		fprintf(stream, "BCSR");
+		break;
+	case(STARPU_VARIABLE_INTERFACE_ID):
+		fprintf(stream, "Variable");
+		break;
+	case(STARPU_VOID_INTERFACE_ID):
+		fprintf(stream, "Void");
+		break;
+	case(STARPU_MULTIFORMAT_INTERFACE_ID):
+		fprintf(stream, "Multfiformat");
+		break;
+	case(STARPU_COO_INTERFACE_ID):
+		fprintf(stream, "COO");
+		break;
+	case(STARPU_TENSOR_INTERFACE_ID):
+		fprintf(stream, "Tensor");
+		break;
+	case(STARPU_UNKNOWN_INTERFACE_ID ):
+		fprintf(stream, "UNKNOWN");
+		break;
+	default:
+		fprintf(stream, "User interface with id %d", handle->ops->interfaceid);
+		break;
+	}
+	void *data_interface = starpu_data_get_interface_on_node(handle, node);
+	if (handle->ops->describe && data_interface)
+	{
+		char buffer[1024];
+		handle->ops->describe(data_interface, buffer, sizeof(buffer));
+		fprintf(stream, " %s\n", buffer);
+	}
+	else
+		fprintf(stream, "\n");
+
+}