replicate_refcnt 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. replicate.refcnt usage
  2. ======================
  3. It is used to make sure the replicate still exists on some memory node.
  4. It is thus used
  5. - during task duration for each data
  6. - during data requests, to make sure that the source and target still exist
  7. - during data reduction, to keep the per-worker data available for reduction
  8. - during application data acquisition
  9. Function detail
  10. ---------------
  11. * makes sure there is at least a reference:
  12. - copy_data_1_to_1_generic()
  13. - _starpu_driver_copy_data_1_to_1()
  14. - _starpu_post_data_request()
  15. - starpu_handle_data_request()
  16. * creates a reference:
  17. * Released by starpu_handle_data_request_completion:
  18. - _starpu_create_data_request():
  19. - 1 on dst_replicate
  20. - 1 on src_replicate if (mode & STARPU_R)
  21. - _starpu_search_existing_data_request() on src_replicate when turning a request without STARPU_R into one that does.
  22. * Released by _starpu_data_end_reduction_mode_terminate:
  23. - _starpu_data_end_reduction_mode() for each initialized per-worker buffer, creates a reduction_tmp_handles for them
  24. * Released by _starpu_release_data_on_node or inside _starpu_prefetch_data_on_node_with_mode:
  25. - _starpu_fetch_data_on_node() when !detached
  26. * indirectly creates a reference:
  27. * Released by _starpu_push_task_output():
  28. - fetch_data()
  29. - _starpu_fetch_task_input() through fetch_data() for each task data (one per unique data)
  30. * Released by starpu_data_release():
  31. - starpu_data_acquire_cb()
  32. * releases a reference:
  33. - starpu_handle_data_request_completion()
  34. - 1 on dst_replicate
  35. - 1 on src_replicate if (mode & STARPU_R)
  36. - _starpu_data_end_reduction_mode_terminate() for each per-worker buffer which has a reduction_tmp_handles
  37. - _starpu_release_data_on_node()
  38. * indirectly releases a reference:
  39. - starpu_handle_data_request() through starpu_handle_data_request_completion() when returning 0.
  40. - _starpu_push_task_output() for each task data (one per unique data)
  41. - starpu_data_release()
  42. - _starpu_handle_node_data_requests() through _starpu_handle_node_data_requests() for each completed request, which is not put back on any list.
  43. * temporarily increases, and decreases after:
  44. - transfer_subtree_to_node()
  45. - _starpu_allocate_interface()
  46. - _starpu_prefetch_data_on_node_with_mode(), when produced by the call to _starpu_fetch_data_on_node (!detached)
  47. - starpu_data_prefetch_on_node(),
  48. - starpu_data_invalidate()
  49. - _starpu_data_unregister()
  50. - _starpu_benchmark_ping_pong()