Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Deterministic benchmark for linkage.m optimization
- addpath ("inst");
- sizes = [50, 100, 200, 400, 600];
- methods = {"single", "complete", "average", "weighted"};
- num_runs = 5;
- printf ("=== Linkage Benchmark ===\n\n");
- results = {};
- idx = 1;
- for n = sizes
- rand ("seed", 12345);
- X = rand (n, 5);
- for m = 1:length (methods)
- method = methods{m};
- orig_times = zeros (1, num_runs);
- for run = 1:num_runs
- tic;
- Z1 = linkage_original (X, method);
- orig_times(run) = toc;
- endfor
- orig_best = min (orig_times);
- opt_times = zeros (1, num_runs);
- for run = 1:num_runs
- tic;
- Z2 = linkage (X, method);
- opt_times(run) = toc;
- endfor
- opt_best = min (opt_times);
- err = norm (Z1 - Z2);
- if (err > 1e-12)
- printf ("ERROR: n=%d, %s - diff=%.2e\n", n, method, err);
- endif
- speedup = orig_best / opt_best;
- results{idx, 1} = n;
- results{idx, 2} = method;
- results{idx, 3} = orig_best;
- results{idx, 4} = opt_best;
- results{idx, 5} = speedup;
- idx += 1;
- printf ("n=%3d, %s: orig=%.4fs, opt=%.4fs, speedup=%.2fx\n", ...
- n, method, orig_best, opt_best, speedup);
- endfor
- endfor
- fid = fopen ("linkage_benchmark_results.csv", "w");
- fprintf (fid, "n,method,original,optimized,speedup\n");
- for i = 1:size (results, 1)
- fprintf (fid, "%d,%s,%.6f,%.6f,%.2f\n", ...
- results{i,1}, results{i,2}, results{i,3}, results{i,4}, results{i,5});
- endfor
- fclose (fid);
- speedups = cell2mat (results(:, 5));
- printf ("\n=== Summary ===\n");
- printf ("Average speedup: %.2fx\n", mean (speedups));
- printf ("Min: %.2fx, Max: %.2fx\n", min (speedups), max (speedups));
Advertisement
Add Comment
Please, Sign In to add comment