discopop 3.1.0__tar.gz → 3.2.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 (393) hide show
  1. {discopop-3.1.0/discopop.egg-info → discopop-3.2.0}/PKG-INFO +1 -1
  2. {discopop-3.1.0 → discopop-3.2.0}/README.md +12 -12
  3. {discopop-3.1.0 → discopop-3.2.0/discopop.egg-info}/PKG-INFO +1 -1
  4. {discopop-3.1.0 → discopop-3.2.0}/discopop.egg-info/SOURCES.txt +102 -3
  5. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/PEGraphX.py +78 -51
  6. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/__main__.py +8 -0
  7. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/discopop_explorer.py +66 -17
  8. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/json_serializer.py +3 -0
  9. discopop-3.2.0/discopop_explorer/pattern_detection.py +294 -0
  10. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/PatternBase.py +2 -0
  11. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/CombinedGPURegions.py +12 -12
  12. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/prepare_metadata.py +4 -3
  13. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/do_all_detector.py +82 -14
  14. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/geometric_decomposition_detector.py +5 -3
  15. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/pipeline_detector.py +5 -3
  16. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/reduction_detector.py +5 -3
  17. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPULoop.py +1 -1
  18. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/gpu_pattern_detector.py +4 -4
  19. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/task_parallelism_detector.py +5 -3
  20. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/utils.py +57 -2
  21. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/variable.py +4 -1
  22. discopop-3.2.0/discopop_library/ArgumentClasses/GeneralArguments.py +18 -0
  23. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/classes/UnpackedSuggestion.py +17 -7
  24. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/ConfigProvider/ConfigProviderArguments.py +1 -0
  25. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/ConfigProvider/__main__.py +9 -10
  26. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/ConfigProvider/config_provider.py +6 -4
  27. discopop-3.2.0/discopop_library/GlobalLogger/setup.py +38 -0
  28. discopop-3.2.0/discopop_library/HostpotLoader/HotspotLoaderArguments.py +50 -0
  29. discopop-3.2.0/discopop_library/HostpotLoader/HotspotNodeType.py +23 -0
  30. discopop-3.2.0/discopop_library/HostpotLoader/HotspotType.py +25 -0
  31. discopop-3.2.0/discopop_library/HostpotLoader/hostpot_loader.py +64 -0
  32. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/JSONHandler/JSONHandler.py +2 -2
  33. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/PatchApplicatorArguments.py +3 -1
  34. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/__main__.py +7 -0
  35. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchGenerator/PatchGeneratorArguments.py +6 -1
  36. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchGenerator/__main__.py +21 -2
  37. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchGenerator/from_json_patterns.py +31 -1
  38. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchGenerator/patch_generator.py +3 -0
  39. discopop-3.2.0/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
  40. discopop-3.2.0/discopop_library/discopop_optimizer/CostModels/utilities.py +424 -0
  41. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/DataTransfers/DataTransfers.py +102 -7
  42. discopop-3.2.0/discopop_library/discopop_optimizer/DataTransfers/NewDataTransfers.py +509 -0
  43. discopop-3.2.0/discopop_library/discopop_optimizer/DataTransfers/calculate_configuration_data_movement.py +54 -0
  44. discopop-3.2.0/discopop_library/discopop_optimizer/DataTransfers/prepare_force_branch_end_data_movement.py +103 -0
  45. discopop-3.2.0/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement.py +24 -0
  46. discopop-3.2.0/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement_prior_to_call.py +91 -0
  47. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/Microbench.py +4 -1
  48. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/MixedMicrobench.py +12 -3
  49. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/PureDataMicrobench.py +11 -7
  50. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/OptimizationGraph.py +3 -3
  51. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/OptimizerArguments.py +21 -12
  52. discopop-3.2.0/discopop_library/discopop_optimizer/PETParser/PETParser.py +1472 -0
  53. discopop-3.2.0/discopop_library/discopop_optimizer/UpdateOptimization/AddRangesToUpdates.py +98 -0
  54. discopop-3.2.0/discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py +162 -0
  55. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/UpdateOptimization/RemoveLoopIndexUpdates.py +23 -6
  56. discopop-3.2.0/discopop_library/discopop_optimizer/UpdateOptimization/RemoveSameDeviceUpdates.py +36 -0
  57. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/UpdateOptimization/main.py +22 -11
  58. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Variables/Experiment.py +10 -0
  59. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/__main__.py +35 -8
  60. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/context/ContextObject.py +5 -0
  61. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/context/Update.py +27 -2
  62. discopop-3.2.0/discopop_library/discopop_optimizer/classes/edges/CallEdge.py +12 -0
  63. discopop-3.2.0/discopop_library/discopop_optimizer/classes/nodes/DeviceSwitch.py +41 -0
  64. discopop-3.2.0/discopop_library/discopop_optimizer/classes/nodes/FunctionReturn.py +18 -0
  65. discopop-3.2.0/discopop_library/discopop_optimizer/classes/nodes/SynchronizationTrigger.py +41 -0
  66. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/Network.py +4 -0
  67. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/System.py +18 -0
  68. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/devices/CPU.py +6 -1
  69. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/devices/Device.py +14 -2
  70. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/devices/GPU.py +13 -3
  71. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/system_utils.py +7 -3
  72. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/types/DataAccessType.py +16 -5
  73. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/presentation/OptionTable.py +6 -6
  74. discopop-3.2.0/discopop_library/discopop_optimizer/interactive/interactive_optimizer.py +195 -0
  75. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/optimization/evaluate.py +2 -2
  76. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/optimization/evaluate_all_decision_combinations.py +1 -0
  77. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/optimization/evolutionary_algorithm.py +11 -4
  78. discopop-3.2.0/discopop_library/discopop_optimizer/optimization/greedy.py +246 -0
  79. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/optimization/validation.py +0 -1
  80. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/optimizer.py +114 -22
  81. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/suggestions/importers/do_all.py +77 -9
  82. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/suggestions/importers/main.py +4 -2
  83. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/suggestions/importers/reduction.py +5 -4
  84. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/suggestions/optimizers/loop_collapse.py +48 -3
  85. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/MOGUtilities.py +123 -11
  86. discopop-3.2.0/discopop_library/discopop_optimizer/utilities/insert_device_switch_nodes.py +127 -0
  87. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization/TopDown.py +3 -0
  88. discopop-3.2.0/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
  89. discopop-3.2.0/discopop_library/global_data/version/VERSION +1 -0
  90. discopop-3.2.0/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
  91. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/global_data/version/__pycache__/utils.cpython-38.pyc +0 -0
  92. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/result_classes/DetectionResult.py +4 -9
  93. discopop-3.2.0/discopop_library/result_classes/MergedPattern.py +25 -0
  94. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/result_classes/OptimizerOutputPattern.py +15 -1
  95. discopop-3.2.0/discopop_library/result_classes/PatternStorage.py +39 -0
  96. {discopop-3.1.0 → discopop-3.2.0}/requirements.txt +2 -2
  97. discopop-3.2.0/test/do_all/backwards_array_access/test.py +69 -0
  98. discopop-3.2.0/test/do_all/calls/allowing/test.py +69 -0
  99. discopop-3.2.0/test/do_all/calls/preventing/simple/test.py +72 -0
  100. discopop-3.2.0/test/do_all/calls/second_order/allowing/test.py +69 -0
  101. discopop-3.2.0/test/do_all/calls/second_order/allowing_2/test.py +69 -0
  102. discopop-3.2.0/test/do_all/calls/second_order/preventing/test.py +72 -0
  103. discopop-3.2.0/test/do_all/calls/second_order/preventing_2/__init__.py +0 -0
  104. discopop-3.2.0/test/do_all/calls/second_order/preventing_2/test.py +72 -0
  105. discopop-3.2.0/test/do_all/daxpy/__init__.py +0 -0
  106. discopop-3.2.0/test/do_all/daxpy/test.py +85 -0
  107. discopop-3.2.0/test/do_all/negative/__init__.py +0 -0
  108. discopop-3.2.0/test/do_all/negative/nested/OMPSCR/__init__.py +0 -0
  109. discopop-3.2.0/test/do_all/negative/nested/__init__.py +0 -0
  110. discopop-3.2.0/test/do_all/simple/__init__.py +0 -0
  111. discopop-3.2.0/test/do_all/simple/global_vars/__init__.py +0 -0
  112. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/__init__.py +0 -0
  113. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/__init__.py +0 -0
  114. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/test.py +75 -0
  115. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/__init__.py +0 -0
  116. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/test.py +75 -0
  117. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/__init__.py +0 -0
  118. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/test.py +75 -0
  119. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/__init__.py +0 -0
  120. discopop-3.2.0/test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/test.py +75 -0
  121. discopop-3.2.0/test/do_all/simple/nested/__init__.py +0 -0
  122. discopop-3.2.0/test/do_all/simple/nested/depth_2/__init__.py +0 -0
  123. discopop-3.2.0/test/do_all/simple/nested/depth_2/positive/__init__.py +0 -0
  124. discopop-3.2.0/test/do_all/simple/nested/depth_2/positive/both_loops_doall/__init__.py +0 -0
  125. discopop-3.2.0/test/do_all/simple/nested/depth_2/positive/both_loops_doall/test.py +70 -0
  126. discopop-3.2.0/test/do_all/simple/nested/depth_2/positive/inner_loop_doall/__init__.py +0 -0
  127. discopop-3.2.0/test/do_all/simple/nested/depth_2/positive/inner_loop_doall/test.py +72 -0
  128. discopop-3.2.0/test/do_all/simple/nested/depth_2/positive/outer_loop_doall/__init__.py +0 -0
  129. discopop-3.2.0/test/do_all/simple/nested/depth_2/positive/outer_loop_doall/test.py +72 -0
  130. discopop-3.2.0/test/do_all/simple/not_nested/__init__.py +0 -0
  131. discopop-3.2.0/test/do_all/simple/not_nested/negative/__init__.py +0 -0
  132. discopop-3.2.0/test/do_all/simple/not_nested/negative/minimal/__init__.py +0 -0
  133. discopop-3.2.0/test/do_all/simple/not_nested/negative/minimal/test.py +72 -0
  134. discopop-3.2.0/test/do_all/simple/not_nested/negative/stack_access/__init__.py +0 -0
  135. discopop-3.2.0/test/do_all/simple/not_nested/negative/stack_access/test.py +74 -0
  136. discopop-3.2.0/test/do_all/simple/not_nested/positive/__init__.py +0 -0
  137. discopop-3.2.0/test/do_all/simple/not_nested/positive/test.py +69 -0
  138. discopop-3.2.0/test/do_all/stack_access/__init__.py +0 -0
  139. discopop-3.2.0/test/do_all/stack_access/nested/__init__.py +0 -0
  140. discopop-3.2.0/test/do_all/stack_access/nested/positive/__init__.py +0 -0
  141. discopop-3.2.0/test/do_all/stack_access/nested/positive/test.py +72 -0
  142. discopop-3.2.0/test/do_all/stack_access/various/__init__.py +0 -0
  143. discopop-3.2.0/test/do_all/stack_access/various/case_0/__init__.py +0 -0
  144. discopop-3.2.0/test/do_all/stack_access/various/case_0/test.py +69 -0
  145. discopop-3.2.0/test/do_all/stack_access/various/case_1/__init__.py +0 -0
  146. discopop-3.2.0/test/do_all/stack_access/various/case_1/test.py +69 -0
  147. discopop-3.2.0/test/do_all/stack_access/various/case_2/__init__.py +0 -0
  148. discopop-3.2.0/test/do_all/stack_access/various/case_2/test.py +69 -0
  149. discopop-3.2.0/test/do_all/stack_access/various/case_3/__init__.py +0 -0
  150. discopop-3.2.0/test/do_all/stack_access/various/case_3/test.py +69 -0
  151. discopop-3.2.0/test/do_all/stack_access/various/case_4/__init__.py +0 -0
  152. discopop-3.2.0/test/do_all/stack_access/various/case_4/test.py +69 -0
  153. discopop-3.2.0/test/do_all/stack_access/various/case_5/__init__.py +0 -0
  154. discopop-3.2.0/test/do_all/stack_access/various/case_5/test.py +69 -0
  155. discopop-3.2.0/test/do_all/struct/__init__.py +0 -0
  156. discopop-3.2.0/test/do_all/struct/positive/__init__.py +0 -0
  157. discopop-3.2.0/test/do_all/struct/positive/miniFE_CSRMatrix_proxy/__init__.py +0 -0
  158. discopop-3.2.0/test/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/__init__.py +0 -0
  159. discopop-3.2.0/test/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/test.py +75 -0
  160. discopop-3.2.0/test/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/__init__.py +0 -0
  161. discopop-3.2.0/test/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/test.py +75 -0
  162. discopop-3.2.0/test/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/__init__.py +0 -0
  163. discopop-3.2.0/test/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/test.py +75 -0
  164. discopop-3.2.0/test/optimizer/__init__.py +0 -0
  165. discopop-3.2.0/test/optimizer/loop_collapse/__init__.py +0 -0
  166. discopop-3.2.0/test/optimizer/loop_collapse/positive/__init__.py +0 -0
  167. discopop-3.2.0/test/optimizer/loop_collapse/positive/simple_1/__init__.py +0 -0
  168. discopop-3.2.0/test/optimizer/loop_collapse/positive/simple_1/test.py +74 -0
  169. discopop-3.2.0/test/reduction_pattern/__init__.py +0 -0
  170. discopop-3.2.0/test/reduction_pattern/positive/__init__.py +0 -0
  171. discopop-3.2.0/test/reduction_pattern/positive/nested/OMPSCR/__init__.py +0 -0
  172. discopop-3.2.0/test/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/__init__.py +0 -0
  173. discopop-3.2.0/test/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/test.py +74 -0
  174. discopop-3.2.0/test/reduction_pattern/positive/nested/__init__.py +0 -0
  175. discopop-3.2.0/test/utils/__init__.py +0 -0
  176. discopop-3.2.0/test/utils/validator_classes/DoAllInfoForValidation.py +42 -0
  177. discopop-3.2.0/test/utils/validator_classes/__init__.py +0 -0
  178. discopop-3.1.0/discopop_explorer/pattern_detection.py +0 -180
  179. discopop-3.1.0/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
  180. discopop-3.1.0/discopop_library/discopop_optimizer/CostModels/utilities.py +0 -379
  181. discopop-3.1.0/discopop_library/discopop_optimizer/PETParser/PETParser.py +0 -752
  182. discopop-3.1.0/discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py +0 -78
  183. discopop-3.1.0/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
  184. discopop-3.1.0/discopop_library/global_data/version/VERSION +0 -1
  185. discopop-3.1.0/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
  186. discopop-3.1.0/test/do_all/daxpy/test.py +0 -68
  187. discopop-3.1.0/test/optimizer/loop_collapse/negative/simple_1/test.py +0 -56
  188. discopop-3.1.0/test/optimizer/loop_collapse/positive/simple_1/test.py +0 -60
  189. discopop-3.1.0/test/utils/validator_classes/DoAllInfoForValidation.py +0 -21
  190. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_profiler/__init__.py +0 -0
  191. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_profiler/__main__.py +0 -0
  192. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_profiler/utils.py +0 -0
  193. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/__init__.py +0 -0
  194. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/__main__.py +0 -0
  195. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/assets/__init__.py +0 -0
  196. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/assets/icons/__init__.py +0 -0
  197. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/Arguments.py +0 -0
  198. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/CodePreview.py +0 -0
  199. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/Console.py +0 -0
  200. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/ExecutionConfiguration.py +0 -0
  201. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/Pragma.py +0 -0
  202. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/ProfilingContainer.py +0 -0
  203. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/Settings.py +0 -0
  204. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/Suggestion.py +0 -0
  205. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/TKVarStorage.py +0 -0
  206. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/classes/__init__.py +0 -0
  207. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/headless/__init__.py +0 -0
  208. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/headless/headless_execution.py +0 -0
  209. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/__init__.py +0 -0
  210. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/execution.py +0 -0
  211. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/main.py +0 -0
  212. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/optimizer/__init__.py +0 -0
  213. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/optimizer/binding.py +0 -0
  214. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/settings.py +0 -0
  215. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/suggestions/__init__.py +0 -0
  216. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/suggestions/overview.py +0 -0
  217. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/utils.py +0 -0
  218. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/widgets/ScrollableText.py +0 -0
  219. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/screens/widgets/__init__.py +0 -0
  220. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/utils.py +0 -0
  221. {discopop-3.1.0 → discopop-3.2.0}/DEPRECATED_discopop_wizard/wizard.py +0 -0
  222. {discopop-3.1.0 → discopop-3.2.0}/LICENSE +0 -0
  223. {discopop-3.1.0 → discopop-3.2.0}/MANIFEST.in +0 -0
  224. {discopop-3.1.0 → discopop-3.2.0}/discopop.egg-info/dependency_links.txt +0 -0
  225. {discopop-3.1.0 → discopop-3.2.0}/discopop.egg-info/entry_points.txt +0 -0
  226. {discopop-3.1.0 → discopop-3.2.0}/discopop.egg-info/requires.txt +0 -0
  227. {discopop-3.1.0 → discopop-3.2.0}/discopop.egg-info/top_level.txt +0 -0
  228. {discopop-3.1.0 → discopop-3.2.0}/discopop.egg-info/zip-safe +0 -0
  229. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/__init__.py +0 -0
  230. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/generate_Data_CUInst.py +0 -0
  231. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/parallel_utils.py +0 -0
  232. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/parser.py +0 -0
  233. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/PatternInfo.py +0 -0
  234. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/__init__.py +0 -0
  235. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/__init__.py +0 -0
  236. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Aliases.py +0 -0
  237. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Dependency.py +0 -0
  238. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/EntryPoint.py +0 -0
  239. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Enums.py +0 -0
  240. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/ExitPoint.py +0 -0
  241. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Update.py +0 -0
  242. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/__init__.py +0 -0
  243. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/combined_gpu_pattern_detector.py +0 -0
  244. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_1.py +0 -0
  245. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_2.py +0 -0
  246. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_3.py +0 -0
  247. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_4.py +0 -0
  248. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_5.py +0 -0
  249. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_6.py +0 -0
  250. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/combined_gpu_patterns/utilities.py +0 -0
  251. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/device_updates.py +0 -0
  252. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPUMemory.py +0 -0
  253. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPURegions.py +0 -0
  254. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/__init__.py +0 -0
  255. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/simple_gpu_patterns/utils.py +0 -0
  256. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/__init__.py +0 -0
  257. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/alias_detection.py +0 -0
  258. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/classes.py +0 -0
  259. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/filter.py +0 -0
  260. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/postprocessor.py +0 -0
  261. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/preprocessor.py +0 -0
  262. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/__init__.py +0 -0
  263. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/auxiliary.py +0 -0
  264. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/barriers.py +0 -0
  265. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/data_sharing_clauses.py +0 -0
  266. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/dependency_clauses.py +0 -0
  267. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/tasks.py +0 -0
  268. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/pattern_detectors/task_parallelism/tp_utils.py +0 -0
  269. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/plugins/__init__.py +0 -0
  270. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/plugins/pipeline.py +0 -0
  271. {discopop-3.1.0 → discopop-3.2.0}/discopop_explorer/test/__init__.py +0 -0
  272. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/CodeGenerator.py +0 -0
  273. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/CodeGeneratorArguments.py +0 -0
  274. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/__init__.py +0 -0
  275. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/classes/ContentBuffer.py +0 -0
  276. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/classes/Enums.py +0 -0
  277. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/classes/Line.py +0 -0
  278. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/classes/Pragma.py +0 -0
  279. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/CodeGenerator/classes/__init__.py +0 -0
  280. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/ConfigProvider/assets/.gitignore +0 -0
  281. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/JSONHandler/__init__.py +0 -0
  282. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/LineMapping/__init__.py +0 -0
  283. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/LineMapping/diff_modifications.py +0 -0
  284. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/LineMapping/initialize.py +0 -0
  285. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/LineMapping/load.py +0 -0
  286. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/LineMapping/save.py +0 -0
  287. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/MemoryRegions/__init__.py +0 -0
  288. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/MemoryRegions/utils.py +0 -0
  289. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/__init__.py +0 -0
  290. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/apply.py +0 -0
  291. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/clear.py +0 -0
  292. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/list.py +0 -0
  293. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/load.py +0 -0
  294. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/patch_applicator.py +0 -0
  295. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchApplicator/rollback.py +0 -0
  296. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchGenerator/__init__.py +0 -0
  297. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchGenerator/diffs.py +0 -0
  298. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatchGenerator/from_optimizer_output.py +0 -0
  299. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PathManagement/PathManagement.py +0 -0
  300. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PathManagement/__init__.py +0 -0
  301. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/PatternIdManagement/unique_pattern_id.py +0 -0
  302. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/__init__.py +0 -0
  303. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/CostModels/CostModel.py +0 -0
  304. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/CostModels/DataTransfer/DataTransferCosts.py +0 -0
  305. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/CostModels/DataTransfer/__init__.py +0 -0
  306. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/CostModels/__init__.py +0 -0
  307. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/DataTransfers/__init__.py +0 -0
  308. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/DelaunayInterpolatedMicrobench.py +0 -0
  309. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/ExtrapInterpolatedMicrobench.py +0 -0
  310. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/MicrobenchParser.py +0 -0
  311. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/__init__.py +0 -0
  312. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Microbench/utils.py +0 -0
  313. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/PETParser/DataAccesses/CalculateUpdates.py +0 -0
  314. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/PETParser/DataAccesses/FromCUs.py +0 -0
  315. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/PETParser/DataAccesses/__init__.py +0 -0
  316. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/PETParser/__init__.py +0 -0
  317. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/UpdateOptimization/LoopInitializationUpdates.py +0 -0
  318. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Variables/ExperimentUtils.py +0 -0
  319. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/Variables/__init__.py +0 -0
  320. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/__init__.py +0 -0
  321. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/bindings/__init__.py +0 -0
  322. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/bindings/utilities.py +0 -0
  323. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/__init__.py +0 -0
  324. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/context/ContextObjectUtils.py +0 -0
  325. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/context/__init__.py +0 -0
  326. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/ChildEdge.py +0 -0
  327. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/DataFlowEdge.py +0 -0
  328. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/GenericEdge.py +0 -0
  329. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/MutuallyExclusiveEdge.py +0 -0
  330. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/OptionEdge.py +0 -0
  331. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/RequirementEdge.py +0 -0
  332. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/SuccessorEdge.py +0 -0
  333. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/TemporaryEdge.py +0 -0
  334. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/edges/__init__.py +0 -0
  335. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/enums/Distributions.py +0 -0
  336. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/enums/__init__.py +0 -0
  337. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/ContextMerge.py +0 -0
  338. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/ContextNode.py +0 -0
  339. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/ContextRestore.py +0 -0
  340. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/ContextSave.py +0 -0
  341. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshot.py +0 -0
  342. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshotPop.py +0 -0
  343. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/FunctionRoot.py +0 -0
  344. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/GenericNode.py +0 -0
  345. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/Loop.py +0 -0
  346. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/Workload.py +0 -0
  347. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/nodes/__init__.py +0 -0
  348. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/__init__.py +0 -0
  349. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/devices/DeviceTypeEnum.py +0 -0
  350. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/system/devices/__init__.py +0 -0
  351. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/types/Aliases.py +0 -0
  352. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/classes/types/__init__.py +0 -0
  353. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/__init__.py +0 -0
  354. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/plotting/CostModels.py +0 -0
  355. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/plotting/__init__.py +0 -0
  356. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/presentation/ChoiceDetails.py +0 -0
  357. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/presentation/__init__.py +0 -0
  358. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/queries/ValueTableQuery.py +0 -0
  359. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/queries/__init__.py +0 -0
  360. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/widgets/ScrollableFrame.py +0 -0
  361. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/gui/widgets/__init__.py +0 -0
  362. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/scheduling/__init__.py +0 -0
  363. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/scheduling/workload_delta.py +0 -0
  364. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/suggestions/__init__.py +0 -0
  365. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/suggestions/importers/__init__.py +0 -0
  366. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/suggestions/optimizers/main.py +0 -0
  367. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/__init__.py +0 -0
  368. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/RandomSamples.py +0 -0
  369. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/__init__.py +0 -0
  370. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization/__init__.py +0 -0
  371. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/optimization/__init__.py +0 -0
  372. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/simple_utilities.py +0 -0
  373. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/visualization/__init__.py +0 -0
  374. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/visualization/plotting.py +0 -0
  375. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/discopop_optimizer/utilities/visualization/update_graph.py +0 -0
  376. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/global_data/__init__.py +0 -0
  377. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/global_data/version/__init__.py +0 -0
  378. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/global_data/version/utils.py +0 -0
  379. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/py.typed +0 -0
  380. {discopop-3.1.0 → discopop-3.2.0}/discopop_library/result_classes/__init__.py +0 -0
  381. {discopop-3.1.0 → discopop-3.2.0}/setup.cfg +0 -0
  382. {discopop-3.1.0 → discopop-3.2.0}/setup.py +0 -0
  383. {discopop-3.1.0 → discopop-3.2.0}/test/__init__.py +0 -0
  384. {discopop-3.1.0 → discopop-3.2.0}/test/do_all/__init__.py +0 -0
  385. {discopop-3.1.0/test/do_all/daxpy → discopop-3.2.0/test/do_all/backwards_array_access}/__init__.py +0 -0
  386. {discopop-3.1.0/test/optimizer → discopop-3.2.0/test/do_all/calls}/__init__.py +0 -0
  387. {discopop-3.1.0/test/optimizer/loop_collapse → discopop-3.2.0/test/do_all/calls/allowing}/__init__.py +0 -0
  388. {discopop-3.1.0/test/optimizer/loop_collapse/negative → discopop-3.2.0/test/do_all/calls/preventing}/__init__.py +0 -0
  389. {discopop-3.1.0/test/optimizer/loop_collapse/negative/simple_1 → discopop-3.2.0/test/do_all/calls/preventing/simple}/__init__.py +0 -0
  390. {discopop-3.1.0/test/optimizer/loop_collapse/positive → discopop-3.2.0/test/do_all/calls/second_order}/__init__.py +0 -0
  391. {discopop-3.1.0/test/optimizer/loop_collapse/positive/simple_1 → discopop-3.2.0/test/do_all/calls/second_order/allowing}/__init__.py +0 -0
  392. {discopop-3.1.0/test/utils → discopop-3.2.0/test/do_all/calls/second_order/allowing_2}/__init__.py +0 -0
  393. {discopop-3.1.0/test/utils/validator_classes → discopop-3.2.0/test/do_all/calls/second_order/preventing}/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: discopop
