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.
- {discopop-3.1.1/discopop.egg-info → discopop-3.2.1}/PKG-INFO +1 -1
- {discopop-3.1.1 → discopop-3.2.1}/README.md +12 -12
- {discopop-3.1.1 → discopop-3.2.1/discopop.egg-info}/PKG-INFO +1 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/SOURCES.txt +127 -12
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/PEGraphX.py +112 -52
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/__main__.py +8 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/discopop_explorer.py +66 -17
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/parser.py +7 -2
- discopop-3.2.1/discopop_explorer/pattern_detection.py +294 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/PatternBase.py +2 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/CombinedGPURegions.py +12 -12
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/prepare_metadata.py +4 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/do_all_detector.py +120 -14
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/geometric_decomposition_detector.py +5 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/pipeline_detector.py +5 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/reduction_detector.py +63 -4
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/task_parallelism_detector.py +5 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/utils.py +57 -2
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/variable.py +4 -1
- discopop-3.2.1/discopop_library/ArgumentClasses/GeneralArguments.py +18 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/UnpackedSuggestion.py +17 -7
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/ConfigProviderArguments.py +2 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/__main__.py +12 -10
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/config_provider.py +18 -4
- discopop-3.2.1/discopop_library/GlobalLogger/setup.py +38 -0
- discopop-3.2.1/discopop_library/HostpotLoader/HotspotLoaderArguments.py +50 -0
- discopop-3.2.1/discopop_library/HostpotLoader/HotspotNodeType.py +23 -0
- discopop-3.2.1/discopop_library/HostpotLoader/HotspotType.py +25 -0
- discopop-3.2.1/discopop_library/HostpotLoader/hostpot_loader.py +64 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/PatchApplicatorArguments.py +3 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/__main__.py +7 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/PatchGeneratorArguments.py +6 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/__main__.py +29 -2
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/from_json_patterns.py +31 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/patch_generator.py +3 -0
- discopop-3.2.1/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/CostModels/utilities.py +424 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/DataTransfers/DataTransfers.py +102 -7
- discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/NewDataTransfers.py +509 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/calculate_configuration_data_movement.py +54 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/prepare_force_branch_end_data_movement.py +103 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement.py +24 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/DataTransfers/prepare_forced_data_movement_prior_to_call.py +91 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/Microbench.py +4 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/MixedMicrobench.py +12 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/PureDataMicrobench.py +11 -7
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/OptimizationGraph.py +3 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/OptimizerArguments.py +21 -12
- discopop-3.2.1/discopop_library/discopop_optimizer/PETParser/PETParser.py +1472 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/UpdateOptimization/AddRangesToUpdates.py +98 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py +162 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/UpdateOptimization/RemoveLoopIndexUpdates.py +23 -6
- discopop-3.2.1/discopop_library/discopop_optimizer/UpdateOptimization/RemoveSameDeviceUpdates.py +36 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/UpdateOptimization/main.py +22 -11
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Variables/Experiment.py +10 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/__main__.py +35 -8
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/ContextObject.py +5 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/Update.py +27 -2
- discopop-3.2.1/discopop_library/discopop_optimizer/classes/edges/CallEdge.py +12 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/classes/nodes/DeviceSwitch.py +41 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/classes/nodes/FunctionReturn.py +18 -0
- discopop-3.2.1/discopop_library/discopop_optimizer/classes/nodes/SynchronizationTrigger.py +41 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/Network.py +4 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/System.py +18 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/CPU.py +6 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/Device.py +14 -2
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/GPU.py +13 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/system_utils.py +7 -3
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/types/DataAccessType.py +16 -5
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/presentation/OptionTable.py +6 -6
- discopop-3.2.1/discopop_library/discopop_optimizer/interactive/interactive_optimizer.py +195 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/evaluate.py +2 -2
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/evaluate_all_decision_combinations.py +1 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/evolutionary_algorithm.py +11 -4
- discopop-3.2.1/discopop_library/discopop_optimizer/optimization/greedy.py +246 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimization/validation.py +0 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/optimizer.py +113 -21
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/do_all.py +77 -9
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/main.py +3 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/reduction.py +5 -4
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/optimizers/loop_collapse.py +47 -2
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/MOGUtilities.py +123 -11
- discopop-3.2.1/discopop_library/discopop_optimizer/utilities/insert_device_switch_nodes.py +127 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization/TopDown.py +3 -0
- discopop-3.2.1/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
- discopop-3.2.1/discopop_library/global_data/version/VERSION +1 -0
- discopop-3.2.1/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/version/__pycache__/utils.cpython-38.pyc +0 -0
- discopop-3.2.1/discopop_library/result_classes/MergedPattern.py +25 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/OptimizerOutputPattern.py +15 -1
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/PatternStorage.py +10 -1
- {discopop-3.1.1 → discopop-3.2.1}/requirements.txt +3 -3
- discopop-3.2.1/test/end_to_end/do_all/backwards_array_access/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/above_nesting_level_3/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/allowing/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/allowing_2/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/complex/test.py +78 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/preventing/simple/test.py +80 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing_2/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/allowing_2/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing/test.py +80 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing_2/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/calls/second_order/preventing_2/test.py +80 -0
- discopop-3.2.1/test/end_to_end/do_all/daxpy/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/daxpy/test.py +87 -0
- discopop-3.2.1/test/end_to_end/do_all/negative/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/negative/nested/OMPSCR/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/negative/nested/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_arrays/test.py +78 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_struct/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/global_vars/miniFE_CSRMatrix_proxy/global_vectors_and_struct/test.py +79 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/nested/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/positive/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/nested/depth_2/positive/both_loops_doall/test.py +79 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/minimal/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/minimal/test.py +82 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/stack_access/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/negative/stack_access/test.py +88 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/positive/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/simple/not_nested/positive/test.py +77 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/nested/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/nested/positive/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/nested/positive/test.py +86 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_0/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_0/test.py +85 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_1/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_1/test.py +85 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_2/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_2/test.py +85 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_3/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_3/test.py +85 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_5/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/stack_access/various/case_5/test.py +85 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/access_outside_struct/test.py +85 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/std_data_types/test.py +85 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/do_all/struct/positive/miniFE_CSRMatrix_proxy/template_data_types/test.py +85 -0
- discopop-3.2.1/test/end_to_end/optimizer/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/positive/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/positive/simple_1/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/optimizer/loop_collapse/positive/simple_1/test.py +72 -0
- discopop-3.2.1/test/end_to_end/reduction_pattern/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/reduction_pattern/positive/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/__init__.py +0 -0
- discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/OMPSCR/c_Mandelbrot/test.py +75 -0
- discopop-3.2.1/test/end_to_end/reduction_pattern/positive/nested/__init__.py +0 -0
- discopop-3.2.1/test/utils/__init__.py +0 -0
- discopop-3.2.1/test/utils/existence/__init__.py +0 -0
- discopop-3.2.1/test/utils/existence/existence_utils.py +25 -0
- discopop-3.2.1/test/utils/validator_classes/DoAllInfoForValidation.py +42 -0
- discopop-3.2.1/test/utils/validator_classes/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/inner_loop_doall/test.py +79 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/simple/nested/depth_2/positive/outer_loop_doall/test.py +79 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/various/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/various/case_4/__init__.py +0 -0
- discopop-3.2.1/test/wip_end_to_end/do_all/stack_access/various/case_4/test.py +85 -0
- discopop-3.1.1/discopop_explorer/pattern_detection.py +0 -180
- discopop-3.1.1/discopop_library/__pycache__/__init__.cpython-38.pyc +0 -0
- discopop-3.1.1/discopop_library/discopop_optimizer/CostModels/utilities.py +0 -379
- discopop-3.1.1/discopop_library/discopop_optimizer/PETParser/PETParser.py +0 -752
- discopop-3.1.1/discopop_library/discopop_optimizer/UpdateOptimization/RemoveDuplicatedUpdates.py +0 -78
- discopop-3.1.1/discopop_library/global_data/__pycache__/__init__.cpython-38.pyc +0 -0
- discopop-3.1.1/discopop_library/global_data/version/VERSION +0 -1
- discopop-3.1.1/discopop_library/global_data/version/__pycache__/__init__.cpython-38.pyc +0 -0
- discopop-3.1.1/test/do_all/daxpy/test.py +0 -68
- discopop-3.1.1/test/optimizer/loop_collapse/negative/simple_1/test.py +0 -56
- discopop-3.1.1/test/optimizer/loop_collapse/positive/simple_1/test.py +0 -60
- discopop-3.1.1/test/utils/validator_classes/DoAllInfoForValidation.py +0 -21
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_profiler/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_profiler/__main__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_profiler/utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/__main__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/assets/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/assets/icons/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Arguments.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/CodePreview.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Console.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/ExecutionConfiguration.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Pragma.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/ProfilingContainer.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Settings.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/Suggestion.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/TKVarStorage.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/classes/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/headless/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/headless/headless_execution.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/execution.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/main.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/optimizer/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/optimizer/binding.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/settings.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/suggestions/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/suggestions/overview.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/widgets/ScrollableText.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/screens/widgets/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/DEPRECATED_discopop_wizard/wizard.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/LICENSE +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/MANIFEST.in +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/dependency_links.txt +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/entry_points.txt +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/requires.txt +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/top_level.txt +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop.egg-info/zip-safe +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/generate_Data_CUInst.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/json_serializer.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/parallel_utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/PatternInfo.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Aliases.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Dependency.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/EntryPoint.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Enums.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/ExitPoint.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/Update.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/classes/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/combined_gpu_pattern_detector.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_1.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_2.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_3.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_4.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_5.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/step_6.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/combined_gpu_patterns/utilities.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/device_updates.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPULoop.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPUMemory.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/GPURegions.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/gpu_pattern_detector.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/simple_gpu_patterns/utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/alias_detection.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/classes.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/filter.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/postprocessor.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/preprocessor.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/auxiliary.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/barriers.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/data_sharing_clauses.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/dependency_clauses.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/suggesters/tasks.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/pattern_detectors/task_parallelism/tp_utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/plugins/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/plugins/pipeline.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_explorer/test/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/CodeGenerator.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/CodeGeneratorArguments.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/ContentBuffer.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/Enums.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/Line.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/Pragma.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/CodeGenerator/classes/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/ConfigProvider/assets/.gitignore +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/JSONHandler/JSONHandler.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/JSONHandler/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/diff_modifications.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/initialize.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/load.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/LineMapping/save.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/MemoryRegions/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/MemoryRegions/utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/apply.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/clear.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/list.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/load.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/patch_applicator.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchApplicator/rollback.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/diffs.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatchGenerator/from_optimizer_output.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PathManagement/PathManagement.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PathManagement/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/PatternIdManagement/unique_pattern_id.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/CostModel.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/DataTransfer/DataTransferCosts.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/DataTransfer/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/CostModels/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/DataTransfers/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/DelaunayInterpolatedMicrobench.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/ExtrapInterpolatedMicrobench.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/MicrobenchParser.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Microbench/utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/DataAccesses/CalculateUpdates.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/DataAccesses/FromCUs.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/DataAccesses/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/PETParser/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/UpdateOptimization/LoopInitializationUpdates.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Variables/ExperimentUtils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/Variables/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/bindings/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/bindings/utilities.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/ContextObjectUtils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/context/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/ChildEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/DataFlowEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/GenericEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/MutuallyExclusiveEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/OptionEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/RequirementEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/SuccessorEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/TemporaryEdge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/edges/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/enums/Distributions.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/enums/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextMerge.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextNode.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextRestore.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextSave.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshot.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/ContextSnapshotPop.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/FunctionRoot.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/GenericNode.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/Loop.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/Workload.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/nodes/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/DeviceTypeEnum.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/system/devices/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/types/Aliases.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/classes/types/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/plotting/CostModels.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/plotting/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/presentation/ChoiceDetails.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/presentation/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/queries/ValueTableQuery.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/queries/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/widgets/ScrollableFrame.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/gui/widgets/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/scheduling/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/scheduling/workload_delta.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/importers/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/suggestions/optimizers/main.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/RandomSamples.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/GlobalOptimization/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/LocalOptimization/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/optimization/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/simple_utilities.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/visualization/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/visualization/plotting.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/discopop_optimizer/utilities/visualization/update_graph.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/version/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/global_data/version/utils.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/py.typed +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/DetectionResult.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/discopop_library/result_classes/__init__.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/setup.cfg +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/setup.py +0 -0
- {discopop-3.1.1 → discopop-3.2.1}/test/__init__.py +0 -0
- {discopop-3.1.1/test/do_all → discopop-3.2.1/test/end_to_end}/__init__.py +0 -0
- {discopop-3.1.1/test/do_all/daxpy → discopop-3.2.1/test/end_to_end/do_all}/__init__.py +0 -0
- {discopop-3.1.1/test/optimizer → discopop-3.2.1/test/end_to_end/do_all/backwards_array_access}/__init__.py +0 -0
- {discopop-3.1.1/test/optimizer/loop_collapse → discopop-3.2.1/test/end_to_end/do_all/calls}/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {discopop-3.1.1/test/utils → discopop-3.2.1/test/end_to_end/do_all/calls/preventing}/__init__.py +0 -0
- {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.
|
|
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
|
|
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
|
|
32
|
-
For a brief introduction
|
|
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
|
|
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.
|
|
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/
|
|
269
|
-
test/do_all/
|
|
270
|
-
test/do_all/
|
|
271
|
-
test/
|
|
272
|
-
test/
|
|
273
|
-
test/
|
|
274
|
-
test/
|
|
275
|
-
test/
|
|
276
|
-
test/
|
|
277
|
-
test/
|
|
278
|
-
test/
|
|
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
|
-
|
|
163
|
-
|
|
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
|
|
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
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
for
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
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
|
|