discopop 3.1.1__tar.gz → 3.2.1__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 (410) hide show
  1. {discopop-3.1.1/discopop.egg-info → discopop-3.2.1}/PKG-INFO +1 -1
  2. {discopop-3.1.1 → discopop-3.2.1}/README.md +12 -12
  3. {discopop-3.1.1 → discopop-3.2.1/discopop.egg-info}/PKG-INFO +1 -1
  4. {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/SOURCES.txt +127 -12
  5. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/PEGraphX.py +112 -52
  6. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/__main__.py +8 -0
  7. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/discopop_explorer.py +66 -17
  8. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/parser.py +7 -2
  9. discopop-3.2.1/discopop_explorer/pattern_detection.py +294 -0
  10. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/PatternBase.py +2 -0
  11. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/CombinedGPURegions.py +12 -12
  12. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/prepare_metadata.py +4 -3
  13. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/do_all_detector.py +120 -14
  14. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/geometric_decomposition_detector.py +5 -3
  15. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/pipeline_detector.py +5 -3
  16. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/reduction_detector.py +63 -4
  17. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/task_parallelism_detector.py +5 -3
  18. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/utils.py +57 -2
  19. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/variable.py +4 -1
  20. discopop-3.2.1/discopop_library/ArgumentClasses/GeneralArguments.py +18 -0
  21. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/UnpackedSuggestion.py +17 -7
  22. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/ConfigProviderArguments.py +2 -0
  23. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/__main__.py +12 -10
  24. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/config_provider.py +18 -4
  25. discopop-3.2.1/discopop_library/GlobalLogger/setup.py +38 -0
  26. discopop-3.2.1/discopop_library/HostpotLoader/HotspotLoaderArguments.py +50 -0
  27. discopop-3.2.1/discopop_library/HostpotLoader/HotspotNodeType.py +23 -0
  28. discopop-3.2.1/discopop_library/HostpotLoader/HotspotType.py +25 -0
  29. discopop-3.2.1/discopop_library/HostpotLoader/hostpot_loader.py +64 -0
  30. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/PatchApplicatorArguments.py +3 -1
  31. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/__main__.py +7 -0
  32. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/PatchGeneratorArguments.py +6 -1
  33. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/__main__.py +29 -2
  34. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/from_json_patterns.py +31 -1
  35. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/patch_generator.py +3 -0
  36. discopop-3.2.1/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
  37. discopop-3.2.1/discopop_library/discopop_optimizer/CostModels/utilities.py +424 -0
  38. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/DataTransfers/DataTransfers.py +102 -7
  39. discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/NewDataTransfers.py +509 -0
  40. discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/calculate_configuration_data_movement.py +54 -0
  41. discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/prepare_force_branch_end_data_movement.py +103 -0
  42. discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement.py +24 -0
  43. discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement_prior_to_call.py +91 -0
  44. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/Microbench.py +4 -1
  45. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/MixedMicrobench.py +12 -3
  46. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/PureDataMicrobench.py +11 -7
  47. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/OptimizationGraph.py +3 -3
  48. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/OptimizerArguments.py +21 -12
  49. discopop-3.2.1/discopop_library/discopop_optimizer/PETParser/PETParser.py +1472 -0
  50. discopop-3.2.1/discopop_library/discopop_optimizer/UpdateOptimization/AddRangesToUpdates.py +98 -0
  51. discopop-3.2.1/discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py +162 -0
  52. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/UpdateOptimization/RemoveLoopIndexUpdates.py +23 -6
  53. discopop-3.2.1/discopop_library/discopop_optimizer/UpdateOptimization/RemoveSameDeviceUpdates.py +36 -0
  54. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/UpdateOptimization/main.py +22 -11
  55. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Variables/Experiment.py +10 -0
  56. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/__main__.py +35 -8
  57. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/ContextObject.py +5 -0
  58. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/Update.py +27 -2
  59. discopop-3.2.1/discopop_library/discopop_optimizer/classes/edges/CallEdge.py +12 -0
  60. discopop-3.2.1/discopop_library/discopop_optimizer/classes/nodes/DeviceSwitch.py +41 -0
  61. discopop-3.2.1/discopop_library/discopop_optimizer/classes/nodes/FunctionReturn.py +18 -0
  62. discopop-3.2.1/discopop_library/discopop_optimizer/classes/nodes/SynchronizationTrigger.py +41 -0
  63. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/Network.py +4 -0
  64. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/System.py +18 -0
  65. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/CPU.py +6 -1
  66. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/Device.py +14 -2
  67. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/GPU.py +13 -3
  68. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/system_utils.py +7 -3
  69. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/types/DataAccessType.py +16 -5
  70. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/presentation/OptionTable.py +6 -6
  71. discopop-3.2.1/discopop_library/discopop_optimizer/interactive/interactive_optimizer.py +195 -0
  72. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/evaluate.py +2 -2
  73. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/evaluate_all_decision_combinations.py +1 -0
  74. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/evolutionary_algorithm.py +11 -4
  75. discopop-3.2.1/discopop_library/discopop_optimizer/optimization/greedy.py +246 -0
  76. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/validation.py +0 -1
  77. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimizer.py +113 -21
  78. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/do_all.py +77 -9
  79. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/main.py +3 -1
  80. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/reduction.py +5 -4
  81. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/optimizers/loop_collapse.py +47 -2
  82. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/MOGUtilities.py +123 -11
  83. discopop-3.2.1/discopop_library/discopop_optimizer/utilities/insert_device_switch_nodes.py +127 -0
  84. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization/TopDown.py +3 -0
  85. discopop-3.2.1/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
  86. discopop-3.2.1/discopop_library/global_data/version/VERSION +1 -0
  87. discopop-3.2.1/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
  88. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/version/__pycache__/utils.cpython-38.pyc +0 -0
  89. discopop-3.2.1/discopop_library/result_classes/MergedPattern.py +25 -0
  90. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/OptimizerOutputPattern.py +15 -1
  91. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/PatternStorage.py +10 -1
  92. {discopop-3.1.1 → discopop-3.2.1}/requirements.txt +3 -3
  93. discopop-3.2.1/test/end_to_end/do_all/backwards_array_access/test.py +77 -0
  94. discopop-3.2.1/test/end_to_end/do_all/calls/above_nesting_level_3/test.py +77 -0
  95. discopop-3.2.1/test/end_to_end/do_all/calls/allowing/test.py +77 -0
  96. discopop-3.2.1/test/end_to_end/do_all/calls/allowing_2/test.py +77 -0
  97. discopop-3.2.1/test/end_to_end/do_all/calls/complex/test.py +78 -0
  98. discopop-3.2.1/test/end_to_end/do_all/calls/preventing/simple/test.py +80 -0
  99. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/__init__.py +0 -0
  100. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing/__init__.py +0 -0
  101. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing/test.py +77 -0
  102. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing_2/__init__.py +0 -0
  103. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing_2/test.py +77 -0
  104. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing/__init__.py +0 -0
  105. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing/test.py +80 -0
  106. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing_2/__init__.py +0 -0
  107. discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing_2/test.py +80 -0
  108. discopop-3.2.1/test/end_to_end/do_all/daxpy/__init__.py +0 -0
  109. discopop-3.2.1/test/end_to_end/do_all/daxpy/test.py +87 -0
  110. discopop-3.2.1/test/end_to_end/do_all/negative/__init__.py +0 -0
  111. discopop-3.2.1/test/end_to_end/do_all/negative/nested/OMPSCR/__init__.py +0 -0
  112. discopop-3.2.1/test/end_to_end/do_all/negative/nested/__init__.py +0 -0
  113. discopop-3.2.1/test/end_to_end/do_all/simple/__init__.py +0 -0
  114. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/__init__.py +0 -0
  115. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/__init__.py +0 -0
  116. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/__init__.py +0 -0
  117. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/test.py +78 -0
  118. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/__init__.py +0 -0
  119. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/test.py +77 -0
  120. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/__init__.py +0 -0
  121. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/test.py +77 -0
  122. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/__init__.py +0 -0
  123. discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/test.py +79 -0
  124. discopop-3.2.1/test/end_to_end/do_all/simple/nested/__init__.py +0 -0
  125. discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/__init__.py +0 -0
  126. discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/positive/__init__.py +0 -0
  127. discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall/__init__.py +0 -0
  128. discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall/test.py +79 -0
  129. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/__init__.py +0 -0
  130. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/__init__.py +0 -0
  131. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/minimal/__init__.py +0 -0
  132. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/minimal/test.py +82 -0
  133. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/stack_access/__init__.py +0 -0
  134. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/stack_access/test.py +88 -0
  135. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/positive/__init__.py +0 -0
  136. discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/positive/test.py +77 -0
  137. discopop-3.2.1/test/end_to_end/do_all/stack_access/__init__.py +0 -0
  138. discopop-3.2.1/test/end_to_end/do_all/stack_access/nested/__init__.py +0 -0
  139. discopop-3.2.1/test/end_to_end/do_all/stack_access/nested/positive/__init__.py +0 -0
  140. discopop-3.2.1/test/end_to_end/do_all/stack_access/nested/positive/test.py +86 -0
  141. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/__init__.py +0 -0
  142. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_0/__init__.py +0 -0
  143. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_0/test.py +85 -0
  144. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_1/__init__.py +0 -0
  145. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_1/test.py +85 -0
  146. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_2/__init__.py +0 -0
  147. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_2/test.py +85 -0
  148. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_3/__init__.py +0 -0
  149. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_3/test.py +85 -0
  150. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_5/__init__.py +0 -0
  151. discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_5/test.py +85 -0
  152. discopop-3.2.1/test/end_to_end/do_all/struct/__init__.py +0 -0
  153. discopop-3.2.1/test/end_to_end/do_all/struct/positive/__init__.py +0 -0
  154. discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/__init__.py +0 -0
  155. discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/__init__.py +0 -0
  156. discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/test.py +85 -0
  157. discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/__init__.py +0 -0
  158. discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/test.py +85 -0
  159. discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/__init__.py +0 -0
  160. discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/test.py +85 -0
  161. discopop-3.2.1/test/end_to_end/optimizer/__init__.py +0 -0
  162. discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/__init__.py +0 -0
  163. discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/positive/__init__.py +0 -0
  164. discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/positive/simple_1/__init__.py +0 -0
  165. discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/positive/simple_1/test.py +72 -0
  166. discopop-3.2.1/test/end_to_end/reduction_pattern/__init__.py +0 -0
  167. discopop-3.2.1/test/end_to_end/reduction_pattern/positive/__init__.py +0 -0
  168. discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/__init__.py +0 -0
  169. discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/__init__.py +0 -0
  170. discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/test.py +75 -0
  171. discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/__init__.py +0 -0
  172. discopop-3.2.1/test/utils/__init__.py +0 -0
  173. discopop-3.2.1/test/utils/existence/__init__.py +0 -0
  174. discopop-3.2.1/test/utils/existence/existence_utils.py +25 -0
  175. discopop-3.2.1/test/utils/validator_classes/DoAllInfoForValidation.py +42 -0
  176. discopop-3.2.1/test/utils/validator_classes/__init__.py +0 -0
  177. discopop-3.2.1/test/wip_end_to_end/__init__.py +0 -0
  178. discopop-3.2.1/test/wip_end_to_end/do_all/__init__.py +0 -0
  179. discopop-3.2.1/test/wip_end_to_end/do_all/simple/__init__.py +0 -0
  180. discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/__init__.py +0 -0
  181. discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/__init__.py +0 -0
  182. discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/__init__.py +0 -0
  183. discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall/__init__.py +0 -0
  184. discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall/test.py +79 -0
  185. discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall/__init__.py +0 -0
  186. discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall/test.py +79 -0
  187. discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/__init__.py +0 -0
  188. discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/various/__init__.py +0 -0
  189. discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/various/case_4/__init__.py +0 -0
  190. discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/various/case_4/test.py +85 -0
  191. discopop-3.1.1/discopop_explorer/pattern_detection.py +0 -180
  192. discopop-3.1.1/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
  193. discopop-3.1.1/discopop_library/discopop_optimizer/CostModels/utilities.py +0 -379
  194. discopop-3.1.1/discopop_library/discopop_optimizer/PETParser/PETParser.py +0 -752
  195. discopop-3.1.1/discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py +0 -78
  196. discopop-3.1.1/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
  197. discopop-3.1.1/discopop_library/global_data/version/VERSION +0 -1
  198. discopop-3.1.1/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
  199. discopop-3.1.1/test/do_all/daxpy/test.py +0 -68
  200. discopop-3.1.1/test/optimizer/loop_collapse/negative/simple_1/test.py +0 -56
  201. discopop-3.1.1/test/optimizer/loop_collapse/positive/simple_1/test.py +0 -60
  202. discopop-3.1.1/test/utils/validator_classes/DoAllInfoForValidation.py +0 -21
  203. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_profiler/__init__.py +0 -0
  204. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_profiler/__main__.py +0 -0
  205. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_profiler/utils.py +0 -0
  206. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/__init__.py +0 -0
  207. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/__main__.py +0 -0
  208. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/assets/__init__.py +0 -0
  209. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/assets/icons/__init__.py +0 -0
  210. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Arguments.py +0 -0
  211. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/CodePreview.py +0 -0
  212. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Console.py +0 -0
  213. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/ExecutionConfiguration.py +0 -0
  214. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Pragma.py +0 -0
  215. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/ProfilingContainer.py +0 -0
  216. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Settings.py +0 -0
  217. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Suggestion.py +0 -0
  218. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/TKVarStorage.py +0 -0
  219. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/__init__.py +0 -0
  220. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/headless/__init__.py +0 -0
  221. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/headless/headless_execution.py +0 -0
  222. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/__init__.py +0 -0
  223. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/execution.py +0 -0
  224. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/main.py +0 -0
  225. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/optimizer/__init__.py +0 -0
  226. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/optimizer/binding.py +0 -0
  227. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/settings.py +0 -0
  228. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/suggestions/__init__.py +0 -0
  229. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/suggestions/overview.py +0 -0
  230. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/utils.py +0 -0
  231. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/widgets/ScrollableText.py +0 -0
  232. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/widgets/__init__.py +0 -0
  233. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/utils.py +0 -0
  234. {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/wizard.py +0 -0
  235. {discopop-3.1.1 → discopop-3.2.1}/LICENSE +0 -0
  236. {discopop-3.1.1 → discopop-3.2.1}/MANIFEST.in +0 -0
  237. {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/dependency_links.txt +0 -0
  238. {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/entry_points.txt +0 -0
  239. {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/requires.txt +0 -0
  240. {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/top_level.txt +0 -0
  241. {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/zip-safe +0 -0
  242. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/__init__.py +0 -0
  243. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/generate_Data_CUInst.py +0 -0
  244. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/json_serializer.py +0 -0
  245. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/parallel_utils.py +0 -0
  246. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/PatternInfo.py +0 -0
  247. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/__init__.py +0 -0
  248. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/__init__.py +0 -0
  249. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Aliases.py +0 -0
  250. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Dependency.py +0 -0
  251. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/EntryPoint.py +0 -0
  252. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Enums.py +0 -0
  253. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/ExitPoint.py +0 -0
  254. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Update.py +0 -0
  255. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/__init__.py +0 -0
  256. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/combined_gpu_pattern_detector.py +0 -0
  257. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_1.py +0 -0
  258. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_2.py +0 -0
  259. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_3.py +0 -0
  260. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_4.py +0 -0
  261. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_5.py +0 -0
  262. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_6.py +0 -0
  263. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/utilities.py +0 -0
  264. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/device_updates.py +0 -0
  265. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPULoop.py +0 -0
  266. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPUMemory.py +0 -0
  267. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPURegions.py +0 -0
  268. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/__init__.py +0 -0
  269. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/gpu_pattern_detector.py +0 -0
  270. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/utils.py +0 -0
  271. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/__init__.py +0 -0
  272. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/alias_detection.py +0 -0
  273. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/classes.py +0 -0
  274. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/filter.py +0 -0
  275. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/postprocessor.py +0 -0
  276. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/preprocessor.py +0 -0
  277. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/__init__.py +0 -0
  278. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/auxiliary.py +0 -0
  279. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/barriers.py +0 -0
  280. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/data_sharing_clauses.py +0 -0
  281. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/dependency_clauses.py +0 -0
  282. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/tasks.py +0 -0
  283. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/tp_utils.py +0 -0
  284. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/plugins/__init__.py +0 -0
  285. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/plugins/pipeline.py +0 -0
  286. {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/test/__init__.py +0 -0
  287. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/CodeGenerator.py +0 -0
  288. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/CodeGeneratorArguments.py +0 -0
  289. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/__init__.py +0 -0
  290. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/ContentBuffer.py +0 -0
  291. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/Enums.py +0 -0
  292. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/Line.py +0 -0
  293. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/Pragma.py +0 -0
  294. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/__init__.py +0 -0
  295. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/assets/.gitignore +0 -0
  296. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/JSONHandler/JSONHandler.py +0 -0
  297. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/JSONHandler/__init__.py +0 -0
  298. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/__init__.py +0 -0
  299. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/diff_modifications.py +0 -0
  300. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/initialize.py +0 -0
  301. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/load.py +0 -0
  302. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/save.py +0 -0
  303. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/MemoryRegions/__init__.py +0 -0
  304. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/MemoryRegions/utils.py +0 -0
  305. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/__init__.py +0 -0
  306. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/apply.py +0 -0
  307. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/clear.py +0 -0
  308. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/list.py +0 -0
  309. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/load.py +0 -0
  310. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/patch_applicator.py +0 -0
  311. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/rollback.py +0 -0
  312. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/__init__.py +0 -0
  313. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/diffs.py +0 -0
  314. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/from_optimizer_output.py +0 -0
  315. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PathManagement/PathManagement.py +0 -0
  316. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PathManagement/__init__.py +0 -0
  317. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatternIdManagement/unique_pattern_id.py +0 -0
  318. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/__init__.py +0 -0
  319. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/CostModel.py +0 -0
  320. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/DataTransfer/DataTransferCosts.py +0 -0
  321. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/DataTransfer/__init__.py +0 -0
  322. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/__init__.py +0 -0
  323. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/DataTransfers/__init__.py +0 -0
  324. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/DelaunayInterpolatedMicrobench.py +0 -0
  325. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/ExtrapInterpolatedMicrobench.py +0 -0
  326. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/MicrobenchParser.py +0 -0
  327. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/__init__.py +0 -0
  328. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/utils.py +0 -0
  329. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/DataAccesses/CalculateUpdates.py +0 -0
  330. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/DataAccesses/FromCUs.py +0 -0
  331. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/DataAccesses/__init__.py +0 -0
  332. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/__init__.py +0 -0
  333. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/UpdateOptimization/LoopInitializationUpdates.py +0 -0
  334. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Variables/ExperimentUtils.py +0 -0
  335. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Variables/__init__.py +0 -0
  336. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/__init__.py +0 -0
  337. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/bindings/__init__.py +0 -0
  338. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/bindings/utilities.py +0 -0
  339. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/__init__.py +0 -0
  340. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/ContextObjectUtils.py +0 -0
  341. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/__init__.py +0 -0
  342. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/ChildEdge.py +0 -0
  343. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/DataFlowEdge.py +0 -0
  344. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/GenericEdge.py +0 -0
  345. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/MutuallyExclusiveEdge.py +0 -0
  346. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/OptionEdge.py +0 -0
  347. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/RequirementEdge.py +0 -0
  348. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/SuccessorEdge.py +0 -0
  349. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/TemporaryEdge.py +0 -0
  350. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/__init__.py +0 -0
  351. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/enums/Distributions.py +0 -0
  352. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/enums/__init__.py +0 -0
  353. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextMerge.py +0 -0
  354. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextNode.py +0 -0
  355. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextRestore.py +0 -0
  356. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextSave.py +0 -0
  357. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshot.py +0 -0
  358. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshotPop.py +0 -0
  359. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/FunctionRoot.py +0 -0
  360. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/GenericNode.py +0 -0
  361. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/Loop.py +0 -0
  362. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/Workload.py +0 -0
  363. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/__init__.py +0 -0
  364. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/__init__.py +0 -0
  365. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/DeviceTypeEnum.py +0 -0
  366. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/__init__.py +0 -0
  367. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/types/Aliases.py +0 -0
  368. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/types/__init__.py +0 -0
  369. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/__init__.py +0 -0
  370. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/plotting/CostModels.py +0 -0
  371. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/plotting/__init__.py +0 -0
  372. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/presentation/ChoiceDetails.py +0 -0
  373. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/presentation/__init__.py +0 -0
  374. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/queries/ValueTableQuery.py +0 -0
  375. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/queries/__init__.py +0 -0
  376. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/widgets/ScrollableFrame.py +0 -0
  377. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/widgets/__init__.py +0 -0
  378. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/scheduling/__init__.py +0 -0
  379. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/scheduling/workload_delta.py +0 -0
  380. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/__init__.py +0 -0
  381. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/__init__.py +0 -0
  382. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/optimizers/main.py +0 -0
  383. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/__init__.py +0 -0
  384. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/RandomSamples.py +0 -0
  385. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/__init__.py +0 -0
  386. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization/__init__.py +0 -0
  387. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/__init__.py +0 -0
  388. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/simple_utilities.py +0 -0
  389. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/visualization/__init__.py +0 -0
  390. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/visualization/plotting.py +0 -0
  391. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/visualization/update_graph.py +0 -0
  392. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/__init__.py +0 -0
  393. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/version/__init__.py +0 -0
  394. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/version/utils.py +0 -0
  395. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/py.typed +0 -0
  396. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/DetectionResult.py +0 -0
  397. {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/__init__.py +0 -0
  398. {discopop-3.1.1 → discopop-3.2.1}/setup.cfg +0 -0
  399. {discopop-3.1.1 → discopop-3.2.1}/setup.py +0 -0
  400. {discopop-3.1.1 → discopop-3.2.1}/test/__init__.py +0 -0
  401. {discopop-3.1.1/test/do_all → discopop-3.2.1/test/end_to_end}/__init__.py +0 -0
  402. {discopop-3.1.1/test/do_all/daxpy → discopop-3.2.1/test/end_to_end/do_all}/__init__.py +0 -0
  403. {discopop-3.1.1/test/optimizer → discopop-3.2.1/test/end_to_end/do_all/backwards_array_access}/__init__.py +0 -0
  404. {discopop-3.1.1/test/optimizer/loop_collapse → discopop-3.2.1/test/end_to_end/do_all/calls}/__init__.py +0 -0
  405. {discopop-3.1.1/test/optimizer/loop_collapse/negative → discopop-3.2.1/test/end_to_end/do_all/calls/above_nesting_level_3}/__init__.py +0 -0
  406. {discopop-3.1.1/test/optimizer/loop_collapse/negative/simple_1 → discopop-3.2.1/test/end_to_end/do_all/calls/allowing}/__init__.py +0 -0
  407. {discopop-3.1.1/test/optimizer/loop_collapse/positive → discopop-3.2.1/test/end_to_end/do_all/calls/allowing_2}/__init__.py +0 -0
  408. {discopop-3.1.1/test/optimizer/loop_collapse/positive/simple_1 → discopop-3.2.1/test/end_to_end/do_all/calls/complex}/__init__.py +0 -0
  409. {discopop-3.1.1/test/utils → discopop-3.2.1/test/end_to_end/do_all/calls/preventing}/__init__.py +0 -0
  410. {discopop-3.1.1/test/utils/validator_classes → discopop-3.2.1/test/end_to_end/do_all/calls/preventing/simple}/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: discopop
3
- Version: 3.1.1
3
+ Version: 3.2.1
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.1
3
+ Version: 3.2.1
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,21 +281,116 @@ 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
265
286
  discopop_library/result_classes/PatternStorage.py
266
287
  discopop_library/result_classes/__init__.py
267
288
  test/__init__.py
268
- test/do_all/__init__.py
269
- test/do_all/daxpy/__init__.py
270
- test/do_all/daxpy/test.py
271
- test/optimizer/__init__.py
272
- test/optimizer/loop_collapse/__init__.py
273
- test/optimizer/loop_collapse/negative/__init__.py
274
- test/optimizer/loop_collapse/negative/simple_1/__init__.py
275
- test/optimizer/loop_collapse/negative/simple_1/test.py
276
- test/optimizer/loop_collapse/positive/__init__.py
277
- test/optimizer/loop_collapse/positive/simple_1/__init__.py
278
- test/optimizer/loop_collapse/positive/simple_1/test.py
289
+ test/end_to_end/__init__.py
290
+ test/end_to_end/do_all/__init__.py
291
+ test/end_to_end/do_all/backwards_array_access/__init__.py
292
+ test/end_to_end/do_all/backwards_array_access/test.py
293
+ test/end_to_end/do_all/calls/__init__.py
294
+ test/end_to_end/do_all/calls/above_nesting_level_3/__init__.py
295
+ test/end_to_end/do_all/calls/above_nesting_level_3/test.py
296
+ test/end_to_end/do_all/calls/allowing/__init__.py
297
+ test/end_to_end/do_all/calls/allowing/test.py
298
+ test/end_to_end/do_all/calls/allowing_2/__init__.py
299
+ test/end_to_end/do_all/calls/allowing_2/test.py
300
+ test/end_to_end/do_all/calls/complex/__init__.py
301
+ test/end_to_end/do_all/calls/complex/test.py
302
+ test/end_to_end/do_all/calls/preventing/__init__.py
303
+ test/end_to_end/do_all/calls/preventing/simple/__init__.py
304
+ test/end_to_end/do_all/calls/preventing/simple/test.py
305
+ test/end_to_end/do_all/calls/second_order/__init__.py
306
+ test/end_to_end/do_all/calls/second_order/allowing/__init__.py
307
+ test/end_to_end/do_all/calls/second_order/allowing/test.py
308
+ test/end_to_end/do_all/calls/second_order/allowing_2/__init__.py
309
+ test/end_to_end/do_all/calls/second_order/allowing_2/test.py
310
+ test/end_to_end/do_all/calls/second_order/preventing/__init__.py
311
+ test/end_to_end/do_all/calls/second_order/preventing/test.py
312
+ test/end_to_end/do_all/calls/second_order/preventing_2/__init__.py
313
+ test/end_to_end/do_all/calls/second_order/preventing_2/test.py
314
+ test/end_to_end/do_all/daxpy/__init__.py
315
+ test/end_to_end/do_all/daxpy/test.py
316
+ test/end_to_end/do_all/negative/__init__.py
317
+ test/end_to_end/do_all/negative/nested/__init__.py
318
+ test/end_to_end/do_all/negative/nested/OMPSCR/__init__.py
319
+ test/end_to_end/do_all/simple/__init__.py
320
+ test/end_to_end/do_all/simple/global_vars/__init__.py
321
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/__init__.py
322
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/__init__.py
323
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/test.py
324
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/__init__.py
325
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/test.py
326
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/__init__.py
327
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/test.py
328
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/__init__.py
329
+ test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/test.py
330
+ test/end_to_end/do_all/simple/nested/__init__.py
331
+ test/end_to_end/do_all/simple/nested/depth_2/__init__.py
332
+ test/end_to_end/do_all/simple/nested/depth_2/positive/__init__.py
333
+ test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall/__init__.py
334
+ test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall/test.py
335
+ test/end_to_end/do_all/simple/not_nested/__init__.py
336
+ test/end_to_end/do_all/simple/not_nested/negative/__init__.py
337
+ test/end_to_end/do_all/simple/not_nested/negative/minimal/__init__.py
338
+ test/end_to_end/do_all/simple/not_nested/negative/minimal/test.py
339
+ test/end_to_end/do_all/simple/not_nested/negative/stack_access/__init__.py
340
+ test/end_to_end/do_all/simple/not_nested/negative/stack_access/test.py
341
+ test/end_to_end/do_all/simple/not_nested/positive/__init__.py
342
+ test/end_to_end/do_all/simple/not_nested/positive/test.py
343
+ test/end_to_end/do_all/stack_access/__init__.py
344
+ test/end_to_end/do_all/stack_access/nested/__init__.py
345
+ test/end_to_end/do_all/stack_access/nested/positive/__init__.py
346
+ test/end_to_end/do_all/stack_access/nested/positive/test.py
347
+ test/end_to_end/do_all/stack_access/various/__init__.py
348
+ test/end_to_end/do_all/stack_access/various/case_0/__init__.py
349
+ test/end_to_end/do_all/stack_access/various/case_0/test.py
350
+ test/end_to_end/do_all/stack_access/various/case_1/__init__.py
351
+ test/end_to_end/do_all/stack_access/various/case_1/test.py
352
+ test/end_to_end/do_all/stack_access/various/case_2/__init__.py
353
+ test/end_to_end/do_all/stack_access/various/case_2/test.py
354
+ test/end_to_end/do_all/stack_access/various/case_3/__init__.py
355
+ test/end_to_end/do_all/stack_access/various/case_3/test.py
356
+ test/end_to_end/do_all/stack_access/various/case_5/__init__.py
357
+ test/end_to_end/do_all/stack_access/various/case_5/test.py
358
+ test/end_to_end/do_all/struct/__init__.py
359
+ test/end_to_end/do_all/struct/positive/__init__.py
360
+ test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/__init__.py
361
+ test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/__init__.py
362
+ test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/test.py
363
+ test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/__init__.py
364
+ test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/test.py
365
+ test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/__init__.py
366
+ test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/test.py
367
+ test/end_to_end/optimizer/__init__.py
368
+ test/end_to_end/optimizer/loop_collapse/__init__.py
369
+ test/end_to_end/optimizer/loop_collapse/positive/__init__.py
370
+ test/end_to_end/optimizer/loop_collapse/positive/simple_1/__init__.py
371
+ test/end_to_end/optimizer/loop_collapse/positive/simple_1/test.py
372
+ test/end_to_end/reduction_pattern/__init__.py
373
+ test/end_to_end/reduction_pattern/positive/__init__.py
374
+ test/end_to_end/reduction_pattern/positive/nested/__init__.py
375
+ test/end_to_end/reduction_pattern/positive/nested/OMPSCR/__init__.py
376
+ test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/__init__.py
377
+ test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/test.py
279
378
  test/utils/__init__.py
379
+ test/utils/existence/__init__.py
380
+ test/utils/existence/existence_utils.py
280
381
  test/utils/validator_classes/DoAllInfoForValidation.py
281
- test/utils/validator_classes/__init__.py
382
+ test/utils/validator_classes/__init__.py
383
+ test/wip_end_to_end/__init__.py
384
+ test/wip_end_to_end/do_all/__init__.py
385
+ test/wip_end_to_end/do_all/simple/__init__.py
386
+ test/wip_end_to_end/do_all/simple/nested/__init__.py
387
+ test/wip_end_to_end/do_all/simple/nested/depth_2/__init__.py
388
+ test/wip_end_to_end/do_all/simple/nested/depth_2/positive/__init__.py
389
+ test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall/__init__.py
390
+ test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall/test.py
391
+ test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall/__init__.py
392
+ test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall/test.py
393
+ test/wip_end_to_end/do_all/stack_access/__init__.py
394
+ test/wip_end_to_end/do_all/stack_access/various/__init__.py
395
+ test/wip_end_to_end/do_all/stack_access/various/case_4/__init__.py
396
+ test/wip_end_to_end/do_all/stack_access/various/case_4/test.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
@@ -140,6 +142,10 @@ class Dependency:
140
142
  sink_line: Optional[LineID] = None
141
143
  intra_iteration: bool = False
142
144
  intra_iteration_level: int = -1
145
+ metadata_intra_iteration_dep: Optional[List[LineID]] = None
146
+ metadata_inter_iteration_dep: Optional[List[LineID]] = None
147
+ metadata_intra_call_dep: Optional[List[LineID]] = None
148
+ metadata_inter_call_dep: Optional[List[LineID]] = None
143
149
 
144
150
  def __init__(self, type: EdgeType):
145
151
  self.etype = type
@@ -158,9 +164,9 @@ class Node:
158
164
  end_line: int
159
165
  type: NodeType
160
166
  name: str
161
- parent_function_id: Optional[
162
- NodeID
163
- ] = None # metadata to speedup some calculations (TODO FunctionNodes have themselves as parent)
167
+ parent_function_id: Optional[NodeID] = (
168
+ None # metadata to speedup some calculations (TODO FunctionNodes have themselves as parent)
169
+ )
164
170
  workload: Optional[int] = None
165
171
 
166
172
  # properties of CU Nodes
@@ -206,7 +212,9 @@ class Node:
206
212
  return LineID(f"{self.file_id}:{self.end_line}")
207
213
 
208
214
  def contains_line(self, other_line) -> bool:
209
- if other_line == "GlobalVar":
215
+ if other_line == "GlobalVar" or other_line == "LineNotFound":
216
+ return False
217
+ if not ":" in other_line:
210
218
  return False
211
219
  other_file_id = int(other_line.split(":")[0])
212
220
  other_line_num = int(other_line.split(":")[1])
@@ -565,6 +573,33 @@ def parse_dependency(dep: DependenceItem) -> Dependency:
565
573
  d.dtype = DepType[dep.type]
566
574
  d.var_name = dep.var_name
567
575
  d.memory_region = dep.memory_region
576
+ # parse metadata
577
+ if ";" in dep.metadata:
578
+ for md in dep.metadata.split(";"):
579
+ if len(md) == 0:
580
+ continue
581
+ md_type = md[: md.index(":")]
582
+ md_raw_values = md[md.index(":") + 1 :]
583
+ md_values = [tmp for tmp in md_raw_values.split(",") if len(tmp) > 0]
584
+
585
+ if md_type == "intra_iteration_dep":
586
+ if d.metadata_intra_iteration_dep is None:
587
+ d.metadata_intra_iteration_dep = []
588
+ d.metadata_intra_iteration_dep += md_values
589
+ elif md_type == "inter_iteration_dep":
590
+ if d.metadata_inter_iteration_dep is None:
591
+ d.metadata_inter_iteration_dep = []
592
+ d.metadata_inter_iteration_dep += md_values
593
+ elif md_type == "intra_call_dep":
594
+ if d.metadata_intra_call_dep is None:
595
+ d.metadata_intra_call_dep = []
596
+ d.metadata_intra_call_dep += md_values
597
+ elif md_type == "inter_call_dep":
598
+ if d.metadata_inter_call_dep is None:
599
+ d.metadata_inter_call_dep = []
600
+ d.metadata_inter_call_dep += md_values
601
+ else:
602
+ raise ValueError("Unknown metadata type: ", md_type)
568
603
  return d
569
604
 
570
605
 
@@ -693,8 +728,6 @@ class PEGraphX(object):
693
728
  # as a result, comparing variable names to match memory regions is valid
694
729
  for _, _, d1 in out_deps:
695
730
  for _, _, d2 in out_deps:
696
- if d1 == d2:
697
- continue
698
731
  if d1.var_name == d2.var_name:
699
732
  if d1.memory_region != d2.memory_region:
700
733
  if d1.memory_region not in mem_reg_mappings:
@@ -724,10 +757,26 @@ class PEGraphX(object):
724
757
 
725
758
  print("Done.")
726
759
 
727
- def calculateFunctionMetadata(self) -> None:
760
+ def calculateFunctionMetadata(self, hotspot_information=None, func_nodes=None) -> None:
728
761
  # store id of parent function in each node
729
762
  # and store in each function node a list of all children ids
730
- func_nodes = self.all_nodes(FunctionNode)
763
+ if func_nodes is None:
764
+ func_nodes = self.all_nodes(FunctionNode)
765
+
766
+ if hotspot_information is not None:
767
+ all_hotspot_functions: Set[Tuple[int, str]] = set()
768
+ for key in hotspot_information:
769
+ for entry in hotspot_information[key]:
770
+ if entry[2] == HotspotNodeType.FUNCTION:
771
+ all_hotspot_functions.add((entry[0], entry[3]))
772
+
773
+ filtered_func_nodes = [
774
+ func_node
775
+ for func_node in func_nodes
776
+ if (func_node.file_id, func_node.name) in all_hotspot_functions
777
+ ]
778
+ func_nodes = filtered_func_nodes
779
+
731
780
  print("Calculating local metadata results for functions...")
732
781
  import tqdm # type: ignore
733
782
  from multiprocessing import Pool
@@ -752,37 +801,39 @@ class PEGraphX(object):
752
801
  print("\tMetadata calculation done.")
753
802
 
754
803
  # 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.")
804
+ # note: this can introduce false positives! Keep the analysis pessimistic to ensure correctness
805
+ if False:
806
+ print("Cleaning duplicated dependencies...")
807
+ to_be_removed = []
808
+ for cu_node in self.all_nodes(CUNode):
809
+ out_deps = self.out_edges(cu_node.id, EdgeType.DATA)
810
+ for dep_1 in out_deps:
811
+ for dep_2 in out_deps:
812
+ if dep_1 == dep_2:
813
+ continue
814
+ if (
815
+ dep_1[2].dtype == dep_2[2].dtype
816
+ and dep_1[2].etype == dep_2[2].etype
817
+ and dep_1[2].memory_region == dep_2[2].memory_region
818
+ and dep_1[2].sink_line == dep_2[2].sink_line
819
+ and dep_1[2].source_line == dep_2[2].source_line
820
+ and dep_1[2].var_name == dep_2[2].var_name
821
+ ):
822
+ if not dep_1[2].intra_iteration and dep_2[2].intra_iteration:
823
+ # dep_2 is a more specific duplicate of dep_1
824
+ # remove dep_1
825
+ to_be_removed.append(dep_1)
826
+
827
+ to_be_removed_with_keys = []
828
+ for dep in to_be_removed:
829
+ graph_edges = self.g.out_edges(dep[0], keys=True, data="data")
830
+
831
+ for s, t, key, data in graph_edges:
832
+ if dep[0] == s and dep[1] == t and dep[2] == data:
833
+ to_be_removed_with_keys.append((s, t, key))
834
+ for edge in set(to_be_removed_with_keys):
835
+ self.g.remove_edge(edge[0], edge[1], edge[2])
836
+ print("Cleaning dependencies done.")
786
837
 
787
838
  # cleanup dependencies II : only consider the Intra-iteration dependencies with the highest level
788
839
  print("Cleaning duplicated dependencies II...")
@@ -941,12 +992,10 @@ class PEGraphX(object):
941
992
  NodeT = TypeVar("NodeT", bound=Node)
942
993
 
943
994
  @overload
944
- def all_nodes(self) -> List[Node]:
945
- ...
995
+ def all_nodes(self) -> List[Node]: ...
946
996
 
947
997
  @overload
948
- def all_nodes(self, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]:
949
- ...
998
+ def all_nodes(self, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]: ...
950
999
 
951
1000
  def all_nodes(self, type=Node):
952
1001
  """List of all nodes of specified type
@@ -989,12 +1038,10 @@ class PEGraphX(object):
989
1038
  return [t for t in self.g.in_edges(node_id, data="data") if t[2].etype == etype]
990
1039
 
991
1040
  @overload
992
- def subtree_of_type(self, root: Node) -> List[Node]:
993
- ...
1041
+ def subtree_of_type(self, root: Node) -> List[Node]: ...
994
1042
 
995
1043
  @overload
996
- def subtree_of_type(self, root: Node, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]:
997
- ...
1044
+ def subtree_of_type(self, root: Node, type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]) -> List[NodeT]: ...
998
1045
 
999
1046
  def subtree_of_type(self, root, type=Node):
1000
1047
  """Gets all nodes in subtree of specified type including root
@@ -1006,14 +1053,12 @@ class PEGraphX(object):
1006
1053
  return self.subtree_of_type_rec(root, set(), type)
1007
1054
 
1008
1055
  @overload
1009
- def subtree_of_type_rec(self, root: Node, visited: Set[Node]) -> List[Node]:
1010
- ...
1056
+ def subtree_of_type_rec(self, root: Node, visited: Set[Node]) -> List[Node]: ...
1011
1057
 
1012
1058
  @overload
1013
1059
  def subtree_of_type_rec(
1014
1060
  self, root: Node, visited: Set[Node], type: Union[Type[NodeT], Tuple[Type[NodeT], ...]]
1015
- ) -> List[NodeT]:
1016
- ...
1061
+ ) -> List[NodeT]: ...
1017
1062
 
1018
1063
  def subtree_of_type_rec(self, root, visited, type=Node):
1019
1064
  """recursive helper function for subtree_of_type"""
@@ -1400,6 +1445,21 @@ class PEGraphX(object):
1400
1445
  """
1401
1446
  if isinstance(node, FunctionNode):
1402
1447
  return node
1448
+ if node.parent_function_id is None:
1449
+ # no precalculated information found.
1450
+ current_node = node
1451
+ parent_node: Optional[Node] = node
1452
+ while parent_node is not None:
1453
+ current_node = parent_node
1454
+ if type(self.node_at(current_node.id)) == FunctionNode:
1455
+ node.parent_function_id = current_node.id
1456
+ break
1457
+ parents = [e[0] for e in self.in_edges(current_node.id, etype=EdgeType.CHILD)]
1458
+ if len(parents) == 0:
1459
+ parent_node = None
1460
+ else:
1461
+ parent_node = self.node_at(parents[0])
1462
+
1403
1463
  assert node.parent_function_id
1404
1464
  return cast(FunctionNode, self.node_at(node.parent_function_id))
1405
1465
 
@@ -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