discopop 4.0.0__tar.gz → 4.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (559) hide show
  1. {discopop-4.0.0 → discopop-4.1.0}/PKG-INFO +1 -1
  2. {discopop-4.0.0 → discopop-4.1.0}/README.md +11 -11
  3. {discopop-4.0.0 → discopop-4.1.0}/discopop.egg-info/PKG-INFO +1 -1
  4. {discopop-4.0.0 → discopop-4.1.0}/discopop.egg-info/SOURCES.txt +54 -0
  5. {discopop-4.0.0 → discopop-4.1.0}/discopop.egg-info/entry_points.txt +5 -0
  6. {discopop-4.0.0 → discopop-4.1.0}/discopop.egg-info/requires.txt +1 -0
  7. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/__main__.py +10 -2
  8. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/Node.py +6 -0
  9. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/patterns/PatternBase.py +10 -0
  10. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/discopop_explorer.py +11 -0
  11. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/output/gephi.py +1 -1
  12. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/traversal/parent.py +17 -1
  13. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detection.py +3 -2
  14. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_1.py +1 -1
  15. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_2.py +2 -2
  16. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_3.py +2 -2
  17. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_6.py +1 -1
  18. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/do_all_detector.py +32 -5
  19. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/geometric_decomposition_detector.py +3 -4
  20. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/pipeline_detector.py +3 -4
  21. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/reduction_detector.py +34 -6
  22. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/collect_statistics.py +4 -0
  23. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/cyclomatic_complexity/boxplot.py +12 -6
  24. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/cyclomatic_complexity/cc_dictionary.py +10 -6
  25. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/cyclomatic_complexity/total.py +14 -6
  26. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/utilities/num_function_calls.py +2 -0
  27. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utils.py +2 -2
  28. discopop-4.1.0/discopop_library/Aliases/aliases.py +9 -0
  29. discopop-4.1.0/discopop_library/DependencyComparator/DependencyComparatorArguments.py +20 -0
  30. discopop-4.1.0/discopop_library/DependencyComparator/__main__.py +45 -0
  31. discopop-4.1.0/discopop_library/DependencyComparator/dependency_comparator.py +91 -0
  32. discopop-4.1.0/discopop_library/EmpiricalAutotuning/ArgumentClasses.py +64 -0
  33. discopop-4.1.0/discopop_library/EmpiricalAutotuning/Autotuner.py +266 -0
  34. discopop-4.1.0/discopop_library/EmpiricalAutotuning/Classes/CodeConfiguration.py +197 -0
  35. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/EmpiricalAutotuning/Classes/ExecutionResult.py +12 -2
  36. discopop-4.1.0/discopop_library/EmpiricalAutotuning/__main__.py +66 -0
  37. discopop-4.1.0/discopop_library/EmpiricalAutotuning/optimization/check_single_combination.py +138 -0
  38. discopop-4.1.0/discopop_library/EmpiricalAutotuning/optimization/dump_greedy.py.txt +164 -0
  39. discopop-4.1.0/discopop_library/EmpiricalAutotuning/optimization/linear_hotspot_combination.py +95 -0
  40. discopop-4.1.0/discopop_library/EmpiricalAutotuning/optimization/linear_hotspot_combination_with_refinement.py +165 -0
  41. discopop-4.1.0/discopop_library/EmpiricalAutotuning/optimization/measure_only.py +95 -0
  42. discopop-4.1.0/discopop_library/EmpiricalAutotuning/output/intermediate.py +61 -0
  43. discopop-4.1.0/discopop_library/EmpiricalAutotuning/priorities.py +48 -0
  44. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/EmpiricalAutotuning/utils.py +1 -5
  45. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/FolderStructure/setup.py +27 -8
  46. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/FolderStructure/teardown.py +18 -8
  47. discopop-4.1.0/discopop_library/HostpotLoader/utilities.py +78 -0
  48. discopop-4.1.0/discopop_library/PreProcessor/PreProcessorArguments.py +25 -0
  49. discopop-4.1.0/discopop_library/PreProcessor/__main__.py +45 -0
  50. discopop-4.1.0/discopop_library/PreProcessor/demangle/data_xml.py +72 -0
  51. discopop-4.1.0/discopop_library/PreProcessor/demangle/dependency_metadata.py +84 -0
  52. discopop-4.1.0/discopop_library/PreProcessor/demangle/driver.py +42 -0
  53. discopop-4.1.0/discopop_library/PreProcessor/demangle/dynamic_dependencies.py +112 -0
  54. discopop-4.1.0/discopop_library/PreProcessor/demangle/reduction.py +74 -0
  55. discopop-4.1.0/discopop_library/PreProcessor/demangle/static_dependencies.py +112 -0
  56. discopop-4.1.0/discopop_library/PreProcessor/demangle/utilities.py +26 -0
  57. discopop-4.1.0/discopop_library/PreProcessor/pre_processor.py +41 -0
  58. discopop-4.1.0/discopop_library/ProjectManager/ProjectManager.py +53 -0
  59. discopop-4.1.0/discopop_library/ProjectManager/ProjectManagerArguments.py +74 -0
  60. discopop-4.1.0/discopop_library/ProjectManager/__main__.py +73 -0
  61. discopop-4.1.0/discopop_library/ProjectManager/configurations/copying.py +86 -0
  62. discopop-4.1.0/discopop_library/ProjectManager/configurations/deletion.py +26 -0
  63. discopop-4.1.0/discopop_library/ProjectManager/configurations/execution.py +170 -0
  64. discopop-4.1.0/discopop_library/ProjectManager/reports/console.py +107 -0
  65. discopop-4.1.0/discopop_library/ProjectManager/reports/csv.py +98 -0
  66. discopop-4.1.0/discopop_library/ProjectManager/reports/efficiency.py +137 -0
  67. discopop-4.1.0/discopop_library/ProjectManager/reports/execution_time.py +128 -0
  68. discopop-4.1.0/discopop_library/ProjectManager/reports/full.py +64 -0
  69. discopop-4.1.0/discopop_library/ProjectManager/reports/speedup.py +137 -0
  70. discopop-4.1.0/discopop_library/ProjectManager/utilities/CLI/listConfiguration.py +344 -0
  71. discopop-4.1.0/discopop_library/ProjectManager/utilities/deriveSettingsFiles.py +56 -0
  72. discopop-4.1.0/discopop_library/ProjectManager/utilities/initializeDirectories.py +33 -0
  73. discopop-4.1.0/discopop_library/ProjectManager/utilities/initializeFiles.py +65 -0
  74. discopop-4.1.0/discopop_library/ProjectManager/utilities/reset.py +41 -0
  75. {discopop-4.0.0/discopop_library/EmpiricalAutotuning → discopop-4.1.0/discopop_library/SanityChecker}/ArgumentClasses.py +10 -7
  76. {discopop-4.0.0/discopop_library/EmpiricalAutotuning → discopop-4.1.0/discopop_library/SanityChecker}/Classes/CodeConfiguration.py +34 -45
  77. discopop-4.1.0/discopop_library/SanityChecker/Classes/ExecutionResult.py +32 -0
  78. discopop-4.1.0/discopop_library/SanityChecker/SanityChecker.py +144 -0
  79. discopop-4.1.0/discopop_library/SanityChecker/Types.py +16 -0
  80. discopop-4.1.0/discopop_library/SanityChecker/__main__.py +62 -0
  81. discopop-4.1.0/discopop_library/SanityChecker/utils.py +25 -0
  82. discopop-4.1.0/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
  83. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/CostModels/CostModel.py +1 -1
  84. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/DataTransfers/prepare_force_branch_end_data_movement.py +1 -1
  85. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement_prior_to_call.py +1 -1
  86. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Microbench/ExtrapInterpolatedMicrobench.py +1 -1
  87. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Microbench/Microbench.py +2 -2
  88. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Microbench/utils.py +1 -1
  89. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/PETParser/PETParser.py +3 -1
  90. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Variables/ExperimentUtils.py +1 -1
  91. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/context/ContextObjectUtils.py +1 -1
  92. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/ContextNode.py +1 -1
  93. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/DeviceSwitch.py +1 -1
  94. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/SynchronizationTrigger.py +1 -1
  95. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/system/Network.py +1 -1
  96. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/system/System.py +1 -1
  97. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/system/devices/CPU.py +1 -1
  98. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/system/devices/Device.py +1 -1
  99. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/system/devices/GPU.py +1 -1
  100. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/system/system_utils.py +1 -1
  101. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/gui/plotting/CostModels.py +1 -1
  102. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/gui/presentation/OptionTable.py +1 -1
  103. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/gui/queries/ValueTableQuery.py +1 -1
  104. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/optimization/evaluate.py +1 -1
  105. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/optimization/evaluate_all_decision_combinations.py +1 -1
  106. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/optimization/evolutionary_algorithm.py +1 -1
  107. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/optimization/greedy.py +1 -1
  108. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/suggestions/importers/do_all.py +1 -1
  109. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/suggestions/optimizers/loop_collapse.py +1 -1
  110. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/RandomSamples.py +1 -1
  111. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization/TopDown.py +1 -1
  112. discopop-4.1.0/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
  113. discopop-4.1.0/discopop_library/global_data/version/VERSION +1 -0
  114. discopop-4.1.0/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
  115. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/global_data/version/__pycache__/utils.cpython-38.pyc +0 -0
  116. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/result_classes/PatternStorage.py +8 -0
  117. discopop-4.1.0/requirements.txt +45 -0
  118. {discopop-4.0.0 → discopop-4.1.0}/setup.py +7 -1
  119. discopop-4.1.0/test/wip_end_to_end/do_all/stack_access/various/case_4/__init__.py +0 -0
  120. discopop-4.1.0/test/wip_end_to_end/reduction_pattern/__init__.py +0 -0
  121. discopop-4.1.0/test/wip_end_to_end/reduction_pattern/negative/__init__.py +0 -0
  122. discopop-4.1.0/test/wip_end_to_end/reduction_pattern/negative/case_2/__init__.py +0 -0
  123. discopop-4.1.0/test/wip_end_to_end/sharing_clauses/__init__.py +0 -0
  124. discopop-4.1.0/test/wip_end_to_end/sharing_clauses/do_all/__init__.py +0 -0
  125. discopop-4.1.0/test/wip_end_to_end/sharing_clauses/do_all/first_private/__init__.py +0 -0
  126. discopop-4.1.0/test/wip_end_to_end/sharing_clauses/do_all/first_private/case_2/__init__.py +0 -0
  127. discopop-4.0.0/discopop_library/EmpiricalAutotuning/Autotuner.py +0 -302
  128. discopop-4.0.0/discopop_library/EmpiricalAutotuning/__main__.py +0 -52
  129. discopop-4.0.0/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
  130. discopop-4.0.0/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
  131. discopop-4.0.0/discopop_library/global_data/version/VERSION +0 -1
  132. discopop-4.0.0/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
  133. discopop-4.0.0/requirements.txt +0 -58
  134. {discopop-4.0.0 → discopop-4.1.0}/LICENSE +0 -0
  135. {discopop-4.0.0 → discopop-4.1.0}/MANIFEST.in +0 -0
  136. {discopop-4.0.0 → discopop-4.1.0}/discopop.egg-info/dependency_links.txt +0 -0
  137. {discopop-4.0.0 → discopop-4.1.0}/discopop.egg-info/top_level.txt +0 -0
  138. {discopop-4.0.0 → discopop-4.1.0}/discopop.egg-info/zip-safe +0 -0
  139. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/__init__.py +0 -0
  140. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/aliases/LineID.py +0 -0
  141. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/aliases/MemoryRegion.py +0 -0
  142. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/aliases/NodeID.py +0 -0
  143. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/aliases/__init__.py +0 -0
  144. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/CUNode.py +0 -0
  145. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/Dependency.py +0 -0
  146. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/DummyNode.py +0 -0
  147. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/FunctionNode.py +0 -0
  148. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/LoopNode.py +0 -0
  149. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/NodeT.py +0 -0
  150. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/PEGraphX.py +0 -0
  151. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/PEGraph/__init__.py +0 -0
  152. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/__init__.py +0 -0
  153. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/patterns/PatternInfo.py +0 -0
  154. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/patterns/__init__.py +0 -0
  155. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/classes/variable.py +0 -0
  156. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/enums/DepType.py +0 -0
  157. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/enums/EdgeType.py +0 -0
  158. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/enums/MWType.py +0 -0
  159. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/enums/NodeType.py +0 -0
  160. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/enums/__init__.py +0 -0
  161. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/__init__.py +0 -0
  162. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/output/__init__.py +0 -0
  163. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/output/json.py +0 -0
  164. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/__init__.py +0 -0
  165. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/check_reachability.py +0 -0
  166. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/depends_ignore_readonly.py +0 -0
  167. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/is_loop_index.py +0 -0
  168. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/is_passed_by_reference.py +0 -0
  169. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/is_predecessor.py +0 -0
  170. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/is_readonly_inside_loop_body.py +0 -0
  171. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/is_reduction_var_by_name.py +0 -0
  172. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/properties/is_scalar_val.py +0 -0
  173. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/__init__.py +0 -0
  174. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/edges.py +0 -0
  175. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/memory_regions.py +0 -0
  176. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/nodes.py +0 -0
  177. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/paths.py +0 -0
  178. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/reductions.py +0 -0
  179. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/subtree.py +0 -0
  180. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/queries/variables.py +0 -0
  181. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/traversal/__init__.py +0 -0
  182. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/traversal/children.py +0 -0
  183. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/traversal/successors.py +0 -0
  184. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/unused/__init__.py +0 -0
  185. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/PEGraph/unused/unused_functions.py +0 -0
  186. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/functions/__init__.py +0 -0
  187. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/json_serializer.py +0 -0
  188. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/parallel_utils.py +0 -0
  189. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/__init__.py +0 -0
  190. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/CombinedGPURegions.py +0 -0
  191. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/__init__.py +0 -0
  192. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Aliases.py +0 -0
  193. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Dependency.py +0 -0
  194. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/EntryPoint.py +0 -0
  195. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Enums.py +0 -0
  196. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/ExitPoint.py +0 -0
  197. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Update.py +0 -0
  198. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/__init__.py +0 -0
  199. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/combined_gpu_pattern_detector.py +0 -0
  200. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/prepare_metadata.py +0 -0
  201. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_4.py +0 -0
  202. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_5.py +0 -0
  203. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/utilities.py +0 -0
  204. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/device_updates.py +0 -0
  205. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPULoop.py +0 -0
  206. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPUMemory.py +0 -0
  207. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPURegions.py +0 -0
  208. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/__init__.py +0 -0
  209. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/gpu_pattern_detector.py +0 -0
  210. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/utils.py +0 -0
  211. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/__init__.py +0 -0
  212. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/alias_detection.py +0 -0
  213. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/classes.py +0 -0
  214. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/filter.py +0 -0
  215. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/postprocessor.py +0 -0
  216. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/preprocessor.py +0 -0
  217. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/__init__.py +0 -0
  218. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/auxiliary.py +0 -0
  219. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/barriers.py +0 -0
  220. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/data_sharing_clauses.py +0 -0
  221. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/dependency_clauses.py +0 -0
  222. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/tasks.py +0 -0
  223. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/task_parallelism_detector.py +0 -0
  224. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/pattern_detectors/task_parallelism/tp_utils.py +0 -0
  225. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/plugins/__init__.py +0 -0
  226. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/plugins/pipeline.py +0 -0
  227. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/test/__init__.py +0 -0
  228. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/PEGraphConstruction/PEGraphConstructionUtilities.py +0 -0
  229. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/PEGraphConstruction/ParserUtilities.py +0 -0
  230. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/PEGraphConstruction/__init__.py +0 -0
  231. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/PEGraphConstruction/classes/DependenceItem.py +0 -0
  232. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/PEGraphConstruction/classes/LoopData.py +0 -0
  233. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/PEGraphConstruction/classes/__init__.py +0 -0
  234. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/PEGraphConstruction/parser.py +0 -0
  235. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/__init__.py +0 -0
  236. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/general/__init__.py +0 -0
  237. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/general/generate_Data_CUInst.py +0 -0
  238. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/__init__.py +0 -0
  239. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/cyclomatic_complexity/__init__.py +0 -0
  240. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/cyclomatic_complexity/subtree.py +0 -0
  241. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/maximum_call_path_depth.py +0 -0
  242. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/num_function_calls.py +0 -0
  243. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/output_statistics.py +0 -0
  244. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/suggestion_call_path_depths.py +0 -0
  245. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/suggestion_cyclomatic_complexity.py +0 -0
  246. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/suggestion_lines_of_code.py +0 -0
  247. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/utilities/__init__.py +0 -0
  248. {discopop-4.0.0 → discopop-4.1.0}/discopop_explorer/utilities/statistics/utilities/call_path_depth.py +0 -0
  249. {discopop-4.0.0/discopop_library/CodeGenerator → discopop-4.1.0/discopop_library/Aliases}/__init__.py +0 -0
  250. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/ArgumentClasses/GeneralArguments.py +0 -0
  251. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/CodeGenerator/CodeGenerator.py +0 -0
  252. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/CodeGenerator/CodeGeneratorArguments.py +0 -0
  253. {discopop-4.0.0/discopop_library/CodeGenerator/classes → discopop-4.1.0/discopop_library/CodeGenerator}/__init__.py +0 -0
  254. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/CodeGenerator/classes/ContentBuffer.py +0 -0
  255. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/CodeGenerator/classes/Enums.py +0 -0
  256. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/CodeGenerator/classes/Line.py +0 -0
  257. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/CodeGenerator/classes/Pragma.py +0 -0
  258. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/CodeGenerator/classes/UnpackedSuggestion.py +0 -0
  259. {discopop-4.0.0/discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover → discopop-4.1.0/discopop_library/CodeGenerator/classes}/__init__.py +0 -0
  260. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/ArgumentClasses.py +0 -0
  261. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/GEPDependencyRemover.py +0 -0
  262. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/Types.py +0 -0
  263. {discopop-4.0.0/discopop_library/Compatibility/LegacyDiscoPoP → discopop-4.1.0/discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover}/__init__.py +0 -0
  264. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/__main__.py +0 -0
  265. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/utils.py +0 -0
  266. {discopop-4.0.0/discopop_library/EmpiricalAutotuning → discopop-4.1.0/discopop_library/Compatibility/LegacyDiscoPoP}/__init__.py +0 -0
  267. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/ConfigProvider/ConfigProviderArguments.py +0 -0
  268. {discopop-4.0.0/discopop_library/FolderStructure → discopop-4.1.0/discopop_library/ConfigProvider}/__init__.py +0 -0
  269. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/ConfigProvider/__main__.py +0 -0
  270. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/ConfigProvider/assets/.gitignore +0 -0
  271. {discopop-4.0.0/discopop_library/JSONHandler → discopop-4.1.0/discopop_library/ConfigProvider/assets}/__init__.py +0 -0
  272. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/ConfigProvider/config_provider.py +0 -0
  273. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/DependencyMetadata/compare_metadata.py +0 -0
  274. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/EmpiricalAutotuning/Statistics/StatisticsGraph.py +0 -0
  275. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/EmpiricalAutotuning/Types.py +0 -0
  276. {discopop-4.0.0/discopop_library/LineMapping → discopop-4.1.0/discopop_library/EmpiricalAutotuning}/__init__.py +0 -0
  277. {discopop-4.0.0/discopop_library/MemoryRegions → discopop-4.1.0/discopop_library/FolderStructure}/__init__.py +0 -0
  278. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/GlobalLogger/setup.py +0 -0
  279. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/HostpotLoader/HotspotLoaderArguments.py +0 -0
  280. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/HostpotLoader/HotspotNodeType.py +0 -0
  281. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/HostpotLoader/HotspotType.py +0 -0
  282. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/HostpotLoader/hostpot_loader.py +0 -0
  283. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/JSONHandler/JSONHandler.py +0 -0
  284. {discopop-4.0.0/discopop_library/PatchApplicator → discopop-4.1.0/discopop_library/JSONHandler}/__init__.py +0 -0
  285. {discopop-4.0.0/discopop_library/PatchGenerator → discopop-4.1.0/discopop_library/LineMapping}/__init__.py +0 -0
  286. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/LineMapping/delete.py +0 -0
  287. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/LineMapping/diff_modifications.py +0 -0
  288. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/LineMapping/initialize.py +0 -0
  289. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/LineMapping/load.py +0 -0
  290. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/LineMapping/save.py +0 -0
  291. {discopop-4.0.0/discopop_library/PathManagement → discopop-4.1.0/discopop_library/MemoryRegions}/__init__.py +0 -0
  292. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/MemoryRegions/utils.py +0 -0
  293. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/PatchApplicatorArguments.py +0 -0
  294. {discopop-4.0.0/discopop_library → discopop-4.1.0/discopop_library/PatchApplicator}/__init__.py +0 -0
  295. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/__main__.py +0 -0
  296. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/apply.py +0 -0
  297. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/clear.py +0 -0
  298. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/list.py +0 -0
  299. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/load.py +0 -0
  300. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/patch_applicator.py +0 -0
  301. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchApplicator/rollback.py +0 -0
  302. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchGenerator/PatchGeneratorArguments.py +0 -0
  303. {discopop-4.0.0/discopop_library/discopop_optimizer/CostModels/DataTransfer → discopop-4.1.0/discopop_library/PatchGenerator}/__init__.py +0 -0
  304. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchGenerator/__main__.py +0 -0
  305. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchGenerator/diffs.py +0 -0
  306. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchGenerator/from_json_patterns.py +0 -0
  307. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchGenerator/from_optimizer_output.py +0 -0
  308. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatchGenerator/patch_generator.py +0 -0
  309. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PathManagement/PathManagement.py +0 -0
  310. {discopop-4.0.0/discopop_library/discopop_optimizer/CostModels → discopop-4.1.0/discopop_library/PathManagement}/__init__.py +0 -0
  311. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/PatternIdManagement/unique_pattern_id.py +0 -0
  312. {discopop-4.0.0/discopop_library/discopop_optimizer/DataTransfers → discopop-4.1.0/discopop_library/PreProcessor}/__init__.py +0 -0
  313. {discopop-4.0.0/discopop_library/discopop_optimizer/Microbench → discopop-4.1.0/discopop_library/ProjectManager}/__init__.py +0 -0
  314. {discopop-4.0.0/discopop_library/discopop_optimizer/PETParser/DataAccesses → discopop-4.1.0/discopop_library/ProjectManager/utilities/CLI}/__init__.py +0 -0
  315. {discopop-4.0.0/discopop_library/discopop_optimizer/PETParser → discopop-4.1.0/discopop_library/ProjectManager/utilities}/__init__.py +0 -0
  316. {discopop-4.0.0/discopop_library/discopop_optimizer/Variables → discopop-4.1.0/discopop_library/SanityChecker}/__init__.py +0 -0
  317. {discopop-4.0.0/discopop_library/discopop_optimizer → discopop-4.1.0/discopop_library}/__init__.py +0 -0
  318. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/CostModels/DataTransfer/DataTransferCosts.py +0 -0
  319. {discopop-4.0.0/discopop_library/discopop_optimizer/bindings → discopop-4.1.0/discopop_library/discopop_optimizer/CostModels/DataTransfer}/__init__.py +0 -0
  320. {discopop-4.0.0/discopop_library/discopop_optimizer/classes → discopop-4.1.0/discopop_library/discopop_optimizer/CostModels}/__init__.py +0 -0
  321. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/CostModels/utilities.py +0 -0
  322. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/DataTransfers/DataTransfers.py +0 -0
  323. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/DataTransfers/NewDataTransfers.py +0 -0
  324. {discopop-4.0.0/discopop_library/discopop_optimizer/classes/context → discopop-4.1.0/discopop_library/discopop_optimizer/DataTransfers}/__init__.py +0 -0
  325. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/DataTransfers/calculate_configuration_data_movement.py +0 -0
  326. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement.py +0 -0
  327. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Microbench/DelaunayInterpolatedMicrobench.py +0 -0
  328. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Microbench/MicrobenchParser.py +0 -0
  329. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Microbench/MixedMicrobench.py +0 -0
  330. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Microbench/PureDataMicrobench.py +0 -0
  331. {discopop-4.0.0/discopop_library/discopop_optimizer/classes/edges → discopop-4.1.0/discopop_library/discopop_optimizer/Microbench}/__init__.py +0 -0
  332. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/OptimizationGraph.py +0 -0
  333. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/OptimizerArguments.py +0 -0
  334. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/PETParser/DataAccesses/CalculateUpdates.py +0 -0
  335. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/PETParser/DataAccesses/FromCUs.py +0 -0
  336. {discopop-4.0.0/discopop_library/discopop_optimizer/classes/enums → discopop-4.1.0/discopop_library/discopop_optimizer/PETParser/DataAccesses}/__init__.py +0 -0
  337. {discopop-4.0.0/discopop_library/discopop_optimizer/classes/nodes → discopop-4.1.0/discopop_library/discopop_optimizer/PETParser}/__init__.py +0 -0
  338. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/UpdateOptimization/AddRangesToUpdates.py +0 -0
  339. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/UpdateOptimization/LoopInitializationUpdates.py +0 -0
  340. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py +0 -0
  341. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/UpdateOptimization/RemoveLoopIndexUpdates.py +0 -0
  342. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/UpdateOptimization/RemoveSameDeviceUpdates.py +0 -0
  343. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/UpdateOptimization/main.py +0 -0
  344. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/Variables/Experiment.py +0 -0
  345. {discopop-4.0.0/discopop_library/discopop_optimizer/classes/system → discopop-4.1.0/discopop_library/discopop_optimizer/Variables}/__init__.py +0 -0
  346. {discopop-4.0.0/discopop_library/discopop_optimizer/classes/system/devices → discopop-4.1.0/discopop_library/discopop_optimizer}/__init__.py +0 -0
  347. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/__main__.py +0 -0
  348. {discopop-4.0.0/discopop_library/discopop_optimizer/classes/types → discopop-4.1.0/discopop_library/discopop_optimizer/bindings}/__init__.py +0 -0
  349. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/bindings/utilities.py +0 -0
  350. {discopop-4.0.0/discopop_library/discopop_optimizer/gui → discopop-4.1.0/discopop_library/discopop_optimizer/classes}/__init__.py +0 -0
  351. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/context/ContextObject.py +0 -0
  352. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/context/Update.py +0 -0
  353. {discopop-4.0.0/discopop_library/discopop_optimizer/gui/plotting → discopop-4.1.0/discopop_library/discopop_optimizer/classes/context}/__init__.py +0 -0
  354. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/CallEdge.py +0 -0
  355. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/ChildEdge.py +0 -0
  356. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/DataFlowEdge.py +0 -0
  357. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/GenericEdge.py +0 -0
  358. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/MutuallyExclusiveEdge.py +0 -0
  359. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/OptionEdge.py +0 -0
  360. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/RequirementEdge.py +0 -0
  361. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/SuccessorEdge.py +0 -0
  362. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/edges/TemporaryEdge.py +0 -0
  363. {discopop-4.0.0/discopop_library/discopop_optimizer/gui/presentation → discopop-4.1.0/discopop_library/discopop_optimizer/classes/edges}/__init__.py +0 -0
  364. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/enums/Distributions.py +0 -0
  365. {discopop-4.0.0/discopop_library/discopop_optimizer/gui/queries → discopop-4.1.0/discopop_library/discopop_optimizer/classes/enums}/__init__.py +0 -0
  366. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/ContextMerge.py +0 -0
  367. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/ContextRestore.py +0 -0
  368. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/ContextSave.py +0 -0
  369. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshot.py +0 -0
  370. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshotPop.py +0 -0
  371. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/FunctionReturn.py +0 -0
  372. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/FunctionRoot.py +0 -0
  373. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/GenericNode.py +0 -0
  374. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/Loop.py +0 -0
  375. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/nodes/Workload.py +0 -0
  376. {discopop-4.0.0/discopop_library/discopop_optimizer/gui/widgets → discopop-4.1.0/discopop_library/discopop_optimizer/classes/nodes}/__init__.py +0 -0
  377. {discopop-4.0.0/discopop_library/discopop_optimizer/scheduling → discopop-4.1.0/discopop_library/discopop_optimizer/classes/system}/__init__.py +0 -0
  378. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/system/devices/DeviceTypeEnum.py +0 -0
  379. {discopop-4.0.0/discopop_library/discopop_optimizer/suggestions → discopop-4.1.0/discopop_library/discopop_optimizer/classes/system/devices}/__init__.py +0 -0
  380. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/types/Aliases.py +0 -0
  381. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/classes/types/DataAccessType.py +0 -0
  382. {discopop-4.0.0/discopop_library/discopop_optimizer/suggestions/importers → discopop-4.1.0/discopop_library/discopop_optimizer/classes/types}/__init__.py +0 -0
  383. {discopop-4.0.0/discopop_library/discopop_optimizer/utilities → discopop-4.1.0/discopop_library/discopop_optimizer/gui}/__init__.py +0 -0
  384. {discopop-4.0.0/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization → discopop-4.1.0/discopop_library/discopop_optimizer/gui/plotting}/__init__.py +0 -0
  385. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/gui/presentation/ChoiceDetails.py +0 -0
  386. {discopop-4.0.0/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization → discopop-4.1.0/discopop_library/discopop_optimizer/gui/presentation}/__init__.py +0 -0
  387. {discopop-4.0.0/discopop_library/discopop_optimizer/utilities/optimization → discopop-4.1.0/discopop_library/discopop_optimizer/gui/queries}/__init__.py +0 -0
  388. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/gui/widgets/ScrollableFrame.py +0 -0
  389. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/gui/widgets/ScrollableText.py +0 -0
  390. {discopop-4.0.0/discopop_library/discopop_optimizer/utilities/visualization → discopop-4.1.0/discopop_library/discopop_optimizer/gui/widgets}/__init__.py +0 -0
  391. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/interactive/interactive_optimizer.py +0 -0
  392. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/optimization/validation.py +0 -0
  393. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/optimizer.py +0 -0
  394. {discopop-4.0.0/discopop_library/global_data → discopop-4.1.0/discopop_library/discopop_optimizer/scheduling}/__init__.py +0 -0
  395. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/scheduling/workload_delta.py +0 -0
  396. {discopop-4.0.0/discopop_library/global_data/version → discopop-4.1.0/discopop_library/discopop_optimizer/suggestions}/__init__.py +0 -0
  397. {discopop-4.0.0/discopop_library/result_classes → discopop-4.1.0/discopop_library/discopop_optimizer/suggestions/importers}/__init__.py +0 -0
  398. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/suggestions/importers/main.py +0 -0
  399. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/suggestions/importers/reduction.py +0 -0
  400. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/suggestions/optimizers/main.py +0 -0
  401. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/utilities/MOGUtilities.py +0 -0
  402. {discopop-4.0.0/test → discopop-4.1.0/discopop_library/discopop_optimizer/utilities}/__init__.py +0 -0
  403. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/utilities/insert_device_switch_nodes.py +0 -0
  404. {discopop-4.0.0/test/end_to_end → discopop-4.1.0/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization}/__init__.py +0 -0
  405. {discopop-4.0.0/test/end_to_end/do_all → discopop-4.1.0/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization}/__init__.py +0 -0
  406. {discopop-4.0.0/test/end_to_end/do_all/backwards_array_access → discopop-4.1.0/discopop_library/discopop_optimizer/utilities/optimization}/__init__.py +0 -0
  407. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/utilities/simple_utilities.py +0 -0
  408. {discopop-4.0.0/test/end_to_end/do_all/calls → discopop-4.1.0/discopop_library/discopop_optimizer/utilities/visualization}/__init__.py +0 -0
  409. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/utilities/visualization/plotting.py +0 -0
  410. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/discopop_optimizer/utilities/visualization/update_graph.py +0 -0
  411. {discopop-4.0.0/test/end_to_end/do_all/calls/above_nesting_level_3 → discopop-4.1.0/discopop_library/global_data}/__init__.py +0 -0
  412. {discopop-4.0.0/test/end_to_end/do_all/calls/allowing → discopop-4.1.0/discopop_library/global_data/version}/__init__.py +0 -0
  413. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/global_data/version/utils.py +0 -0
  414. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/py.typed +0 -0
  415. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/result_classes/DetectionResult.py +0 -0
  416. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/result_classes/MergedPattern.py +0 -0
  417. {discopop-4.0.0 → discopop-4.1.0}/discopop_library/result_classes/OptimizerOutputPattern.py +0 -0
  418. {discopop-4.0.0/test/end_to_end/do_all/calls/allowing_2 → discopop-4.1.0/discopop_library/result_classes}/__init__.py +0 -0
  419. {discopop-4.0.0 → discopop-4.1.0}/setup.cfg +0 -0
  420. {discopop-4.0.0/test/end_to_end/do_all/calls/complex → discopop-4.1.0/test}/__init__.py +0 -0
  421. {discopop-4.0.0/test/end_to_end/do_all/calls/complex_no_varname_duplicates → discopop-4.1.0/test/end_to_end}/__init__.py +0 -0
  422. {discopop-4.0.0/test/end_to_end/do_all/calls/preventing → discopop-4.1.0/test/end_to_end/do_all}/__init__.py +0 -0
  423. {discopop-4.0.0/test/end_to_end/do_all/calls/preventing/simple → discopop-4.1.0/test/end_to_end/do_all/backwards_array_access}/__init__.py +0 -0
  424. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/backwards_array_access/test.py +0 -0
  425. {discopop-4.0.0/test/end_to_end/do_all/calls/second_order → discopop-4.1.0/test/end_to_end/do_all/calls}/__init__.py +0 -0
  426. {discopop-4.0.0/test/end_to_end/do_all/calls/second_order/allowing → discopop-4.1.0/test/end_to_end/do_all/calls/above_nesting_level_3}/__init__.py +0 -0
  427. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/above_nesting_level_3/test.py +0 -0
  428. {discopop-4.0.0/test/end_to_end/do_all/calls/second_order/allowing_2 → discopop-4.1.0/test/end_to_end/do_all/calls/allowing}/__init__.py +0 -0
  429. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/allowing/test.py +0 -0
  430. {discopop-4.0.0/test/end_to_end/do_all/calls/second_order/preventing → discopop-4.1.0/test/end_to_end/do_all/calls/allowing_2}/__init__.py +0 -0
  431. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/allowing_2/test.py +0 -0
  432. {discopop-4.0.0/test/end_to_end/do_all/calls/second_order/preventing_2 → discopop-4.1.0/test/end_to_end/do_all/calls/complex}/__init__.py +0 -0
  433. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/complex/test.py +0 -0
  434. {discopop-4.0.0/test/end_to_end/do_all/daxpy → discopop-4.1.0/test/end_to_end/do_all/calls/complex_no_varname_duplicates}/__init__.py +0 -0
  435. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/complex_no_varname_duplicates/test.py +0 -0
  436. {discopop-4.0.0/test/end_to_end/do_all/negative → discopop-4.1.0/test/end_to_end/do_all/calls/preventing}/__init__.py +0 -0
  437. {discopop-4.0.0/test/end_to_end/do_all/negative/nested/OMPSCR → discopop-4.1.0/test/end_to_end/do_all/calls/preventing/simple}/__init__.py +0 -0
  438. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/preventing/simple/test.py +0 -0
  439. {discopop-4.0.0/test/end_to_end/do_all/negative/nested → discopop-4.1.0/test/end_to_end/do_all/calls/second_order}/__init__.py +0 -0
  440. {discopop-4.0.0/test/end_to_end/do_all/simple → discopop-4.1.0/test/end_to_end/do_all/calls/second_order/allowing}/__init__.py +0 -0
  441. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/second_order/allowing/test.py +0 -0
  442. {discopop-4.0.0/test/end_to_end/do_all/simple/global_vars → discopop-4.1.0/test/end_to_end/do_all/calls/second_order/allowing_2}/__init__.py +0 -0
  443. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/second_order/allowing_2/test.py +0 -0
  444. {discopop-4.0.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy → discopop-4.1.0/test/end_to_end/do_all/calls/second_order/preventing}/__init__.py +0 -0
  445. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/second_order/preventing/test.py +0 -0
  446. {discopop-4.0.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays → discopop-4.1.0/test/end_to_end/do_all/calls/second_order/preventing_2}/__init__.py +0 -0
  447. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/calls/second_order/preventing_2/test.py +0 -0
  448. {discopop-4.0.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct → discopop-4.1.0/test/end_to_end/do_all/daxpy}/__init__.py +0 -0
  449. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/daxpy/test.py +0 -0
  450. {discopop-4.0.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors → discopop-4.1.0/test/end_to_end/do_all/negative}/__init__.py +0 -0
  451. {discopop-4.0.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct → discopop-4.1.0/test/end_to_end/do_all/negative/nested/OMPSCR}/__init__.py +0 -0
  452. {discopop-4.0.0/test/end_to_end/do_all/simple → discopop-4.1.0/test/end_to_end/do_all/negative}/nested/__init__.py +0 -0
  453. {discopop-4.0.0/test/end_to_end/do_all/simple/nested/depth_2 → discopop-4.1.0/test/end_to_end/do_all/simple}/__init__.py +0 -0
  454. {discopop-4.0.0/test/end_to_end/do_all/simple/nested/depth_2/positive → discopop-4.1.0/test/end_to_end/do_all/simple/global_vars}/__init__.py +0 -0
  455. {discopop-4.0.0/test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall → discopop-4.1.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy}/__init__.py +0 -0
  456. {discopop-4.0.0/test/end_to_end/do_all/simple/not_nested → discopop-4.1.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays}/__init__.py +0 -0
  457. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/test.py +0 -0
  458. {discopop-4.0.0/test/end_to_end/do_all/simple/not_nested/negative → discopop-4.1.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct}/__init__.py +0 -0
  459. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/test.py +0 -0
  460. {discopop-4.0.0/test/end_to_end/do_all/simple/not_nested/negative/minimal → discopop-4.1.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors}/__init__.py +0 -0
  461. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/test.py +0 -0
  462. {discopop-4.0.0/test/end_to_end/do_all/simple/not_nested/negative/stack_access → discopop-4.1.0/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct}/__init__.py +0 -0
  463. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/test.py +0 -0
  464. {discopop-4.0.0/test/end_to_end/do_all/simple/not_nested/positive → discopop-4.1.0/test/end_to_end/do_all/simple/nested}/__init__.py +0 -0
  465. {discopop-4.0.0/test/end_to_end/do_all/stack_access → discopop-4.1.0/test/end_to_end/do_all/simple/nested/depth_2}/__init__.py +0 -0
  466. {discopop-4.0.0/test/end_to_end/do_all/stack_access/nested → discopop-4.1.0/test/end_to_end/do_all/simple/nested/depth_2/positive}/__init__.py +0 -0
  467. {discopop-4.0.0/test/end_to_end/do_all/stack_access/nested/positive → discopop-4.1.0/test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall}/__init__.py +0 -0
  468. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall/test.py +0 -0
  469. {discopop-4.0.0/test/end_to_end/do_all/stack_access/various → discopop-4.1.0/test/end_to_end/do_all/simple/not_nested}/__init__.py +0 -0
  470. {discopop-4.0.0/test/end_to_end/do_all/stack_access/various/case_0 → discopop-4.1.0/test/end_to_end/do_all/simple/not_nested/negative}/__init__.py +0 -0
  471. {discopop-4.0.0/test/end_to_end/do_all/stack_access/various/case_1 → discopop-4.1.0/test/end_to_end/do_all/simple/not_nested/negative/minimal}/__init__.py +0 -0
  472. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/not_nested/negative/minimal/test.py +0 -0
  473. {discopop-4.0.0/test/end_to_end/do_all/stack_access/various/case_2 → discopop-4.1.0/test/end_to_end/do_all/simple/not_nested/negative/stack_access}/__init__.py +0 -0
  474. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/not_nested/negative/stack_access/test.py +0 -0
  475. {discopop-4.0.0/test/end_to_end/do_all/stack_access/various/case_3 → discopop-4.1.0/test/end_to_end/do_all/simple/not_nested/positive}/__init__.py +0 -0
  476. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/simple/not_nested/positive/test.py +0 -0
  477. {discopop-4.0.0/test/end_to_end/do_all/stack_access/various/case_5 → discopop-4.1.0/test/end_to_end/do_all/stack_access}/__init__.py +0 -0
  478. {discopop-4.0.0/test/end_to_end/do_all/struct → discopop-4.1.0/test/end_to_end/do_all/stack_access/nested}/__init__.py +0 -0
  479. {discopop-4.0.0/test/end_to_end/do_all/struct → discopop-4.1.0/test/end_to_end/do_all/stack_access/nested}/positive/__init__.py +0 -0
  480. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/stack_access/nested/positive/test.py +0 -0
  481. {discopop-4.0.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy → discopop-4.1.0/test/end_to_end/do_all/stack_access/various}/__init__.py +0 -0
  482. {discopop-4.0.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct → discopop-4.1.0/test/end_to_end/do_all/stack_access/various/case_0}/__init__.py +0 -0
  483. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/stack_access/various/case_0/test.py +0 -0
  484. {discopop-4.0.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types → discopop-4.1.0/test/end_to_end/do_all/stack_access/various/case_1}/__init__.py +0 -0
  485. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/stack_access/various/case_1/test.py +0 -0
  486. {discopop-4.0.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types → discopop-4.1.0/test/end_to_end/do_all/stack_access/various/case_2}/__init__.py +0 -0
  487. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/stack_access/various/case_2/test.py +0 -0
  488. {discopop-4.0.0/test/end_to_end/optimizer → discopop-4.1.0/test/end_to_end/do_all/stack_access/various/case_3}/__init__.py +0 -0
  489. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/stack_access/various/case_3/test.py +0 -0
  490. {discopop-4.0.0/test/end_to_end/optimizer/loop_collapse → discopop-4.1.0/test/end_to_end/do_all/stack_access/various/case_5}/__init__.py +0 -0
  491. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/stack_access/various/case_5/test.py +0 -0
  492. {discopop-4.0.0/test/end_to_end/optimizer/loop_collapse/positive → discopop-4.1.0/test/end_to_end/do_all/struct}/__init__.py +0 -0
  493. {discopop-4.0.0/test/end_to_end/optimizer/loop_collapse/positive/simple_1 → discopop-4.1.0/test/end_to_end/do_all/struct/positive}/__init__.py +0 -0
  494. {discopop-4.0.0/test/end_to_end/reduction_pattern → discopop-4.1.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy}/__init__.py +0 -0
  495. {discopop-4.0.0/test/end_to_end/reduction_pattern/negative → discopop-4.1.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct}/__init__.py +0 -0
  496. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/test.py +0 -0
  497. {discopop-4.0.0/test/end_to_end/reduction_pattern/negative/case_1 → discopop-4.1.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types}/__init__.py +0 -0
  498. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/test.py +0 -0
  499. {discopop-4.0.0/test/end_to_end/reduction_pattern/positive → discopop-4.1.0/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types}/__init__.py +0 -0
  500. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/test.py +0 -0
  501. {discopop-4.0.0/test/end_to_end/reduction_pattern/positive/nested/OMPSCR → discopop-4.1.0/test/end_to_end/optimizer}/__init__.py +0 -0
  502. {discopop-4.0.0/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot → discopop-4.1.0/test/end_to_end/optimizer/loop_collapse}/__init__.py +0 -0
  503. {discopop-4.0.0/test/end_to_end/reduction_pattern/positive/nested → discopop-4.1.0/test/end_to_end/optimizer/loop_collapse/positive}/__init__.py +0 -0
  504. {discopop-4.0.0/test/end_to_end/sharing_clauses → discopop-4.1.0/test/end_to_end/optimizer/loop_collapse/positive/simple_1}/__init__.py +0 -0
  505. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/optimizer/loop_collapse/positive/simple_1/test.py +0 -0
  506. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all → discopop-4.1.0/test/end_to_end/reduction_pattern}/__init__.py +0 -0
  507. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/first_private → discopop-4.1.0/test/end_to_end/reduction_pattern/negative}/__init__.py +0 -0
  508. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/first_private → discopop-4.1.0/test/end_to_end/reduction_pattern/negative}/case_1/__init__.py +0 -0
  509. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/reduction_pattern/negative/case_1/test.py +0 -0
  510. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/last_private → discopop-4.1.0/test/end_to_end/reduction_pattern/positive}/__init__.py +0 -0
  511. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/last_private/case_1 → discopop-4.1.0/test/end_to_end/reduction_pattern/positive/nested/OMPSCR}/__init__.py +0 -0
  512. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/no_clause → discopop-4.1.0/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot}/__init__.py +0 -0
  513. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/test.py +0 -0
  514. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/no_clause/case_1 → discopop-4.1.0/test/end_to_end/reduction_pattern/positive/nested}/__init__.py +0 -0
  515. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/private → discopop-4.1.0/test/end_to_end/sharing_clauses}/__init__.py +0 -0
  516. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/private/case_1 → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all}/__init__.py +0 -0
  517. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/private/case_2 → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/first_private}/__init__.py +0 -0
  518. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/shared → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/first_private/case_1}/__init__.py +0 -0
  519. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/first_private/case_1/test.py +0 -0
  520. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/shared/case_1 → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/last_private}/__init__.py +0 -0
  521. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/shared/case_2 → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/last_private/case_1}/__init__.py +0 -0
  522. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/last_private/case_1/test.py +0 -0
  523. {discopop-4.0.0/test/end_to_end/sharing_clauses/do_all/shared/case_3 → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/no_clause}/__init__.py +0 -0
  524. {discopop-4.0.0/test/utils → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/no_clause/case_1}/__init__.py +0 -0
  525. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/no_clause/case_1/test.py +0 -0
  526. {discopop-4.0.0/test/utils/existence → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/private}/__init__.py +0 -0
  527. {discopop-4.0.0/test/utils/sharing_clauses → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/private/case_1}/__init__.py +0 -0
  528. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/private/case_1/test.py +0 -0
  529. {discopop-4.0.0/test/utils/validator_classes → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/private/case_2}/__init__.py +0 -0
  530. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/private/case_2/test.py +0 -0
  531. {discopop-4.0.0/test/wip_end_to_end → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/shared}/__init__.py +0 -0
  532. {discopop-4.0.0/test/wip_end_to_end/do_all → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/shared/case_1}/__init__.py +0 -0
  533. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/shared/case_1/test.py +0 -0
  534. {discopop-4.0.0/test/wip_end_to_end/do_all/simple → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/shared/case_2}/__init__.py +0 -0
  535. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/shared/case_2/test.py +0 -0
  536. {discopop-4.0.0/test/wip_end_to_end/do_all/simple/nested → discopop-4.1.0/test/end_to_end/sharing_clauses/do_all/shared/case_3}/__init__.py +0 -0
  537. {discopop-4.0.0 → discopop-4.1.0}/test/end_to_end/sharing_clauses/do_all/shared/case_3/test.py +0 -0
  538. {discopop-4.0.0/test/wip_end_to_end/do_all/simple/nested/depth_2 → discopop-4.1.0/test/utils}/__init__.py +0 -0
  539. {discopop-4.0.0/test/wip_end_to_end/do_all/simple/nested/depth_2/positive → discopop-4.1.0/test/utils/existence}/__init__.py +0 -0
  540. {discopop-4.0.0 → discopop-4.1.0}/test/utils/existence/existence_utils.py +0 -0
  541. {discopop-4.0.0/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall → discopop-4.1.0/test/utils/sharing_clauses}/__init__.py +0 -0
  542. {discopop-4.0.0 → discopop-4.1.0}/test/utils/sharing_clauses/clauses_utils.py +0 -0
  543. {discopop-4.0.0 → discopop-4.1.0}/test/utils/validator_classes/DoAllInfoForValidation.py +0 -0
  544. {discopop-4.0.0/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall → discopop-4.1.0/test/utils/validator_classes}/__init__.py +0 -0
  545. {discopop-4.0.0/test/wip_end_to_end/do_all/stack_access → discopop-4.1.0/test/wip_end_to_end}/__init__.py +0 -0
  546. {discopop-4.0.0/test/wip_end_to_end/do_all/stack_access/various → discopop-4.1.0/test/wip_end_to_end/do_all}/__init__.py +0 -0
  547. {discopop-4.0.0/test/wip_end_to_end/do_all/stack_access/various/case_4 → discopop-4.1.0/test/wip_end_to_end/do_all/simple}/__init__.py +0 -0
  548. {discopop-4.0.0/test/wip_end_to_end/reduction_pattern → discopop-4.1.0/test/wip_end_to_end/do_all/simple/nested}/__init__.py +0 -0
  549. {discopop-4.0.0/test/wip_end_to_end/reduction_pattern/negative → discopop-4.1.0/test/wip_end_to_end/do_all/simple/nested/depth_2}/__init__.py +0 -0
  550. {discopop-4.0.0/test/wip_end_to_end/reduction_pattern/negative/case_2 → discopop-4.1.0/test/wip_end_to_end/do_all/simple/nested/depth_2/positive}/__init__.py +0 -0
  551. {discopop-4.0.0/test/wip_end_to_end/sharing_clauses → discopop-4.1.0/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall}/__init__.py +0 -0
  552. {discopop-4.0.0 → discopop-4.1.0}/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall/test.py +0 -0
  553. {discopop-4.0.0/test/wip_end_to_end/sharing_clauses/do_all → discopop-4.1.0/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall}/__init__.py +0 -0
  554. {discopop-4.0.0 → discopop-4.1.0}/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall/test.py +0 -0
  555. {discopop-4.0.0/test/wip_end_to_end/sharing_clauses/do_all/first_private → discopop-4.1.0/test/wip_end_to_end/do_all/stack_access}/__init__.py +0 -0
  556. {discopop-4.0.0/test/wip_end_to_end/sharing_clauses/do_all/first_private/case_2 → discopop-4.1.0/test/wip_end_to_end/do_all/stack_access/various}/__init__.py +0 -0
  557. {discopop-4.0.0 → discopop-4.1.0}/test/wip_end_to_end/do_all/stack_access/various/case_4/test.py +0 -0
  558. {discopop-4.0.0 → discopop-4.1.0}/test/wip_end_to_end/reduction_pattern/negative/case_2/test.py +0 -0
  559. {discopop-4.0.0 → discopop-4.1.0}/test/wip_end_to_end/sharing_clauses/do_all/first_private/case_2/test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: discopop
