瀏覽代碼

tests/datawizard/allocate.c: also test limit on GPU devices

Nathalie Furmento 12 年之前
父節點
當前提交
f64e3b6cad
共有 1 個文件被更改,包括 126 次插入19 次删除
  1. 126 19
      tests/datawizard/allocate.c

+ 126 - 19
tests/datawizard/allocate.c

@@ -27,31 +27,105 @@ int main(int argc, char **argv)
 }
 #else
 
-int main(int argc, char **argv)
+int test_prefetch(unsigned memnodes)
 {
 	int ret;
-	float *buffer;
-	float *buffer2;
-	float *buffer3;
-	size_t global_size;
+	float *buffers[4];
+	starpu_data_handle_t handles[4];
+	unsigned i;
+	ssize_t available_size;
 
-	setenv("STARPU_LIMIT_CUDA_MEM", "1", 1);
-	setenv("STARPU_LIMIT_OPENCL_MEM", "1", 1);
-	setenv("STARPU_LIMIT_CPU_MEM", "1", 1);
+	buffers[0] = malloc(1*1024*512);
+	STARPU_ASSERT(buffers[0]);
 
-        ret = starpu_init(NULL);
-	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
+	starpu_variable_data_register(&handles[0], 0, (uintptr_t)buffers[0], 1*1024*512);
+	for(i=1 ; i<memnodes ; i++)
+	{
+		starpu_data_prefetch_on_node(handles[0], i, 0);
+	}
+
+	for(i=1 ; i<memnodes ; i++)
+	{
+		available_size = starpu_memory_get_available(i);
+		FPRINTF(stderr, "Available memory size on node %u: %ld\n", i, available_size);
+		STARPU_CHECK_RETURN_VALUE_IS((int) available_size, 1*1024*512, "starpu_memory_get_available (node %u)", i);
+	}
+
+	buffers[1] = malloc(1*1024*256);
+	STARPU_ASSERT(buffers[1]);
+
+	starpu_variable_data_register(&handles[1], 0, (uintptr_t)buffers[1], 1*1024*256);
+	for(i=1 ; i<memnodes ; i++)
+	{
+		starpu_data_prefetch_on_node(handles[1], i, 0);
+	}
+
+	for(i=1 ; i<memnodes ; i++)
+	{
+		available_size = starpu_memory_get_available(i);
+		FPRINTF(stderr, "Available memory size on node %u: %ld\n", i, available_size);
+		STARPU_CHECK_RETURN_VALUE_IS((int)available_size, 1*1024*256, "starpu_memory_get_available (node %u)", i);
+	}
+
+	buffers[2] = malloc(1*1024*600);
+	STARPU_ASSERT(buffers[2]);
+
+	starpu_variable_data_register(&handles[2], 0, (uintptr_t)buffers[2], 1*1024*600);
+	for(i=1 ; i<memnodes ; i++)
+	{
+		starpu_data_prefetch_on_node(handles[2], i, 0);
+	}
+
+	for(i=1 ; i<memnodes ; i++)
+	{
+		available_size = starpu_memory_get_available(i);
+		FPRINTF(stderr, "Available memory size on node %u: %ld\n", i, available_size);
+		// here, we do not know which data has been cleaned, we cannot test the exact amout of available memory
+		STARPU_CHECK_RETURN_VALUE((available_size == 0), "starpu_memory_get_available (node %u)", i);
+	}
+
+	buffers[3] = malloc(1*1024*512);
+	STARPU_ASSERT(buffers[3]);
+
+	starpu_variable_data_register(&handles[3], 0, (uintptr_t)buffers[3], 1*1024*512);
+	for(i=0 ; i<memnodes ; i++)
+	{
+		starpu_data_prefetch_on_node(handles[3], i, 0);
+	}
 
-	global_size = _starpu_memory_manager_get_global_memory_size(0);
-	if (global_size == 0)
+	for(i=1 ; i<memnodes ; i++)
 	{
-		FPRINTF(stderr, "Global memory size unavailable, skip the test\n");
-		starpu_shutdown();
-		return STARPU_TEST_SKIPPED;
+		available_size = starpu_memory_get_available(i);
+		FPRINTF(stderr, "Available memory size on node %u: %ld\n", i, available_size);
+		STARPU_CHECK_RETURN_VALUE_IS((int)available_size, 1*1024*512, "starpu_memory_get_available (node %u)", i);
 	}
-	STARPU_CHECK_RETURN_VALUE_IS((int)global_size, 1*1024*1024, "_starpu_memory_manager_get_global_memory_size");
-	FPRINTF(stderr, "Available memory size on node 0: %ld\n", global_size);
+
+	for(i=0 ; i<4 ; i++)
+	{
+		free(buffers[i]);
+		starpu_data_unregister(handles[i]);
+	}
+
+#ifdef STARPU_DEVEL
+#warning is is normal that all memory has not been cleaned here? i was assuming the available memory to be 1G
+#endif
+//	for(i=1 ; i<memnodes ; i++)
+//	{
+//		available_size = starpu_memory_get_available(i);
+//		FPRINTF(stderr, "Available memory size on node %u: %ld\n", i, available_size);
+//		STARPU_CHECK_RETURN_VALUE_IS((int)available_size, 1*1024*1024, "starpu_memory_get_available (node %u)", i);
+//	}
+
+	return 0;
+}
+
+void test_malloc()
+{
+	int ret;
+	float *buffer;
+	float *buffer2;
+	float *buffer3;
+	size_t global_size;
 
 	ret = starpu_malloc_flags((void **)&buffer, 1, STARPU_MALLOC_COUNT);
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_malloc_flags");
@@ -79,9 +153,42 @@ int main(int argc, char **argv)
 
 	starpu_free_flags(buffer3, 1*1024*512, STARPU_MALLOC_COUNT);
 	starpu_free_flags(buffer, 1, STARPU_MALLOC_COUNT);
+}
+
+int main(int argc, char **argv)
+{
+	int ret;
+	unsigned memnodes, i;
+	ssize_t available_size;
+
+	setenv("STARPU_LIMIT_CUDA_MEM", "1", 1);
+	setenv("STARPU_LIMIT_OPENCL_MEM", "1", 1);
+	setenv("STARPU_LIMIT_CPU_MEM", "1", 1);
+
+        ret = starpu_init(NULL);
+	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
+	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
+
+	memnodes = starpu_memory_nodes_get_count();
+	for(i=0 ; i<memnodes ; i++)
+	{
+		available_size = starpu_memory_get_available(i);
+		if (available_size == -1)
+		{
+			FPRINTF(stderr, "Global memory size for node %u unavailable, skip the test\n", i);
+			starpu_shutdown();
+			return STARPU_TEST_SKIPPED;
+		}
+		FPRINTF(stderr, "Available memory size on node %u: %ld\n", i, available_size);
+		STARPU_CHECK_RETURN_VALUE_IS((int)available_size, 1*1024*1024, "starpu_memory_get_available (node %u)", i);
+	}
+
+	test_malloc();
+	ret = test_prefetch(memnodes);
 
 	starpu_shutdown();
-	return 0;
+	return ret;
 }
 
  #endif
+