starpu_heteroprio.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /* StarPU --- Runtime system for heterogeneous multicore architectures.
  2. *
  3. * Copyright (C) 2015-2021 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
  4. *
  5. * StarPU is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU Lesser General Public License as published by
  7. * the Free Software Foundation; either version 2.1 of the License, or (at
  8. * your option) any later version.
  9. *
  10. * StarPU is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. *
  14. * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  15. */
  16. #ifndef __STARPU_SCHEDULER_HETEROPRIO_H__
  17. #define __STARPU_SCHEDULER_HETEROPRIO_H__
  18. #include <starpu.h>
  19. #ifdef __cplusplus
  20. extern "C"
  21. {
  22. #endif
  23. /**
  24. @defgroup API_HeteroPrio Heteroprio Scheduler
  25. @brief This is the interface for the heteroprio scheduler
  26. @{
  27. */
  28. #define STARPU_HETEROPRIO_MAX_PREFETCH 2
  29. #if STARPU_HETEROPRIO_MAX_PREFETCH <= 0
  30. #error STARPU_HETEROPRIO_MAX_PREFETCH == 1 means no prefetch so STARPU_HETEROPRIO_MAX_PREFETCH must >= 1
  31. #endif
  32. #define STARPU_AUTOHETEROPRIO_PRIORITY_ORDERING_POLICY_COUNT 28
  33. enum starpu_autoheteroprio_priority_ordering_policy
  34. {
  35. STARPU_HETEROPRIO_NOD_TIME_COMBINATION, // 0
  36. STARPU_HETEROPRIO_BEST_NODS_SCORE,
  37. STARPU_HETEROPRIO_BEST_NODS,
  38. STARPU_HETEROPRIO_URT_PURE,
  39. STARPU_HETEROPRIO_URT,
  40. STARPU_HETEROPRIO_URT_2, // 5
  41. STARPU_HETEROPRIO_URT_DOT_DIFF_PURE,
  42. STARPU_HETEROPRIO_URT_DOT_DIFF_PURE_2,
  43. STARPU_HETEROPRIO_URT_DOT_REL_DIFF_PURE,
  44. STARPU_HETEROPRIO_URT_DOT_REL_DIFF_PURE_2,
  45. STARPU_HETEROPRIO_URT_DOT_DIFF_2, // 10
  46. STARPU_HETEROPRIO_URT_DOT_DIFF_3,
  47. STARPU_HETEROPRIO_URT_DOT_DIFF_4,
  48. STARPU_HETEROPRIO_URT_DOT_DIFF_5,
  49. STARPU_HETEROPRIO_URT_DOT_DIFF_6,
  50. STARPU_HETEROPRIO_URT_DOT_DIFF_7, // 15
  51. STARPU_HETEROPRIO_URT_DOT_DIFF_8,
  52. STARPU_HETEROPRIO_URT_DOT_DIFF_9,
  53. STARPU_HETEROPRIO_URT_DOT_DIFF_10,
  54. STARPU_HETEROPRIO_URT_DOT_DIFF_11,
  55. STARPU_HETEROPRIO_URTS_PER_SECONDS, // 20
  56. STARPU_HETEROPRIO_URTS_PER_SECONDS_2,
  57. STARPU_HETEROPRIO_URTS_PER_SECONDS_DIFF,
  58. STARPU_HETEROPRIO_URTS_TIME_RELEASED_DIFF,
  59. STARPU_HETEROPRIO_URTS_TIME_COMBINATION,
  60. STARPU_HETEROPRIO_NODS_PER_SECOND,
  61. STARPU_HETEROPRIO_NODS_TIME_RELEASED,
  62. STARPU_HETEROPRIO_NODS_TIME_RELEASED_DIFF
  63. };
  64. static const char starpu_autoheteroprio_priority_ordering_policy_names[STARPU_AUTOHETEROPRIO_PRIORITY_ORDERING_POLICY_COUNT][64] =
  65. {
  66. "STARPU_HETEROPRIO_NOD_TIME_COMBINATION",
  67. "STARPU_HETEROPRIO_BEST_NODS_SCORE",
  68. "STARPU_HETEROPRIO_BEST_NODS",
  69. "STARPU_HETEROPRIO_URT_PURE",
  70. "STARPU_HETEROPRIO_URT",
  71. "STARPU_HETEROPRIO_URT_2",
  72. "STARPU_HETEROPRIO_URT_DOT_DIFF_PURE",
  73. "STARPU_HETEROPRIO_URT_DOT_DIFF_PURE_2",
  74. "STARPU_HETEROPRIO_URT_DOT_REL_DIFF_PURE",
  75. "STARPU_HETEROPRIO_URT_DOT_REL_DIFF_PURE_2",
  76. "STARPU_HETEROPRIO_URT_DOT_DIFF_2",
  77. "STARPU_HETEROPRIO_URT_DOT_DIFF_3",
  78. "STARPU_HETEROPRIO_URT_DOT_DIFF_4",
  79. "STARPU_HETEROPRIO_URT_DOT_DIFF_5",
  80. "STARPU_HETEROPRIO_URT_DOT_DIFF_6",
  81. "STARPU_HETEROPRIO_URT_DOT_DIFF_7",
  82. "STARPU_HETEROPRIO_URT_DOT_DIFF_8",
  83. "STARPU_HETEROPRIO_URT_DOT_DIFF_9",
  84. "STARPU_HETEROPRIO_URT_DOT_DIFF_10",
  85. "STARPU_HETEROPRIO_URT_DOT_DIFF_11",
  86. "STARPU_HETEROPRIO_URTS_PER_SECONDS",
  87. "STARPU_HETEROPRIO_URTS_PER_SECONDS_2",
  88. "STARPU_HETEROPRIO_URTS_PER_SECONDS_DIFF",
  89. "STARPU_HETEROPRIO_URTS_TIME_RELEASED_DIFF",
  90. "STARPU_HETEROPRIO_URTS_TIME_COMBINATION",
  91. "STARPU_HETEROPRIO_NODS_PER_SECOND",
  92. "STARPU_HETEROPRIO_NODS_TIME_RELEASED",
  93. "STARPU_HETEROPRIO_NODS_TIME_RELEASED_DIFF"
  94. };
  95. /** Set if heteroprio should use data locality or not */
  96. void starpu_heteroprio_set_use_locality(unsigned sched_ctx_id, unsigned use_locality);
  97. /** Tell how many prio there are for a given arch */
  98. void starpu_heteroprio_set_nb_prios(unsigned sched_ctx_id, enum starpu_worker_archtype arch, unsigned max_prio);
  99. /** Set the mapping for a given arch prio=>bucket */
  100. void starpu_heteroprio_set_mapping(unsigned sched_ctx_id, enum starpu_worker_archtype arch, unsigned source_prio, unsigned dest_bucket_id);
  101. /** Tell which arch is the faster for the tasks of a bucket (optional) */
  102. void starpu_heteroprio_set_faster_arch(unsigned sched_ctx_id, enum starpu_worker_archtype arch, unsigned bucket_id);
  103. /** Tell how slow is a arch for the tasks of a bucket (optional) */
  104. void starpu_heteroprio_set_arch_slow_factor(unsigned sched_ctx_id, enum starpu_worker_archtype arch, unsigned bucket_id, float slow_factor);
  105. /** One memory node will be one wgroup */
  106. void starpu_heteroprio_map_wgroup_memory_nodes(unsigned sched_ctx_id);
  107. /** Print the current setup groups */
  108. void starpu_heteroprio_print_wgroups(FILE *stream, unsigned sched_ctx_id);
  109. /** @} */
  110. #ifdef __cplusplus
  111. }
  112. #endif
  113. #endif /* __STARPU_SCHEDULER_HETEROPRIO_H__ */