3
- Version: 4.0.0
3
+ Version: 4.1.0
4
4
  Summary: DiscoPoP is a tool that helps software developers parallelize their programs with threads. It discovers potential parallelism in a sequential program and makes recommendations on how to exploit it.
5
5
  Home-page: https://www.discopop.tu-darmstadt.de/
6
6
  Author: TU Darmstadt and Iowa State University
@@ -34,25 +34,25 @@ For a brief introduction to the command line tools, please refer to the [tools o
34
34
  For detailed information on the gathered and stored data as well as the tools themselves, please refer to [data](https://discopop-project.github.io/discopop/Data) and the pages of the individual tools in the [tools overview](https://discopop-project.github.io/discopop/Tools).
35
35
 
36
36
  ## TL;DR
37
- This example installs DiscoPoP, instruments and builds the provided example, analyzes the results, and prints the identified parallelization suggestions to the console.
37
+ If you are interested in installing DiscoPoP as a `developer`, please refer to the [DiscoPoP setup wiki page](https://discopop-project.github.io/discopop/setup/discopop/).
38
+
39
+ The following example installs DiscoPoP for `users`, instruments and builds the provided example, analyzes the results, and prints the identified parallelization suggestions to the console.
38
40
  In case any issues arise during the process, please refer to the detailed [setup instructions](https://discopop-project.github.io/discopop/Setup), contact us via GitHub messages, or get in contact by mail to [discopop-support@lists.parallel.informatik.tu-darmstadt.de](mailto:discopop-support@lists.parallel.informatik.tu-darmstadt.de).
41
+
42
+ ### Prerequisites
43
+ - Download `.deb` package from [latest Release](https://github.com/discopop-project/discopop/releases/latest)
44
+ ### Example
39
45
  ```
40
- # setup DiscoPoP
41
- git clone git@github.com:discopop-project/discopop.git
42
- cd discopop
43
- mkdir build && cd build
44
- DP_BUILD=$(pwd)
45
- cmake .. && make
46
+ # install package
47
+ sudo apt install ./<packagename>.deb
46
48
  # instrument and build the example code
47
- cd ../example
48
- mkdir build && cd build && cmake -DCMAKE_CXX_COMPILER=${DP_BUILD}/scripts/CXX_wrapper.sh .. && make
49
+ cd /opt/DiscoPoP/example
50
+ mkdir build && cd build && cmake -DCMAKE_CXX_COMPILER=discopop_cxx .. && make
49
51
  # execute instrumented code
50
52
  ./cmake_example
51
53
  # identify parallel patterns
52
54
  cd .discopop
53
55
  discopop_explorer
54
- # create applicable patches from patterns
55
- discopop_patch_generator
56
56
  # print patches to the console
57
57
  for f in $(find patch_generator -maxdepth 1 -type d); do
58
58
  echo "SUGGESTION: $f"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: discopop
3
- Version: 4.0.0
3
+ Version: 4.1.0
4
4
  Summary: DiscoPoP is a tool that helps software developers parallelize their programs with threads. It discovers potential parallelism in a sequential program and makes recommendations on how to exploit it.
5
5
  Home-page: https://www.discopop.tu-darmstadt.de/
6
6
  Author: TU Darmstadt and Iowa State University
@@ -143,6 +143,8 @@ discopop_explorer/utilities/statistics/utilities/call_path_depth.py
143
143
  discopop_explorer/utilities/statistics/utilities/num_function_calls.py
144
144
  discopop_library/__init__.py
145
145
  discopop_library/py.typed
146
+ discopop_library/Aliases/__init__.py
147
+ discopop_library/Aliases/aliases.py
146
148
  discopop_library/ArgumentClasses/GeneralArguments.py
147
149
  discopop_library/CodeGenerator/CodeGenerator.py
148
150
  discopop_library/CodeGenerator/CodeGeneratorArguments.py
@@ -161,19 +163,31 @@ discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/__init__.py
161
163
  discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/__main__.py
162
164
  discopop_library/Compatibility/LegacyDiscoPoP/GEPDependencyRemover/utils.py
163
165
  discopop_library/ConfigProvider/ConfigProviderArguments.py
166
+ discopop_library/ConfigProvider/__init__.py
164
167
  discopop_library/ConfigProvider/__main__.py
165
168
  discopop_library/ConfigProvider/config_provider.py
166
169
  discopop_library/ConfigProvider/assets/.gitignore
170
+ discopop_library/ConfigProvider/assets/__init__.py
171
+ discopop_library/DependencyComparator/DependencyComparatorArguments.py
172
+ discopop_library/DependencyComparator/__main__.py
173
+ discopop_library/DependencyComparator/dependency_comparator.py
167
174
  discopop_library/DependencyMetadata/compare_metadata.py
168
175
  discopop_library/EmpiricalAutotuning/ArgumentClasses.py
169
176
  discopop_library/EmpiricalAutotuning/Autotuner.py
170
177
  discopop_library/EmpiricalAutotuning/Types.py
171
178
  discopop_library/EmpiricalAutotuning/__init__.py
172
179
  discopop_library/EmpiricalAutotuning/__main__.py
180
+ discopop_library/EmpiricalAutotuning/priorities.py
173
181
  discopop_library/EmpiricalAutotuning/utils.py
174
182
  discopop_library/EmpiricalAutotuning/Classes/CodeConfiguration.py
175
183
  discopop_library/EmpiricalAutotuning/Classes/ExecutionResult.py
176
184
  discopop_library/EmpiricalAutotuning/Statistics/StatisticsGraph.py
185
+ discopop_library/EmpiricalAutotuning/optimization/check_single_combination.py
186
+ discopop_library/EmpiricalAutotuning/optimization/dump_greedy.py.txt
187
+ discopop_library/EmpiricalAutotuning/optimization/linear_hotspot_combination.py
188
+ discopop_library/EmpiricalAutotuning/optimization/linear_hotspot_combination_with_refinement.py
189
+ discopop_library/EmpiricalAutotuning/optimization/measure_only.py
190
+ discopop_library/EmpiricalAutotuning/output/intermediate.py
177
191
  discopop_library/FolderStructure/__init__.py
178
192
  discopop_library/FolderStructure/setup.py
179
193
  discopop_library/FolderStructure/teardown.py
@@ -182,6 +196,7 @@ discopop_library/HostpotLoader/HotspotLoaderArguments.py
182
196
  discopop_library/HostpotLoader/HotspotNodeType.py
183
197
  discopop_library/HostpotLoader/HotspotType.py
184
198
  discopop_library/HostpotLoader/hostpot_loader.py
199
+ discopop_library/HostpotLoader/utilities.py
185
200
  discopop_library/JSONHandler/JSONHandler.py
186
201
  discopop_library/JSONHandler/__init__.py
187
202
  discopop_library/LineMapping/__init__.py
@@ -211,6 +226,45 @@ discopop_library/PatchGenerator/patch_generator.py
211
226
  discopop_library/PathManagement/PathManagement.py
212
227
  discopop_library/PathManagement/__init__.py
213
228
  discopop_library/PatternIdManagement/unique_pattern_id.py
229
+ discopop_library/PreProcessor/PreProcessorArguments.py
230
+ discopop_library/PreProcessor/__init__.py
231
+ discopop_library/PreProcessor/__main__.py
232
+ discopop_library/PreProcessor/pre_processor.py
233
+ discopop_library/PreProcessor/demangle/data_xml.py
234
+ discopop_library/PreProcessor/demangle/dependency_metadata.py
235
+ discopop_library/PreProcessor/demangle/driver.py
236
+ discopop_library/PreProcessor/demangle/dynamic_dependencies.py
237
+ discopop_library/PreProcessor/demangle/reduction.py
238
+ discopop_library/PreProcessor/demangle/static_dependencies.py
239
+ discopop_library/PreProcessor/demangle/utilities.py
240
+ discopop_library/ProjectManager/ProjectManager.py
241
+ discopop_library/ProjectManager/ProjectManagerArguments.py
242
+ discopop_library/ProjectManager/__init__.py
243
+ discopop_library/ProjectManager/__main__.py
244
+ discopop_library/ProjectManager/configurations/copying.py
245
+ discopop_library/ProjectManager/configurations/deletion.py
246
+ discopop_library/ProjectManager/configurations/execution.py
247
+ discopop_library/ProjectManager/reports/console.py
248
+ discopop_library/ProjectManager/reports/csv.py
249
+ discopop_library/ProjectManager/reports/efficiency.py
250
+ discopop_library/ProjectManager/reports/execution_time.py
251
+ discopop_library/ProjectManager/reports/full.py
252
+ discopop_library/ProjectManager/reports/speedup.py
253
+ discopop_library/ProjectManager/utilities/__init__.py
254
+ discopop_library/ProjectManager/utilities/deriveSettingsFiles.py
255
+ discopop_library/ProjectManager/utilities/initializeDirectories.py
256
+ discopop_library/ProjectManager/utilities/initializeFiles.py
257
+ discopop_library/ProjectManager/utilities/reset.py
258
+ discopop_library/ProjectManager/utilities/CLI/__init__.py
259
+ discopop_library/ProjectManager/utilities/CLI/listConfiguration.py
260
+ discopop_library/SanityChecker/ArgumentClasses.py
261
+ discopop_library/SanityChecker/SanityChecker.py
262
+ discopop_library/SanityChecker/Types.py
263
+ discopop_library/SanityChecker/__init__.py
264
+ discopop_library/SanityChecker/__main__.py
265
+ discopop_library/SanityChecker/utils.py
266
+ discopop_library/SanityChecker/Classes/CodeConfiguration.py
267
+ discopop_library/SanityChecker/Classes/ExecutionResult.py
214
268
  discopop_library/__pycache__/__init__.cpython-38.pyc
215
269
  discopop_library/discopop_optimizer/OptimizationGraph.py
216
270
  discopop_library/discopop_optimizer/OptimizerArguments.py
@@ -1,8 +1,13 @@
1
1
  [console_scripts]
2
2
  discopop_auto_tuner = discopop_library.EmpiricalAutotuning.__main__:main
3
3
  discopop_config_provider = discopop_library.ConfigProvider.__main__:main
4
+ discopop_configuration_manager = discopop_library.ConfigurationManager.__main__:main
5
+ discopop_dependency_comparator = discopop_library.DependencyComparator.__main__:main
4
6
  discopop_explorer = discopop_explorer.__main__:main
5
7
  discopop_optimizer = discopop_library.discopop_optimizer.__main__:main
6
8
  discopop_patch_applicator = discopop_library.PatchApplicator.__main__:main
7
9
  discopop_patch_generator = discopop_library.PatchGenerator.__main__:main
10
+ discopop_preprocessor = discopop_library.PreProcessor.__main__:main
11
+ discopop_project_manager = discopop_library.ProjectManager.__main__:main
12
+ discopop_sanity_checker = discopop_library.SanityChecker.__main__:main
8
13
 
@@ -15,6 +15,7 @@ sympy_plot_backends
15
15
  alive_progress
16
16
  filelock
17
17
  pydot
18
+ tabulate
18
19
 
19
20
  [ci]
20
21
  mypy
@@ -69,12 +69,13 @@ def parse_args() -> ExplorerArguments:
69
69
  help="Dump DetectionResult object to JSON file. If a path is given, the DetectionResult object is written to the given file, otherwise to detection_result_dump.json. Contents are equivalent to the json output. NOTE: This dump contains a dump of the PET Graph!",
70
70
  )
71
71
  parser.add_argument(
72
- "--enable-patterns", type=str, nargs="?", default="reduction,doall,pipeline,geodec",
73
- help="Specify comma-separated list of pattern types to be identified. Options: reduction,doall,pipeline,geodec,simplegpu. Default: reduction,doall,pipeline,geodec",
72
+ "--enable-patterns", type=str, nargs="?", default="reduction,doall",
73
+ help="Specify comma-separated list of pattern types to be identified. Options: reduction,doall,pipeline,geodec,simplegpu. Default: reduction,doall",
74
74
  )
75
75
  parser.add_argument("--load-existing-doall-and-reduction-patterns", action="store_true", help="Skip pattern detection and insert existing patterns.json contents into the created detection_result.json")
76
76
  parser.add_argument("--log", type=str, default="WARNING", help="Specify log level: DEBUG, INFO, WARNING, ERROR, CRITICAL")
77
77
  parser.add_argument("--write-log", action="store_true", help="Create Logfile.")
78
+ parser.add_argument("-j", "--jobs", type=int, help="Allow the use of N threads. Use 0 or 1 to disable threading. Default: Unlimited", default=None)
78
79
 
79
80
  # EXPERIMENTAL FLAGS:
80
81
  # temporary flag for microbenchmark file
@@ -107,6 +108,10 @@ def parse_args() -> ExplorerArguments:
107
108
  experimental_parser.add_argument(
108
109
  "--enable-statistics", action="store_true", help="Disable the calculation and storing of statistics for code and generated suggestions."
109
110
  )
111
+ experimental_parser.add_argument(
112
+ "--plot-pet", type=str, nargs="?", default=None, const="explorer/pet_plot.gexf",
113
+ help="Plots PET as a GEXF file. If a path is given (file extension has to be .gexf), the PET Graph is written to the given file, otherwise to pet_plot.gexf"
114
+ )
110
115
  # fmt: on
111
116
 
112
117
  arguments = parser.parse_args()
@@ -134,6 +139,7 @@ def parse_args() -> ExplorerArguments:
134
139
  arguments.dump_pet = get_path_or_none(arguments.path, arguments.dump_pet)
135
140
  arguments.dump_detection_result = get_path_or_none(arguments.path, arguments.dump_detection_result)
136
141
  arguments.microbench_file = get_path_or_none(arguments.path, arguments.microbench_file)
142
+ arguments.plot_pet = get_path_or_none(arguments.path, arguments.plot_pet)
137
143
 
138
144
  return ExplorerArguments(
139
145
  discopop_build_path=arguments.dp_build_path,
@@ -160,6 +166,8 @@ def parse_args() -> ExplorerArguments:
160
166
  write_log=arguments.write_log,
161
167
  load_existing_doall_and_reduction_patterns=arguments.load_existing_doall_and_reduction_patterns,
162
168
  collect_statistics=arguments.enable_statistics,
169
+ jobs=arguments.jobs,
170
+ enable_pet_plot_file=arguments.plot_pet,
163
171
  )
164
172
 
165
173
 
@@ -87,6 +87,12 @@ class Node:
87
87
  return True
88
88
  return False
89
89
 
90
+ def get_contained_line_ids(self) -> List[LineID]:
91
+ result: List[LineID] = []
92
+ for i in range(self.start_line, self.end_line + 1):
93
+ result.append(LineID(str(self.file_id) + ":" + str(i)))
94
+ return result
95
+
90
96
  def __str__(self) -> str:
91
97
  return self.id
92
98
 
@@ -8,6 +8,7 @@
8
8
 
9
9
  import json
10
10
  import os
11
+ from typing import List, Optional
11
12
 
12
13
  from filelock import FileLock # type: ignore
13
14
  from discopop_explorer.classes.PEGraph.Node import Node
@@ -19,11 +20,13 @@ class PatternBase(object):
19
20
  """Base class for pattern info"""
20
21
 
21
22
  pattern_id: int
23
+ pattern_tag: str
22
24
  _node: Node
23
25
  node_id: NodeID
24
26
  start_line: LineID
25
27
  end_line: LineID
26
28
  applicable_pattern: bool
29
+ affected_cu_ids: List[NodeID]
27
30
 
28
31
  def __init__(self, node: Node):
29
32
  # create a file lock to synchronize processes
@@ -45,6 +48,8 @@ class PatternBase(object):
45
48
  self.start_line = node.start_position()
46
49
  self.end_line = node.end_position()
47
50
  self.applicable_pattern = True
51
+ self.pattern_tag = ""
52
+ self.affected_cu_ids = []
48
53
 
49
54
  def to_json(self) -> str:
50
55
  dic = self.__dict__
@@ -54,3 +59,8 @@ class PatternBase(object):
54
59
  del dic[key]
55
60
 
56
61
  return json.dumps(dic, indent=2, default=lambda o: o.toJSON()) # , default=lambda o: "<not serializable>")
62
+
63
+ def get_tag(self) -> str:
64
+ result = "" + self.__class__.__name__
65
+ result += "@" + self.start_line + "-" + self.end_line
66
+ return result
@@ -21,6 +21,7 @@ from typing import Dict, List, Optional, Tuple
21
21
  import pstats2 # type:ignore
22
22
  from pluginbase import PluginBase # type: ignore
23
23
  from discopop_explorer.functions.PEGraph.output.json import dump_to_pickled_json
24
+ from discopop_explorer.functions.PEGraph.output.gephi import dump_to_gephi_file
24
25
  from discopop_explorer.utilities.statistics.collect_statistics import collect_statistics
25
26
  from discopop_library.ArgumentClasses.GeneralArguments import GeneralArguments # type: ignore
26
27
  from discopop_library.FolderStructure.setup import setup_explorer
@@ -58,6 +59,7 @@ class ExplorerArguments(GeneralArguments):
58
59
  reduction_file: str
59
60
  file_mapping_file: str
60
61
  plugins: List[str]
62
+ jobs: Optional[int]
61
63
  # output and formatting
62
64
  enable_json_file: Optional[str]
63
65
  enable_profiling_dump_file: Optional[str] # None means no dump, otherwise the path
@@ -73,6 +75,7 @@ class ExplorerArguments(GeneralArguments):
73
75
  microbench_file: Optional[str]
74
76
  load_existing_doall_and_reduction_patterns: bool
75
77
  collect_statistics: bool
78
+ enable_pet_plot_file: Optional[str] # None means no dump, otherwise the path
76
79
 
77
80
  def __post_init__(self) -> None:
78
81
  self.__validate()
@@ -122,6 +125,7 @@ def __run(
122
125
  enable_detection_of_scheduling_clauses: bool = False,
123
126
  hotspot_functions: Optional[Dict[HotspotType, List[Tuple[int, int, HotspotNodeType, str, float]]]] = None,
124
127
  load_existing_doall_and_reduction_patterns: bool = False,
128
+ jobs: Optional[int] = None,
125
129
  ) -> DetectionResult:
126
130
  pet = PEGraphX.from_parsed_input(*parse_inputs(cu_xml, dep_file, reduction_file, file_mapping)) # type: ignore
127
131
  print("PET CREATION FINISHED.")
@@ -170,6 +174,7 @@ def __run(
170
174
  enable_task_pattern,
171
175
  enable_detection_of_scheduling_clauses,
172
176
  hotspot_functions,
177
+ jobs,
173
178
  )
174
179
 
175
180
  for plugin_name in plugins:
@@ -240,6 +245,7 @@ def run(arguments: ExplorerArguments) -> None:
240
245
  enable_detection_of_scheduling_clauses=arguments.detect_scheduling_clauses,
241
246
  hotspot_functions=hotspots,
242
247
  load_existing_doall_and_reduction_patterns=arguments.load_existing_doall_and_reduction_patterns,
248
+ jobs=arguments.jobs,
243
249
  )
244
250
 
245
251
  end = time.time()
@@ -254,6 +260,11 @@ def run(arguments: ExplorerArguments) -> None:
254
260
  f.flush()
255
261
  f.close()
256
262
 
263
+ # experimental
264
+ # dumps gexf plot of pet
265
+ if arguments.enable_pet_plot_file is not None:
266
+ dump_to_gephi_file(res.pet, arguments.enable_pet_plot_file)
267
+
257
268
  if arguments.enable_detection_result_dump_file is not None:
258
269
  with open(arguments.enable_detection_result_dump_file, "w+") as f:
259
270
  f.write(res.dump_to_pickled_json())
@@ -12,7 +12,7 @@ from discopop_explorer.enums.EdgeType import EdgeType
12
12
  import networkx as nx # type: ignore
13
13
 
14
14
 
15
- def dump_to_gephi_file(pet: PEGraphX, name: str = "pet.gexf") -> None:
15
+ def dump_to_gephi_file(pet: PEGraphX, name: str) -> None:
16
16
  """Note: Destroys the PETGraph!"""
17
17
  # replace node data with label
18
18
  for node_id in pet.g.nodes:
@@ -6,7 +6,7 @@
6
6
  # the 3-Clause BSD License. See the LICENSE file in the package base
7
7
  # directory for details.
8
8
  from __future__ import annotations
9
- from typing import TYPE_CHECKING, Optional, cast
9
+ from typing import TYPE_CHECKING, List, Optional, cast
10
10
  from discopop_explorer.classes.PEGraph.FunctionNode import FunctionNode
11
11
  from discopop_explorer.classes.PEGraph.Node import Node
12
12
 
@@ -41,3 +41,19 @@ def get_parent_function(pet: PEGraphX, node: Node) -> FunctionNode:
41
41
 
42
42
  assert node.parent_function_id
43
43
  return cast(FunctionNode, pet.node_at(node.parent_function_id))
44
+
45
+
46
+ def get_all_parent_functions(pet: PEGraphX, node: Node) -> List[FunctionNode]:
47
+ queue: List[Node] = [node]
48
+ result: set[FunctionNode] = set()
49
+ while queue:
50
+ current = queue.pop()
51
+ current_parent = get_parent_function(pet, current)
52
+ if current_parent not in queue and current_parent not in result:
53
+ queue.append(current_parent)
54
+ if current_parent not in result:
55
+ result.add(current_parent)
56
+ for in_edge in in_edges(pet, current.id, EdgeType.CALLSNODE):
57
+ queue.append(pet.node_at(in_edge[0]))
58
+
59
+ return list(result)
@@ -76,6 +76,7 @@ class PatternDetectorX(object):
76
76
  enable_task_pattern: bool,
77
77
  enable_detection_of_scheduling_clauses: bool,
78
78
  hotspots: Optional[Dict[HotspotType, List[Tuple[int, int, HotspotNodeType, str, float]]]],
79
+ jobs: Optional[int],
79
80
  ) -> DetectionResult:
80
81
  """Runs pattern discovery on the CU graph"""
81
82
  self.__merge(False, True)
@@ -88,11 +89,11 @@ class PatternDetectorX(object):
88
89
 
89
90
  if "*" in enable_patterns or "reduction" in enable_patterns:
90
91
  print("REDUCTIONS...")
91
- res.patterns.reduction = detect_reduction(self.pet, hotspots)
92
+ res.patterns.reduction = detect_reduction(self.pet, hotspots, jobs)
92
93
  print("\tDONE.")
93
94
  if "*" in enable_patterns or "doall" in enable_patterns:
94
95
  print("DOALL...")
95
- res.patterns.do_all = detect_do_all(self.pet, hotspots, res.patterns.reduction)
96
+ res.patterns.do_all = detect_do_all(self.pet, hotspots, res.patterns.reduction, jobs)
96
97
  print("\tDONE.")
97
98
  if "*" in enable_patterns or "pipeline" in enable_patterns:
98
99
  print("PIPELINE...")
@@ -106,7 +106,7 @@ def get_cu_and_varname_to_memory_regions(
106
106
 
107
107
 
108
108
  def get_memory_region_to_cu_and_variables_dict(
109
- cu_and_variable_to_memory_regions: Dict[NodeID, Dict[VarName, Set[MemoryRegion]]]
109
+ cu_and_variable_to_memory_regions: Dict[NodeID, Dict[VarName, Set[MemoryRegion]]],
110
110
  ) -> Dict[MemoryRegion, Dict[NodeID, Set[VarName]]]:
111
111
  # inverts the given cu_and_variable_to_memory_regions dictionary
112
112
  result_dict: Dict[MemoryRegion, Dict[NodeID, Set[VarName]]] = dict()
@@ -97,7 +97,7 @@ def add_memory_regions_to_device_liveness(
97
97
 
98
98
 
99
99
  def propagate_memory_regions(
100
- device_liveness_plus_memory_regions: Dict[VarName, List[Tuple[NodeID, Set[MemoryRegion]]]]
100
+ device_liveness_plus_memory_regions: Dict[VarName, List[Tuple[NodeID, Set[MemoryRegion]]]],
101
101
  ) -> Dict[VarName, List[Tuple[NodeID, Set[MemoryRegion]]]]:
102
102
  """Propagate memory regions for variables"""
103
103
  result_dict: Dict[VarName, List[Tuple[NodeID, Set[MemoryRegion]]]] = dict()
@@ -117,7 +117,7 @@ def propagate_memory_regions(
117
117
 
118
118
 
119
119
  def convert_liveness(
120
- device_liveness_plus_memory_regions: Dict[VarName, List[Tuple[NodeID, Set[MemoryRegion]]]]
120
+ device_liveness_plus_memory_regions: Dict[VarName, List[Tuple[NodeID, Set[MemoryRegion]]]],
121
121
  ) -> Dict[MemoryRegion, List[NodeID]]:
122
122
  result_dict: Dict[MemoryRegion, List[NodeID]] = dict()
123
123
 
@@ -143,7 +143,7 @@ def propagate_writes(
143
143
 
144
144
 
145
145
  def cleanup_writes(
146
- writes: Dict[MemoryRegion, Set[Tuple[NodeID, Optional[int]]]]
146
+ writes: Dict[MemoryRegion, Set[Tuple[NodeID, Optional[int]]]],
147
147
  ) -> Dict[MemoryRegion, Set[Tuple[NodeID, Optional[int]]]]:
148
148
  """remove entries from the Sets with an second-element entry of None,
149
149
  if it is overwritten by a different memory write."""
@@ -164,7 +164,7 @@ def cleanup_writes(
164
164
 
165
165
 
166
166
  def group_writes_by_cu(
167
- writes: Dict[MemoryRegion, Set[Tuple[NodeID, Optional[int]]]]
167
+ writes: Dict[MemoryRegion, Set[Tuple[NodeID, Optional[int]]]],
168
168
  ) -> Dict[NodeID, Dict[MemoryRegion, Set[Optional[int]]]]:
169
169
  result_dict: Dict[NodeID, Dict[MemoryRegion, Set[Optional[int]]]] = dict()
170
170
 
@@ -345,7 +345,7 @@ def extend_region_liveness_using_unrolled_functions(
345
345
 
346
346
 
347
347
  def remove_duplicates(
348
- target_set: Union[Set[Update], Set[EntryPoint], Set[ExitPoint]]
348
+ target_set: Union[Set[Update], Set[EntryPoint], Set[ExitPoint]],
349
349
  ) -> Union[Set[Update], Set[EntryPoint], Set[ExitPoint]]:
350
350
  to_be_removed = []
351
351
  for element_1 in target_set:
@@ -17,7 +17,7 @@ from discopop_explorer.functions.PEGraph.queries.edges import in_edges, out_edge
17
17
  from discopop_explorer.functions.PEGraph.queries.nodes import all_nodes
18
18
  from discopop_explorer.functions.PEGraph.queries.subtree import subtree_of_type
19
19
  from discopop_explorer.functions.PEGraph.queries.variables import get_variables
20
- from discopop_explorer.functions.PEGraph.traversal.parent import get_parent_function
20
+ from discopop_explorer.functions.PEGraph.traversal.parent import get_all_parent_functions, get_parent_function
21
21
  from discopop_library.HostpotLoader.HotspotNodeType import HotspotNodeType
22
22
  from discopop_library.HostpotLoader.HotspotType import HotspotType # type: ignore
23
23
 
@@ -57,6 +57,19 @@ class DoAllInfo(PatternInfo):
57
57
  self.reduction = r
58
58
  self.scheduling_clause = "static"
59
59
  self.collapse_level = 1
60
+ self.pattern_tag = self.get_tag()
61
+
62
+ # determine affected cu and line ids
63
+ affected_cus = subtree_of_type(pet, node)
64
+ self.affected_cu_ids = [n.id for n in affected_cus]
65
+ self.affected_line_ids: List[LineID] = []
66
+ for node in affected_cus:
67
+ self.affected_line_ids += [
68
+ lid for lid in node.get_contained_line_ids() if lid not in self.affected_line_ids
69
+ ]
70
+ self.affected_functions = [
71
+ str(f.start_position()) + ":" + f.name for f in [get_parent_function(pet, node)]
72
+ ] # get_all_parent_functions(pet, node)]
60
73
 
61
74
  def __str__(self) -> str:
62
75
  return (
@@ -76,6 +89,15 @@ class DoAllInfo(PatternInfo):
76
89
  f"scheduling clause: {self.scheduling_clause}"
77
90
  )
78
91
 
92
+ def get_tag(self) -> str:
93
+ result = super().get_tag() + "_"
94
+ result += f"p({[v.name for v in self.private]})_"
95
+ result += f"s({[v.name for v in self.shared]})_"
96
+ result += f"fp({[v.name for v in self.first_private]})_"
97
+ result += f"r({[v.name for v in self.reduction]})_"
98
+ result += f"lp({[v.name for v in self.last_private]})"
99
+ return result
100
+
79
101
 
80
102
  global_pet = None
81
103
 
@@ -84,6 +106,7 @@ def run_detection(
84
106
  pet: PEGraphX,
85
107
  hotspots: Optional[Dict[HotspotType, List[Tuple[int, int, HotspotNodeType, str, float]]]],
86
108
  reduction_info: List[ReductionInfo],
109
+ jobs: Optional[int] = None,
87
110
  ) -> List[DoAllInfo]:
88
111
  """Search for do-all loop pattern
89
112
 
@@ -107,10 +130,14 @@ def run_detection(
107
130
  nodes = cast(List[LoopNode], filter_for_hotspots(pet, cast(List[Node], nodes), hotspots))
108
131
 
109
132
  param_list = [(node) for node in nodes]
110
- with Pool(initializer=__initialize_worker, initargs=(pet,)) as pool:
111
- tmp_result = list(tqdm.tqdm(pool.imap_unordered(__check_node, param_list), total=len(param_list)))
112
- for local_result in tmp_result:
113
- result += local_result
133
+ if jobs is None or jobs > 1:
134
+ with Pool(initializer=__initialize_worker, initargs=(pet,)) as pool:
135
+ tmp_result = list(tqdm.tqdm(pool.imap_unordered(__check_node, param_list), total=len(param_list)))
136
+ for local_result in tmp_result:
137
+ result += local_result
138
+ else:
139
+ for param_tpl in param_list:
140
+ result += __check_node(param_tpl)
114
141
  print("GLOBAL RES: ", [r.start_line for r in result])
115
142
 
116
143
  for pattern in result:
@@ -111,10 +111,9 @@ def run_detection(
111
111
  nodes = cast(List[FunctionNode], filter_for_hotspots(pet, cast(List[Node], nodes), hotspots))
112
112
 
113
113
  param_list = [(node) for node in nodes]
114
- with Pool(initializer=__initialize_worker, initargs=(pet,)) as pool:
115
- tmp_result = list(tqdm.tqdm(pool.imap_unordered(__check_node, param_list), total=len(param_list)))
116
- for local_result in tmp_result:
117
- result += local_result
114
+
115
+ for param_tpl in param_list:
116
+ result += __check_node(param_tpl)
118
117
  print("GLOBAL RES: ", result)
119
118
 
120
119
  for pattern in result:
@@ -180,10 +180,9 @@ def run_detection(
180
180
  nodes = cast(List[LoopNode], filter_for_hotspots(pet, cast(List[Node], nodes), hotspots))
181
181
 
182
182
  param_list = [(node) for node in nodes]
183
- with Pool(initializer=__initialize_worker, initargs=(pet,)) as pool:
184
- tmp_result = list(tqdm.tqdm(pool.imap_unordered(__check_node, param_list), total=len(param_list)))
185
- for local_result in tmp_result:
186
- result += local_result
183
+
184
+ for param_tpl in param_list:
185
+ result += __check_node(param_tpl)
187
186
  print("GLOBAL RES: ", result)
188
187
 
189
188
  for pattern in result:
@@ -17,7 +17,7 @@ from discopop_explorer.functions.PEGraph.queries.edges import in_edges, out_edge
17
17
  from discopop_explorer.functions.PEGraph.queries.nodes import all_nodes
18
18
  from discopop_explorer.functions.PEGraph.queries.subtree import subtree_of_type
19
19
  from discopop_explorer.functions.PEGraph.queries.variables import get_variables
20
- from discopop_explorer.functions.PEGraph.traversal.parent import get_parent_function
20
+ from discopop_explorer.functions.PEGraph.traversal.parent import get_all_parent_functions, get_parent_function
21
21
  from discopop_library.HostpotLoader.HotspotNodeType import HotspotNodeType
22
22
  from discopop_library.HostpotLoader.HotspotType import HotspotType # type: ignore
23
23
 
@@ -56,6 +56,19 @@ class ReductionInfo(PatternInfo):
56
56
  self.last_private = lp
57
57
  self.shared = s
58
58
  self.reduction = r
59
+ self.pattern_tag = self.get_tag()
60
+
61
+ # determine affected cu and line ids
62
+ affected_cus = subtree_of_type(pet, node)
63
+ self.affected_cu_ids = [n.id for n in affected_cus]
64
+ self.affected_line_ids: List[LineID] = []
65
+ for node in affected_cus:
66
+ self.affected_line_ids += [
67
+ lid for lid in node.get_contained_line_ids() if lid not in self.affected_line_ids
68
+ ]
69
+ self.affected_functions = [
70
+ str(f.start_position()) + ":" + f.name for f in [get_parent_function(pet, node)]
71
+ ] # get_all_parent_functions(pet, node)]
59
72
 
60
73
  def __str__(self) -> str:
61
74
  return (
@@ -70,12 +83,23 @@ class ReductionInfo(PatternInfo):
70
83
  f"last private: {[v.name for v in self.last_private]}"
71
84
  )
72
85
 
86
+ def get_tag(self) -> str:
87
+ result = super().get_tag() + "_"
88
+ result += f"p({[v.name for v in self.private]})_"
89
+ result += f"s({[v.name for v in self.shared]})_"
90
+ result += f"fp({[v.name for v in self.first_private]})_"
91
+ result += f'r({[str(v.operation) + ":" + v.name for v in self.reduction]})_'
92
+ result += f"lp({[v.name for v in self.last_private]})"
93
+ return result
94
+
73
95
 
74
96
  global_pet = None
75
97
 
76
98
 
77
99
  def run_detection(
78
- pet: PEGraphX, hotspots: Optional[Dict[HotspotType, List[Tuple[int, int, HotspotNodeType, str, float]]]]
100
+ pet: PEGraphX,
101
+ hotspots: Optional[Dict[HotspotType, List[Tuple[int, int, HotspotNodeType, str, float]]]],
102
+ jobs: Optional[int] = None,
79
103
  ) -> List[ReductionInfo]:
80
104
  """Search for reduction pattern
81
105
 
@@ -92,10 +116,14 @@ def run_detection(
92
116
  nodes = cast(List[LoopNode], filter_for_hotspots(pet, cast(List[Node], nodes), hotspots))
93
117
 
94
118
  param_list = [(node) for node in nodes]
95
- with Pool(initializer=__initialize_worker, initargs=(pet,)) as pool:
96
- tmp_result = list(tqdm.tqdm(pool.imap_unordered(__check_node, param_list), total=len(param_list)))
97
- for local_result in tmp_result:
98
- result += local_result
119
+ if jobs is None or jobs > 1:
120
+ with Pool(processes=jobs, initializer=__initialize_worker, initargs=(pet,)) as pool:
121
+ tmp_result = list(tqdm.tqdm(pool.imap_unordered(__check_node, param_list), total=len(param_list)))
122
+ for local_result in tmp_result:
123
+ result += local_result
124
+ else:
125
+ for param_tpl in param_list:
126
+ result += __check_node(param_tpl)
99
127
  print("GLOBAL RES: ", [r.start_line for r in result])
100
128
 
101
129
  for pattern in result:
@@ -37,18 +37,22 @@ logger = logging.getLogger("statistics")
37
37
 
38
38
  def collect_statistics(arguments: ExplorerArguments, res: DetectionResult) -> None:
39
39
  logger.info("Collecting code statistics...")
40
+
40
41
  maximum_call_path_depth = get_maximum_call_path_depth(res.pet)
41
42
  logger.debug("--> maximum_call_path_depth: " + str(maximum_call_path_depth))
43
+
42
44
  suggestion_call_path_depths = get_suggestion_call_path_depths(res)
43
45
  logger.debug(
44
46
  "--> suggestion_call_path_depths: "
45
47
  + str([str(key) + " => " + str(suggestion_call_path_depths[key]) for key in suggestion_call_path_depths])
46
48
  )
49
+
47
50
  suggestion_num_function_calls = get_suggestion_num_function_calls(res)
48
51
  logger.debug(
49
52
  "--> suggestion_num_function_calls: "
50
53
  + str([str(key) + " => " + str(suggestion_num_function_calls[key]) for key in suggestion_num_function_calls])
51
54
  )
55
+
52
56
  suggestion_immediate_lines_of_code = get_suggestion_immediate_lines_of_code(res)
53
57
  logger.debug(
54
58
  "--> suggestion_immediate_lines_of_code: "