@@ -18,9 +18,9 @@ umfpack_control = SparseArrays.UMFPACK.get_umfpack_control(Float64, Int64) # rea
1818umfpack_control[SparseArrays. UMFPACK. JL_UMFPACK_IRSTEP] = 2.0 # reenable iterative refinement (2 is UMFPACK default max iterative refinement steps)
1919
2020solvers = OrderedDict (
21- " Default " => (A, b) -> (A \ b),
22- " UMFPACK" => (A, b) -> lu (A; control = umfpack_control) \ b,
23- " Generated" => (A, b) -> proposed_fn (A, b)
21+ " UMFPACK (Baseline Direct Solve) " => (A, b) -> (A \ b),
22+ " UMFPACK + Iterative Refinement " => (A, b) -> lu (A; control = umfpack_control) \ b,
23+ " SmartSolve- Generated Solver " => (A, b) -> proposed_fn (A, b)
2424)
2525
2626# Store results for plotting
@@ -52,7 +52,7 @@ for sparsity in sparsity_levels
5252 try
5353 bench = @benchmark begin
5454 x = $ (solver_fn)($ A, $ b_bench)
55- end seconds = 5 samples = 10
55+ end
5656
5757 time_ms = median (bench. times) / 1e9 # Convert to s
5858
@@ -67,20 +67,22 @@ for sparsity in sparsity_levels
6767 println (" Error during benchmark: $e " )
6868 end
6969 end
70+
71+ GC. gc ()
7072end
7173
7274# Create error-vs-time plot
7375p = plot (
7476 size= (800 , 800 ),
7577 # legend=:topright,
76- legend= :bottomleft ,
78+ legend= :topleft ,
7779 xlabel= " Time (s)" ,
7880 ylabel= " Relative residual: ||Ax - b||₂ / ||b||₂" ,
7981 # xscale=:log10,
8082 yscale= :log10 ,
8183 guidefontsize= 22 ,# 18,
8284 tickfontsize= 20 , # 16,
83- legendfontsize= 18 , # 14,
85+ legendfontsize= 14 , # 14,
8486 margin= 5 * Plots. mm,
8587 framestyle= :box ,
8688 title= " Random Matrices of Size $(N) x$(N) ,\n Varying Sparsity Levels (ρ) and\n CPU Solvers" ,
@@ -92,10 +94,10 @@ p = plot(
9294# # Sparsity shapes
9395marker_map_sparsity = OrderedDict (0.1 => :circle , 0.5 => :square , 0.9 => :utriangle )
9496# # Solver color shades
95- color_map_solver = OrderedDict ( " Default " => :red , " UMFPACK " => :blue , " Generated " => :green )
97+ colors = [ :red , :blue , :green ]
9698
9799# Plot each point individually so marker shape shows sparsity and color shows solver.
98- for solver_name in keys (solvers)
100+ for (i, solver_name) in enumerate ( keys (solvers) )
99101 for sparsity in sparsity_levels
100102 if sparsity in keys (results) && solver_name in keys (results[sparsity])
101103 t = results[sparsity][solver_name]. time
@@ -104,7 +106,7 @@ for solver_name in keys(solvers)
104106 label= " " ,
105107 marker= marker_map_sparsity[sparsity],
106108 markersize= 15 ,
107- color= color_map_solver[solver_name ],
109+ color= colors[i ],
108110 markerstrokecolor= :black ,
109111 markerstrokewidth= 0.0 ,# 0.8,
110112 alpha= 0.45 )
@@ -113,13 +115,13 @@ for solver_name in keys(solvers)
113115end
114116
115117# Create a combined legend
116- for solver_name in keys (solvers)
118+ for (i, solver_name) in enumerate ( keys (solvers) )
117119 for s in sparsity_levels
118120 lbl = " $(solver_name) , ρ:$(s) "
119121 scatter! (p, [NaN ], [NaN ]; label= lbl,
120122 marker= marker_map_sparsity[s],
121123 markersize= 15 ,
122- color= color_map_solver[solver_name ],
124+ color= colors[i ],
123125 markerstrokecolor= :black ,
124126 markerstrokewidth= 0.0 ,
125127 alpha= 0.45 )
0 commit comments