3
- Version: 3.1.0
3
+ Version: 3.2.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
@@ -12,15 +12,15 @@
12
12
  -->
13
13
 
14
14
  # DiscoPoP - Discovery of Potential Parallelism
15
- DiscoPoP is an open-source tool that helps software developers parallelize their programs with threads. It is a joint project of the [Laboratory for Parallel Programming @ TU Darmstadt](https://github.com/tuda-parallel) and the Iowa State University.
15
+ DiscoPoP is an open-source tool that helps software developers parallelize their programs with threads. It is a joint project of the [Laboratory for Parallel Programming @ TU Darmstadt](https://github.com/tuda-parallel) and the [Software Analytics and Pervasive Parallelism Lab](https://www.cs.iastate.edu/swapp/) at Iowa State University.
16
16
 
17
17
  In a nutshell, DiscoPoP performs the following steps:
18
18
  * detect parts of the code (computational units or CUs) with little to no internal parallelization potential,
19
19
  * find data dependences among them,
20
20
  * identify parallel patterns that can be used to parallelize a code region,
21
- * and finally suggest corresponding OpenMP parallelization constructs and clauses to programmers.
21
+ * and finally, suggest corresponding OpenMP parallelization constructs and clauses to programmers.
22
22
 
23
- DiscoPoP is built on top of LLVM. Therefore, DiscoPoP can perform the above-mentioned steps on any source code which can be transferred into the LLVM IR.
23
+ DiscoPoP is built on top of LLVM. Therefore, DiscoPoP can perform the above-mentioned steps on any source code that can be transferred into the LLVM IR.
24
24
 
25
25
  A more comprehensive overview of DiscoPoP can be found on our [project website](https://www.discopop.tu-darmstadt.de/).
26
26
 
@@ -28,13 +28,13 @@ A more comprehensive overview of DiscoPoP can be found on our [project website](
28
28
  Follow the steps in [setup](https://discopop-project.github.io/discopop/setup/discopop/) to install DiscoPoP.
29
29
  To setup the [Visual Studio Code Extension](https://marketplace.visualstudio.com/items?itemName=TUDarmstadt-LaboratoryforParallelProgramming.discopop) (recommended for general use of the framework), please follow [these steps](https://discopop-project.github.io/discopop/setup/vscx/).
30
30
 
31
- For a brief introduction into the [VSCode Extension](https://marketplace.visualstudio.com/items?itemName=TUDarmstadt-LaboratoryforParallelProgramming.discopop), please follow the [walk-through example](https://discopop-project.github.io/discopop/examples/walk_through_gui/).
32
- For a brief introduction into the command line tools, please refer to the [tools overview](https://discopop-project.github.io/discopop/Tools) and follow the [command-line walk-through example](https://discopop-project.github.io/discopop/examples/walk_through/).
31
+ For a brief introduction to the [VSCode Extension](https://marketplace.visualstudio.com/items?itemName=TUDarmstadt-LaboratoryforParallelProgramming.discopop), please follow the [walk-through example](https://discopop-project.github.io/discopop/examples/walk_through_gui/).
32
+ For a brief introduction to the command line tools, please refer to the [tools overview](https://discopop-project.github.io/discopop/Tools) and follow the [command-line walk-through example](https://discopop-project.github.io/discopop/examples/walk_through/).
33
33
 
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
+ This example installs DiscoPoP, instruments and builds the provided example, analyzes the results, and prints the identified parallelization suggestions to the console.
38
38
  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).
39
39
  ```
40
40
  # setup DiscoPoP
@@ -42,7 +42,7 @@ git clone git@github.com:discopop-project/discopop.git
42
42
  cd discopop
43
43
  mkdir build && cd build
44
44
  DP_BUILD=$(pwd)
45
- cmake .. && make
45
+ cmake .. && make
46
46
  # instrument and build the example code
47
47
  cd ../example
48
48
  mkdir build && cd build && cmake -DCMAKE_CXX_COMPILER=${DP_BUILD}/scripts/CXX_wrapper.sh .. && make
@@ -56,7 +56,7 @@ 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"
59
- cat $f/1.patch
59
+ cat $f/1.patch
60
60
  echo ""
61
61
  done
62
62
  # apply patch with id 1
@@ -67,19 +67,19 @@ discopop_patch_applicator -C
67
67
 
68
68
 
69
69
  ## Exemplary output
70
- The following is an automatically generated, exemplary output patch file generated and applicable as show in the provided [examples](https://discopop-project.github.io/discopop/Examples).
70
+ The following is an automatically generated, exemplary output patch file generated and applicable as shown in the provided [examples](https://discopop-project.github.io/discopop/Examples).
71
71
  ```
72
72
  --- /home/lukas/temp/discopop_tmp/discopop/example/example.cpp 2024-01-09 10:11:50.369555235 +0100
73
73
  +++ /home/lukas/temp/discopop_tmp/discopop/example/example.cpp.discopop_patch_generator.temp 2024-01-09 11:14:20.904823624 +0100
74
74
  @@ -20,6 +20,7 @@
75
75
  Arr[i] = i % 13;
76
76
  }
77
-
78
- + #pragma omp parallel for shared(Arr,N) reduction(+:sum)
77
+
78
+ + #pragma omp parallel for shared(Arr,N) reduction(+:sum)
79
79
  for(int i = 0; i < N; i++){
80
80
  sum += Arr[i];
81
81
  }
82
82
  ```
83
83
 
84
84
  ## License
85
- © DiscoPoP is available under the terms of the BSD-3-Clause license, as specified in the LICENSE file.
85
+ © DiscoPoP is available under the terms of the BSD-3-Clause license, as specified in the LICENSE file.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: discopop
3
- Version: 3.1.0
3
+ Version: 3.2.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
@@ -104,6 +104,7 @@ discopop_explorer/plugins/pipeline.py
104
104
  discopop_explorer/test/__init__.py
105
105
  discopop_library/__init__.py
106
106
  discopop_library/py.typed
107
+ discopop_library/ArgumentClasses/GeneralArguments.py
107
108
  discopop_library/CodeGenerator/CodeGenerator.py
108
109
  discopop_library/CodeGenerator/CodeGeneratorArguments.py
109
110
  discopop_library/CodeGenerator/__init__.py
@@ -117,6 +118,11 @@ discopop_library/ConfigProvider/ConfigProviderArguments.py
117
118
  discopop_library/ConfigProvider/__main__.py
118
119
  discopop_library/ConfigProvider/config_provider.py
119
120
  discopop_library/ConfigProvider/assets/.gitignore
121
+ discopop_library/GlobalLogger/setup.py
122
+ discopop_library/HostpotLoader/HotspotLoaderArguments.py
123
+ discopop_library/HostpotLoader/HotspotNodeType.py
124
+ discopop_library/HostpotLoader/HotspotType.py
125
+ discopop_library/HostpotLoader/hostpot_loader.py
120
126
  discopop_library/JSONHandler/JSONHandler.py
121
127
  discopop_library/JSONHandler/__init__.py
122
128
  discopop_library/LineMapping/__init__.py
@@ -157,7 +163,12 @@ discopop_library/discopop_optimizer/CostModels/utilities.py
157
163
  discopop_library/discopop_optimizer/CostModels/DataTransfer/DataTransferCosts.py
158
164
  discopop_library/discopop_optimizer/CostModels/DataTransfer/__init__.py
159
165
  discopop_library/discopop_optimizer/DataTransfers/DataTransfers.py
166
+ discopop_library/discopop_optimizer/DataTransfers/NewDataTransfers.py
160
167
  discopop_library/discopop_optimizer/DataTransfers/__init__.py
168
+ discopop_library/discopop_optimizer/DataTransfers/calculate_configuration_data_movement.py
169
+ discopop_library/discopop_optimizer/DataTransfers/prepare_force_branch_end_data_movement.py
170
+ discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement.py
171
+ discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement_prior_to_call.py
161
172
  discopop_library/discopop_optimizer/Microbench/DelaunayInterpolatedMicrobench.py
162
173
  discopop_library/discopop_optimizer/Microbench/ExtrapInterpolatedMicrobench.py
163
174
  discopop_library/discopop_optimizer/Microbench/Microbench.py
@@ -171,9 +182,11 @@ discopop_library/discopop_optimizer/PETParser/__init__.py
171
182
  discopop_library/discopop_optimizer/PETParser/DataAccesses/CalculateUpdates.py
172
183
  discopop_library/discopop_optimizer/PETParser/DataAccesses/FromCUs.py
173
184
  discopop_library/discopop_optimizer/PETParser/DataAccesses/__init__.py
185
+ discopop_library/discopop_optimizer/UpdateOptimization/AddRangesToUpdates.py
174
186
  discopop_library/discopop_optimizer/UpdateOptimization/LoopInitializationUpdates.py
175
187
  discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py
176
188
  discopop_library/discopop_optimizer/UpdateOptimization/RemoveLoopIndexUpdates.py
189
+ discopop_library/discopop_optimizer/UpdateOptimization/RemoveSameDeviceUpdates.py
177
190
  discopop_library/discopop_optimizer/UpdateOptimization/main.py
178
191
  discopop_library/discopop_optimizer/Variables/Experiment.py
179
192
  discopop_library/discopop_optimizer/Variables/ExperimentUtils.py
@@ -185,6 +198,7 @@ discopop_library/discopop_optimizer/classes/context/ContextObject.py
185
198
  discopop_library/discopop_optimizer/classes/context/ContextObjectUtils.py
186
199
  discopop_library/discopop_optimizer/classes/context/Update.py
187
200
  discopop_library/discopop_optimizer/classes/context/__init__.py
201
+ discopop_library/discopop_optimizer/classes/edges/CallEdge.py
188
202
  discopop_library/discopop_optimizer/classes/edges/ChildEdge.py
189
203
  discopop_library/discopop_optimizer/classes/edges/DataFlowEdge.py
190
204
  discopop_library/discopop_optimizer/classes/edges/GenericEdge.py
@@ -202,9 +216,12 @@ discopop_library/discopop_optimizer/classes/nodes/ContextRestore.py
202
216
  discopop_library/discopop_optimizer/classes/nodes/ContextSave.py
203
217
  discopop_library/discopop_optimizer/classes/nodes/ContextSnapshot.py
204
218
  discopop_library/discopop_optimizer/classes/nodes/ContextSnapshotPop.py
219
+ discopop_library/discopop_optimizer/classes/nodes/DeviceSwitch.py
220
+ discopop_library/discopop_optimizer/classes/nodes/FunctionReturn.py
205
221
  discopop_library/discopop_optimizer/classes/nodes/FunctionRoot.py
206
222
  discopop_library/discopop_optimizer/classes/nodes/GenericNode.py
207
223
  discopop_library/discopop_optimizer/classes/nodes/Loop.py
224
+ discopop_library/discopop_optimizer/classes/nodes/SynchronizationTrigger.py
208
225
  discopop_library/discopop_optimizer/classes/nodes/Workload.py
209
226
  discopop_library/discopop_optimizer/classes/nodes/__init__.py
210
227
  discopop_library/discopop_optimizer/classes/system/Network.py
@@ -229,9 +246,11 @@ discopop_library/discopop_optimizer/gui/queries/ValueTableQuery.py
229
246
  discopop_library/discopop_optimizer/gui/queries/__init__.py
230
247
  discopop_library/discopop_optimizer/gui/widgets/ScrollableFrame.py
231
248
  discopop_library/discopop_optimizer/gui/widgets/__init__.py
249
+ discopop_library/discopop_optimizer/interactive/interactive_optimizer.py
232
250
  discopop_library/discopop_optimizer/optimization/evaluate.py
233
251
  discopop_library/discopop_optimizer/optimization/evaluate_all_decision_combinations.py
234
252
  discopop_library/discopop_optimizer/optimization/evolutionary_algorithm.py
253
+ discopop_library/discopop_optimizer/optimization/greedy.py
235
254
  discopop_library/discopop_optimizer/optimization/validation.py
236
255
  discopop_library/discopop_optimizer/scheduling/__init__.py
237
256
  discopop_library/discopop_optimizer/scheduling/workload_delta.py
@@ -244,6 +263,7 @@ discopop_library/discopop_optimizer/suggestions/optimizers/loop_collapse.py
244
263
  discopop_library/discopop_optimizer/suggestions/optimizers/main.py
245
264
  discopop_library/discopop_optimizer/utilities/MOGUtilities.py
246
265
  discopop_library/discopop_optimizer/utilities/__init__.py
266
+ discopop_library/discopop_optimizer/utilities/insert_device_switch_nodes.py
247
267
  discopop_library/discopop_optimizer/utilities/simple_utilities.py
248
268
  discopop_library/discopop_optimizer/utilities/optimization/__init__.py
249
269
  discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/RandomSamples.py
@@ -261,20 +281,99 @@ discopop_library/global_data/version/utils.py
261
281
  discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc
262
282
  discopop_library/global_data/version/__pycache__/utils.cpython-38.pyc
263
283
  discopop_library/result_classes/DetectionResult.py
284
+ discopop_library/result_classes/MergedPattern.py
264
285
  discopop_library/result_classes/OptimizerOutputPattern.py
286
+ discopop_library/result_classes/PatternStorage.py
265
287
  discopop_library/result_classes/__init__.py
266
288
  test/__init__.py
267
289
  test/do_all/__init__.py
290
+ test/do_all/backwards_array_access/__init__.py
291
+ test/do_all/backwards_array_access/test.py
292
+ test/do_all/calls/__init__.py
293
+ test/do_all/calls/allowing/__init__.py
294
+ test/do_all/calls/allowing/test.py
295
+ test/do_all/calls/preventing/__init__.py
296
+ test/do_all/calls/preventing/simple/__init__.py
297
+ test/do_all/calls/preventing/simple/test.py
298
+ test/do_all/calls/second_order/__init__.py
299
+ test/do_all/calls/second_order/allowing/__init__.py
300
+ test/do_all/calls/second_order/allowing/test.py
301
+ test/do_all/calls/second_order/allowing_2/__init__.py
302
+ test/do_all/calls/second_order/allowing_2/test.py
303
+ test/do_all/calls/second_order/preventing/__init__.py
304
+ test/do_all/calls/second_order/preventing/test.py
305
+ test/do_all/calls/second_order/preventing_2/__init__.py
306
+ test/do_all/calls/second_order/preventing_2/test.py
268
307
  test/do_all/daxpy/__init__.py
269
308
  test/do_all/daxpy/test.py
309
+ test/do_all/negative/__init__.py
310
+ test/do_all/negative/nested/__init__.py
311
+ test/do_all/negative/nested/OMPSCR/__init__.py
312
+ test/do_all/simple/__init__.py
313
+ test/do_all/simple/global_vars/__init__.py
314
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/__init__.py
315
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/__init__.py
316
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/test.py
317
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/__init__.py
318
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/test.py
319
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/__init__.py
320
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/test.py
321
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/__init__.py
322
+ test/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/test.py
323
+ test/do_all/simple/nested/__init__.py
324
+ test/do_all/simple/nested/depth_2/__init__.py
325
+ test/do_all/simple/nested/depth_2/positive/__init__.py
326
+ test/do_all/simple/nested/depth_2/positive/both_loops_doall/__init__.py
327
+ test/do_all/simple/nested/depth_2/positive/both_loops_doall/test.py
328
+ test/do_all/simple/nested/depth_2/positive/inner_loop_doall/__init__.py
329
+ test/do_all/simple/nested/depth_2/positive/inner_loop_doall/test.py
330
+ test/do_all/simple/nested/depth_2/positive/outer_loop_doall/__init__.py
331
+ test/do_all/simple/nested/depth_2/positive/outer_loop_doall/test.py
332
+ test/do_all/simple/not_nested/__init__.py
333
+ test/do_all/simple/not_nested/negative/__init__.py
334
+ test/do_all/simple/not_nested/negative/minimal/__init__.py
335
+ test/do_all/simple/not_nested/negative/minimal/test.py
336
+ test/do_all/simple/not_nested/negative/stack_access/__init__.py
337
+ test/do_all/simple/not_nested/negative/stack_access/test.py
338
+ test/do_all/simple/not_nested/positive/__init__.py
339
+ test/do_all/simple/not_nested/positive/test.py
340
+ test/do_all/stack_access/__init__.py
341
+ test/do_all/stack_access/nested/__init__.py
342
+ test/do_all/stack_access/nested/positive/__init__.py
343
+ test/do_all/stack_access/nested/positive/test.py
344
+ test/do_all/stack_access/various/__init__.py
345
+ test/do_all/stack_access/various/case_0/__init__.py
346
+ test/do_all/stack_access/various/case_0/test.py
347
+ test/do_all/stack_access/various/case_1/__init__.py
348
+ test/do_all/stack_access/various/case_1/test.py
349
+ test/do_all/stack_access/various/case_2/__init__.py
350
+ test/do_all/stack_access/various/case_2/test.py
351
+ test/do_all/stack_access/various/case_3/__init__.py
352
+ test/do_all/stack_access/various/case_3/test.py
353
+ test/do_all/stack_access/various/case_4/__init__.py
354
+ test/do_all/stack_access/various/case_4/test.py
355
+ test/do_all/stack_access/various/case_5/__init__.py
356
+ test/do_all/stack_access/various/case_5/test.py
357
+ test/do_all/struct/__init__.py
358
+ test/do_all/struct/positive/__init__.py
359
+ test/do_all/struct/positive/miniFE_CSRMatrix_proxy/__init__.py
360
+ test/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/__init__.py
361
+ test/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/test.py
362
+ test/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/__init__.py
363
+ test/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/test.py
364
+ test/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/__init__.py
365
+ test/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/test.py
270
366
  test/optimizer/__init__.py
271
367
  test/optimizer/loop_collapse/__init__.py
272
- test/optimizer/loop_collapse/negative/__init__.py
273
- test/optimizer/loop_collapse/negative/simple_1/__init__.py
274
- test/optimizer/loop_collapse/negative/simple_1/test.py
275
368
  test/optimizer/loop_collapse/positive/__init__.py
276
369
  test/optimizer/loop_collapse/positive/simple_1/__init__.py
277
370
  test/optimizer/loop_collapse/positive/simple_1/test.py
371
+ test/reduction_pattern/__init__.py
372
+ test/reduction_pattern/positive/__init__.py
373
+ test/reduction_pattern/positive/nested/__init__.py
374
+ test/reduction_pattern/positive/nested/OMPSCR/__init__.py
375
+ test/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/__init__.py
376
+ test/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/test.py
278
377
  test/utils/__init__.py
279
378
  test/utils/validator_classes/DoAllInfoForValidation.py
280
379
  test/utils/validator_classes/__init__.py
@@ -17,7 +17,9 @@ import jsonpickle # type:ignore
17
17
  import matplotlib.pyplot as plt # type:ignore
18
18
  import networkx as nx # type:ignore
19
19
  from alive_progress import alive_bar # type: ignore
20
- from lxml.objectify import ObjectifiedElement # type:ignore
20
+ from lxml.objectify import ObjectifiedElement # type: ignore
21
+
22
+ from discopop_library.HostpotLoader.HotspotNodeType import HotspotNodeType # type:ignore
21
23
 
22
24
  from .parser import LoopData, readlineToCUIdMap, writelineToCUIdMap, DependenceItem
23
25
  from .variable import Variable
@@ -158,9 +160,9 @@ class Node:
158
160
  end_line: int
159
161
  type: NodeType
160
162
  name: str
161
- parent_function_id: Optional[
162
- NodeID
163
- ] = None # metadata to speedup some calculations (TODO FunctionNodes have themselves as parent)
163
+ parent_function_id: Optional[NodeID] = (
164
+ None # metadata to speedup some calculations (TODO FunctionNodes have themselves as parent)
165
+ )
164
166
  workload: Optional[int] = None
165
167
 
166
168
  # properties of CU Nodes
@@ -693,8 +695,6 @@ class PEGraphX(object):
693
695
  # as a result, comparing variable names to match memory regions is valid
694
696
  for _, _, d1 in out_deps:
695
697
  for _, _, d2 in out_deps:
696
- if d1 == d2:
697
- continue
698
698
  if d1.var_name == d2.var_name:
699
699
  if d1.memory_region != d2.memory_region:
700
700
  if d1.memory_region not in mem_reg_mappings:
@@ -724,10 +724,26 @@ class PEGraphX(object):
724
724
 
725
725
  print("Done.")
726
726
 
727
- def calculateFunctionMetadata(self) -> None:
727
+ def calculateFunctionMetadata(self, hotspot_information=None, func_nodes=None) -> None:
728
728
  # store id of parent function in each node
729
729
  # and store in each function node a list of all children ids
730
- func_nodes = self.all_nodes(FunctionNode)
730
+ if func_nodes is None:
731
+ func_nodes = self.all_nodes(FunctionNode)
732
+
733
+ if hotspot_information is not None:
734
+ all_hotspot_functions: Set[Tuple[int, str]] = set()
735
+ for key in hotspot_information:
736
+ for entry in hotspot_information[key]:
737
+ if entry[2] == HotspotNodeType.FUNCTION:
738
+ all_hotspot_functions.add((entry[0], entry[3]))
739
+
740
+ filtered_func_nodes = [
741
+ func_node
742
+ for func_node in func_nodes
743
+ if (func_node.file_id, func_node.name) in all_hotspot_functions
744
+ ]
745
+ func_nodes = filtered_func_nodes
746
+
731
747
  print("Calculating local metadata results for functions...")
732
748
  import tqdm # type: ignore
733
749
  from multiprocessing import Pool
@@ -752,37 +768,39 @@ class PEGraphX(object):
752
768
  print("\tMetadata calculation done.")
753
769
 
754
770
  # cleanup dependencies (remove dependencies, if it is overwritten by a more specific Intra-iteration dependency
755
- print("Cleaning duplicated dependencies...")
756
- to_be_removed = []
757
- for cu_node in self.all_nodes(CUNode):
758
- out_deps = self.out_edges(cu_node.id, EdgeType.DATA)
759
- for dep_1 in out_deps:
760
- for dep_2 in out_deps:
761
- if dep_1 == dep_2:
762
- continue
763
- if (
764
- dep_1[2].dtype == dep_2[2].dtype
765
- and dep_1[2].etype == dep_2[2].etype
766
- and dep_1[2].memory_region == dep_2[2].memory_region
767
- and dep_1[2].sink_line == dep_2[2].sink_line
768
- and dep_1[2].source_line == dep_2[2].source_line
769
- and dep_1[2].var_name == dep_2[2].var_name
770
- ):
771
- if not dep_1[2].intra_iteration and dep_2[2].intra_iteration:
772
- # dep_2 is a more specific duplicate of dep_1
773
- # remove dep_1
774
- to_be_removed.append(dep_1)
775
-
776
- to_be_removed_with_keys = []
777
- for dep in to_be_removed:
778
- graph_edges = self.g.out_edges(dep[0], keys=True, data="data")
779
-
780
- for s, t, key, data in graph_edges:
781
- if dep[0] == s and dep[1] == t and dep[2] == data:
782
- to_be_removed_with_keys.append((s, t, key))
783
- for edge in set(to_be_removed_with_keys):
784
- self.g.remove_edge(edge[0], edge[1], edge[2])
785
- print("Cleaning dependencies done.")
771
+ # note: this can introduce false positives! Keep the analysis pessimistic to ensure correctness
772
+ if False:
773
+ print("Cleaning duplicated dependencies...")
774
+ to_be_removed = []
775
+ for cu_node in self.all_nodes(CUNode):
776
+ out_deps = self.out_edges(cu_node.id, EdgeType.DATA)
777
+ for dep_1 in out_deps:
778
+ for dep_2 in out_deps:
779
+ if dep_1 == dep_2:
780
+ continue
781
+ if (
782
+ dep_1[2].dtype == dep_2[2].dtype
783
+ and dep_1[2].etype == dep_2[2].etype
784
+ and dep_1[2].memory_region == dep_2[2].memory_region
785
+ and dep_1[2].sink_line == dep_2[2].sink_line
786
+ and dep_1[2].source_line == dep_2[2].source_line
787
+ and dep_1[2].var_name == dep_2[2].var_name
788
+ ):
789
+ if not dep_1[2].intra_iteration and dep_2[2].intra_iteration:
790
+ # dep_2 is a more specific duplicate of dep_1
791
+ # remove dep_1
792
+ to_be_removed.append(dep_1)
793
+
794
+ to_be_removed_with_keys = []
795
+ for dep in to_be_removed:
796
+ graph_edges = self.g.out_edges(dep[0], keys=True, data="data")
797
+
798
+ for s, t, key, data in graph_edges:
799
+ if dep[0] == s and dep[1] == t and dep[2] == data:
800
+ to_be_removed_with_keys.append((s, t, key))
801
+ for edge in set(to_be_removed_with_keys):
802
+ self.g.remove_edge(edge[0], edge[1], edge[2])
803
+ print("Cleaning dependencies done.")
786
804
 
787
805
  # cleanup dependencies II : only consider the Intra-iteration dependencies with the highest level
788
806
  print("Cleaning duplicated dependencies II...")
@@ -941,12 +959,10 @@ class PEGraphX(object):
941
959
  NodeT = TypeVar("NodeT", bound=Node)
942
960
 
943
961
  @overload
944
- def all_nodes(self) -> List[Node]:
945
- ...
962
+ def all_nodes(self) -> List[Node]: ...
946
963
 
947
964
  @overload
948
- def all_nodes(self, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]:
949
- ...
965
+ def all_nodes(self, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]: ...
950
966
 
951
967
  def all_nodes(self, type=Node):
952
968
  """List of all nodes of specified type
@@ -989,12 +1005,10 @@ class PEGraphX(object):
989
1005
  return [t for t in self.g.in_edges(node_id, data="data") if t[2].etype == etype]
990
1006
 
991
1007
  @overload
992
- def subtree_of_type(self, root: Node) -> List[Node]:
993
- ...
1008
+ def subtree_of_type(self, root: Node) -> List[Node]: ...
994
1009
 
995
1010
  @overload
996
- def subtree_of_type(self, root: Node, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]:
997
- ...
1011
+ def subtree_of_type(self, root: Node, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]: ...
998
1012
 
999
1013
  def subtree_of_type(self, root, type=Node):
1000
1014
  """Gets all nodes in subtree of specified type including root
@@ -1006,14 +1020,12 @@ class PEGraphX(object):
1006
1020
  return self.subtree_of_type_rec(root, set(), type)
1007
1021
 
1008
1022
  @overload
1009
- def subtree_of_type_rec(self, root: Node, visited: Set[Node]) -> List[Node]:
1010
- ...
1023
+ def subtree_of_type_rec(self, root: Node, visited: Set[Node]) -> List[Node]: ...
1011
1024
 
1012
1025
  @overload
1013
1026
  def subtree_of_type_rec(
1014
1027
  self, root: Node, visited: Set[Node], type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]
1015
- ) -> List[NodeT]:
1016
- ...
1028
+ ) -> List[NodeT]: ...
1017
1029
 
1018
1030
  def subtree_of_type_rec(self, root, visited, type=Node):
1019
1031
  """recursive helper function for subtree_of_type"""
@@ -1400,6 +1412,21 @@ class PEGraphX(object):
1400
1412
  """
1401
1413
  if isinstance(node, FunctionNode):
1402
1414
  return node
1415
+ if node.parent_function_id is None:
1416
+ # no precalculated information found.
1417
+ current_node = node
1418
+ parent_node: Optional[Node] = node
1419
+ while parent_node is not None:
1420
+ current_node = parent_node
1421
+ if type(self.node_at(current_node.id)) == FunctionNode:
1422
+ node.parent_function_id = current_node.id
1423
+ break
1424
+ parents = [e[0] for e in self.in_edges(current_node.id, etype=EdgeType.CHILD)]
1425
+ if len(parents) == 0:
1426
+ parent_node = None
1427
+ else:
1428
+ parent_node = self.node_at(parents[0])
1429
+
1403
1430
  assert node.parent_function_id
1404
1431
  return cast(FunctionNode, self.node_at(node.parent_function_id))
1405
1432
 
@@ -8,6 +8,7 @@
8
8
 
9
9
  from argparse import ArgumentParser
10
10
  from pathlib import Path
11
+ from discopop_library.GlobalLogger.setup import setup_logger
11
12
 
12
13
  from discopop_library.PathManagement.PathManagement import get_path, get_path_or_none
13
14
  from .discopop_explorer import ExplorerArguments, run
@@ -71,6 +72,9 @@ def parse_args() -> ExplorerArguments:
71
72
  "--enable-patterns", type=str, nargs="?", default="*",
72
73
  help="Specify comma-separated list of pattern types to be identified. Options: reduction,doall,pipeline,geodec,simplegpu. Default: *",
73
74
  )
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
+ parser.add_argument("--log", type=str, default="WARNING", help="Specify log level: DEBUG, INFO, WARNING, ERROR, CRITICAL")
77
+ parser.add_argument("--write-log", action="store_true", help="Create Logfile.")
74
78
 
75
79
  # EXPERIMENTAL FLAGS:
76
80
  # temporary flag for microbenchmark file
@@ -149,11 +153,15 @@ def parse_args() -> ExplorerArguments:
149
153
  cu_inst_result_file=arguments.cu_inst_res,
150
154
  llvm_cxxfilt_path=arguments.llvm_cxxfilt_path,
151
155
  enable_json_file=arguments.json,
156
+ log_level=arguments.log.upper(),
157
+ write_log=arguments.write_log,
158
+ load_existing_doall_and_reduction_patterns=arguments.load_existing_doall_and_reduction_patterns,
152
159
  )
153
160
 
154
161
 
155
162
  def main():
156
163
  arguments = parse_args()
164
+ setup_logger(arguments)
157
165
  run(arguments)
158
166
 
159
167