Consider
julia> using LinearAlgebra, SparseArrays;
julia> (g,_)=graph_sastre_exp(3);
julia> n=500; A=spdiagm(-1 => 1:n, 1 => 1:n);
Problem 1: eval_graph does not work:
julia> eval_graph(g,A)
ERROR: UndefVarError: `SparseMatrixCSC` not defined
Stacktrace:
[1] init_vals_eval_graph!(graph::Compgraph{Float64}, x::SparseMatrixCSC{Int64, Int64}, vals::Nothing, input::Symbol)
@ GraphMatFun ~/.julia/packages/GraphMatFun/3g8TS/src/eval.jl:114
[2] eval_graph(graph::Compgraph{Float64}, x::SparseMatrixCSC{Int64, Int64}; vals::Nothing, input::Symbol, output::Int64, comporder::Nothing)
@ GraphMatFun ~/.julia/packages/GraphMatFun/3g8TS/src/eval.jl:49
[3] eval_graph(graph::Compgraph{Float64}, x::SparseMatrixCSC{Int64, Int64})
@ GraphMatFun ~/.julia/packages/GraphMatFun/3g8TS/src/eval.jl:41
[4] top-level scope
@ REPL[26]:1
Problem 2: Generated code does not work efficiently.
julia> gen_code("myfun.jl",g);
julia> include("myfun.jl");
julia> @btime dummy(A)
328.665 ms (70 allocations: 1.40 MiB)
julia> @btime A*A*A*A;
50.880 μs (19 allocations: 182.45 KiB)
Since g has three multiplications they should be essentially the same CPU-time. It's because of memory allocation. Not sure we can think of recycling memory slots as the current generated code is doing since the sparsity pattern will change.
Consider
Problem 1:
eval_graphdoes not work:Problem 2: Generated code does not work efficiently.
Since
ghas three multiplications they should be essentially the same CPU-time. It's because of memory allocation. Not sure we can think of recycling memory slots as the current generated code is doing since the sparsity pattern will change.