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