Now targeting the correct branches Co-authored-by: Rubydragon <anton.reinhard@proton.me> Reviewed-on: #12
213 lines
4.8 KiB
Julia
213 lines
4.8 KiB
Julia
"""
|
|
MetagraphOptimization
|
|
|
|
A module containing tools to work on DAGs.
|
|
"""
|
|
module MetagraphOptimization
|
|
|
|
using QEDbase
|
|
using QEDcore
|
|
using QEDprocesses
|
|
|
|
# graph types
|
|
export DAG
|
|
export Node
|
|
export Edge
|
|
export ComputeTaskNode
|
|
export DataTaskNode
|
|
export AbstractTask
|
|
export AbstractComputeTask
|
|
export AbstractDataTask
|
|
export DataTask
|
|
export FusedComputeTask
|
|
export PossibleOperations
|
|
export GraphProperties
|
|
|
|
# graph functions
|
|
export make_node
|
|
export make_edge
|
|
export insert_node
|
|
export insert_edge
|
|
export is_entry_node
|
|
export is_exit_node
|
|
export parents
|
|
export children
|
|
export compute
|
|
export data
|
|
export compute_effort
|
|
export task
|
|
export get_properties
|
|
export get_exit_node
|
|
export operation_stack_length
|
|
export is_valid, is_scheduled
|
|
|
|
# graph operation related
|
|
export Operation
|
|
export AppliedOperation
|
|
export NodeFusion
|
|
export NodeReduction
|
|
export NodeSplit
|
|
export push_operation!
|
|
export pop_operation!
|
|
export can_pop
|
|
export reset_graph!
|
|
export get_operations
|
|
|
|
# ABC model
|
|
export ParticleValue
|
|
export ParticleA, ParticleB, ParticleC
|
|
export ABCParticle, ABCProcessDescription, ABCProcessInput, ABCModel
|
|
export ComputeTaskABC_P
|
|
export ComputeTaskABC_S1
|
|
export ComputeTaskABC_S2
|
|
export ComputeTaskABC_V
|
|
export ComputeTaskABC_U
|
|
export ComputeTaskABC_Sum
|
|
|
|
# QED model
|
|
export FeynmanDiagram, FeynmanVertex, FeynmanTie, FeynmanParticle
|
|
export GenericQEDProcess, QEDModel
|
|
export ComputeTaskQED_P
|
|
export ComputeTaskQED_S1
|
|
export ComputeTaskQED_S2
|
|
export ComputeTaskQED_V
|
|
export ComputeTaskQED_U
|
|
export ComputeTaskQED_Sum
|
|
export gen_graph
|
|
|
|
# code generation related
|
|
export execute
|
|
export parse_dag, parse_process
|
|
export gen_process_input
|
|
export get_compute_function, get_cuda_kernel
|
|
export gen_tape, execute_tape
|
|
|
|
# estimator
|
|
export cost_type, graph_cost, operation_effect
|
|
export GlobalMetricEstimator, CDCost
|
|
|
|
# optimization
|
|
export AbstractOptimizer, GreedyOptimizer, RandomWalkOptimizer
|
|
export ReductionOptimizer, SplitOptimizer, FusionOptimizer
|
|
export optimize_step!, optimize!
|
|
export fixpoint_reached, optimize_to_fixpoint!
|
|
|
|
# machine info
|
|
export Machine
|
|
export get_machine_info
|
|
|
|
export ==, in, show, isempty, delete!, length
|
|
|
|
export bytes_to_human_readable
|
|
|
|
import Base.length
|
|
import Base.show
|
|
import Base.==
|
|
import Base.+
|
|
import Base.-
|
|
import Base.in
|
|
import Base.copy
|
|
import Base.isempty
|
|
import Base.delete!
|
|
import Base.insert!
|
|
import Base.collect
|
|
|
|
include("QEDprocesses_patch.jl")
|
|
|
|
include("devices/interface.jl")
|
|
include("task/type.jl")
|
|
include("node/type.jl")
|
|
include("diff/type.jl")
|
|
include("properties/type.jl")
|
|
include("operation/type.jl")
|
|
include("graph/type.jl")
|
|
include("scheduler/type.jl")
|
|
|
|
include("trie.jl")
|
|
include("utility.jl")
|
|
|
|
include("diff/print.jl")
|
|
include("diff/properties.jl")
|
|
|
|
include("graph/compare.jl")
|
|
include("graph/interface.jl")
|
|
include("graph/mute.jl")
|
|
include("graph/print.jl")
|
|
include("graph/properties.jl")
|
|
include("graph/validate.jl")
|
|
|
|
include("node/compare.jl")
|
|
include("node/create.jl")
|
|
include("node/print.jl")
|
|
include("node/properties.jl")
|
|
include("node/validate.jl")
|
|
|
|
include("operation/utility.jl")
|
|
include("operation/iterate.jl")
|
|
include("operation/apply.jl")
|
|
include("operation/clean.jl")
|
|
include("operation/find.jl")
|
|
include("operation/get.jl")
|
|
include("operation/print.jl")
|
|
include("operation/validate.jl")
|
|
|
|
include("properties/create.jl")
|
|
include("properties/utility.jl")
|
|
|
|
include("task/create.jl")
|
|
include("task/compare.jl")
|
|
include("task/compute.jl")
|
|
include("task/properties.jl")
|
|
|
|
include("estimator/interface.jl")
|
|
include("estimator/global_metric.jl")
|
|
|
|
include("optimization/interface.jl")
|
|
include("optimization/greedy.jl")
|
|
include("optimization/random_walk.jl")
|
|
include("optimization/reduce.jl")
|
|
include("optimization/fuse.jl")
|
|
include("optimization/split.jl")
|
|
|
|
include("models/interface.jl")
|
|
include("models/print.jl")
|
|
|
|
include("models/physics_models/interface.jl")
|
|
|
|
#=
|
|
include("models/physics_models/abc/types.jl")
|
|
include("models/physics_models/abc/particle.jl")
|
|
include("models/physics_models/abc/compute.jl")
|
|
include("models/physics_models/abc/create.jl")
|
|
include("models/physics_models/abc/properties.jl")
|
|
include("models/physics_models/abc/parse.jl")
|
|
include("models/physics_models/abc/print.jl")
|
|
=#
|
|
|
|
include("models/physics_models/qed/types.jl")
|
|
include("models/physics_models/qed/particle.jl")
|
|
include("models/physics_models/qed/diagrams.jl")
|
|
include("models/physics_models/qed/compute.jl")
|
|
include("models/physics_models/qed/create.jl")
|
|
include("models/physics_models/qed/properties.jl")
|
|
include("models/physics_models/qed/parse.jl")
|
|
include("models/physics_models/qed/print.jl")
|
|
|
|
include("devices/measure.jl")
|
|
include("devices/detect.jl")
|
|
include("devices/impl.jl")
|
|
|
|
include("devices/numa/impl.jl")
|
|
include("devices/cuda/impl.jl")
|
|
include("devices/rocm/impl.jl")
|
|
#include("devices/oneapi/impl.jl")
|
|
|
|
include("scheduler/interface.jl")
|
|
include("scheduler/greedy.jl")
|
|
|
|
include("code_gen/type.jl")
|
|
include("code_gen/tape_machine.jl")
|
|
include("code_gen/function.jl")
|
|
|
|
end # module MetagraphOptimization
|