瀏覽代碼

Fix releasing buffers of partitioned data used with reduction

Samuel Thibault 11 年之前
父節點
當前提交
2c4d2a6c7e
共有 1 個文件被更改,包括 10 次插入0 次删除
  1. 10 0
      src/datawizard/filters.c

+ 10 - 0
src/datawizard/filters.c

@@ -274,6 +274,8 @@ void _starpu_empty_codelet_function(void *buffers[], void *args)
 void starpu_data_unpartition(starpu_data_handle_t root_handle, unsigned gathering_node)
 {
 	unsigned child;
+	unsigned worker;
+	unsigned nworkers = starpu_worker_get_count();
 	unsigned node;
 	unsigned sizes[root_handle->nchildren];
 
@@ -327,6 +329,14 @@ void starpu_data_unpartition(starpu_data_handle_t root_handle, unsigned gatherin
 		_starpu_spin_lock(&child_handle->header_lock);
 
 		_starpu_data_free_interfaces(child_handle);
+
+		for (worker = 0; worker < nworkers; worker++)
+		{
+			struct _starpu_data_replicate *local = &child_handle->per_worker[worker];
+			if (local->allocated && local->automatically_allocated)
+				_starpu_request_mem_chunk_removal(child_handle, local, starpu_worker_get_memory_node(worker), sizes[child]);
+		}
+
 		_starpu_memory_stats_free(child_handle);
 		_starpu_data_requester_list_delete(child_handle->req_list);
 		_starpu_data_requester_list_delete(child_handle->reduction_req_list);