From f0238cfb6997c4acfc2bd200de7295f3fa36968f Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 3 Mar 2019 21:09:10 +0100 Subject: don't index Eigen --- eigen/bench/BenchSparseUtil.h | 149 ---- eigen/bench/BenchTimer.h | 195 ----- eigen/bench/BenchUtil.h | 92 --- eigen/bench/README.txt | 55 -- eigen/bench/analyze-blocking-sizes.cpp | 876 --------------------- eigen/bench/basicbench.cxxlist | 28 - eigen/bench/basicbenchmark.cpp | 35 - eigen/bench/basicbenchmark.h | 63 -- eigen/bench/benchBlasGemm.cpp | 219 ------ eigen/bench/benchCholesky.cpp | 142 ---- eigen/bench/benchEigenSolver.cpp | 212 ----- eigen/bench/benchFFT.cpp | 115 --- eigen/bench/benchGeometry.cpp | 134 ---- eigen/bench/benchVecAdd.cpp | 135 ---- eigen/bench/bench_gemm.cpp | 340 -------- eigen/bench/bench_multi_compilers.sh | 28 - eigen/bench/bench_norm.cpp | 360 --------- eigen/bench/bench_reverse.cpp | 84 -- eigen/bench/bench_sum.cpp | 18 - eigen/bench/bench_unrolling | 12 - eigen/bench/benchmark-blocking-sizes.cpp | 677 ---------------- eigen/bench/benchmark.cpp | 39 - eigen/bench/benchmarkSlice.cpp | 38 - eigen/bench/benchmarkX.cpp | 36 - eigen/bench/benchmarkXcwise.cpp | 35 - eigen/bench/benchmark_suite | 18 - eigen/bench/btl/CMakeLists.txt | 107 --- eigen/bench/btl/COPYING | 340 -------- eigen/bench/btl/README | 154 ---- eigen/bench/btl/actions/action_aat_product.hh | 145 ---- eigen/bench/btl/actions/action_ata_product.hh | 145 ---- eigen/bench/btl/actions/action_atv_product.hh | 134 ---- eigen/bench/btl/actions/action_axpby.hh | 127 --- eigen/bench/btl/actions/action_axpy.hh | 139 ---- eigen/bench/btl/actions/action_cholesky.hh | 128 --- eigen/bench/btl/actions/action_ger.hh | 128 --- eigen/bench/btl/actions/action_hessenberg.hh | 233 ------ eigen/bench/btl/actions/action_lu_decomp.hh | 124 --- eigen/bench/btl/actions/action_lu_solve.hh | 136 ---- .../btl/actions/action_matrix_matrix_product.hh | 150 ---- .../actions/action_matrix_matrix_product_bis.hh | 152 ---- .../btl/actions/action_matrix_vector_product.hh | 153 ---- eigen/bench/btl/actions/action_partial_lu.hh | 125 --- eigen/bench/btl/actions/action_rot.hh | 116 --- eigen/bench/btl/actions/action_symv.hh | 139 ---- eigen/bench/btl/actions/action_syr2.hh | 133 ---- eigen/bench/btl/actions/action_trisolve.hh | 137 ---- eigen/bench/btl/actions/action_trisolve_matrix.hh | 165 ---- eigen/bench/btl/actions/action_trmm.hh | 165 ---- eigen/bench/btl/actions/basic_actions.hh | 21 - eigen/bench/btl/cmake/FindACML.cmake | 51 -- eigen/bench/btl/cmake/FindATLAS.cmake | 31 - eigen/bench/btl/cmake/FindBLAZE.cmake | 31 - eigen/bench/btl/cmake/FindBlitz.cmake | 40 - eigen/bench/btl/cmake/FindCBLAS.cmake | 35 - eigen/bench/btl/cmake/FindGMM.cmake | 17 - eigen/bench/btl/cmake/FindMKL.cmake | 65 -- eigen/bench/btl/cmake/FindMTL4.cmake | 31 - eigen/bench/btl/cmake/FindOPENBLAS.cmake | 17 - .../btl/cmake/FindPackageHandleStandardArgs.cmake | 60 -- eigen/bench/btl/cmake/FindTvmet.cmake | 32 - .../btl/cmake/MacroOptionalAddSubdirectory.cmake | 31 - eigen/bench/btl/data/CMakeLists.txt | 32 - eigen/bench/btl/data/action_settings.txt | 19 - eigen/bench/btl/data/gnuplot_common_settings.hh | 87 -- eigen/bench/btl/data/go_mean | 58 -- eigen/bench/btl/data/mean.cxx | 182 ----- eigen/bench/btl/data/mk_gnuplot_script.sh | 68 -- eigen/bench/btl/data/mk_mean_script.sh | 52 -- eigen/bench/btl/data/mk_new_gnuplot.sh | 54 -- eigen/bench/btl/data/perlib_plot_settings.txt | 16 - eigen/bench/btl/data/regularize.cxx | 131 --- eigen/bench/btl/data/smooth.cxx | 198 ----- eigen/bench/btl/data/smooth_all.sh | 68 -- eigen/bench/btl/generic_bench/bench.hh | 168 ---- eigen/bench/btl/generic_bench/bench_parameter.hh | 53 -- eigen/bench/btl/generic_bench/btl.hh | 242 ------ .../bench/btl/generic_bench/init/init_function.hh | 54 -- eigen/bench/btl/generic_bench/init/init_matrix.hh | 64 -- eigen/bench/btl/generic_bench/init/init_vector.hh | 37 - .../bench/btl/generic_bench/static/bench_static.hh | 80 -- .../generic_bench/static/intel_bench_fixed_size.hh | 66 -- .../generic_bench/static/static_size_generator.hh | 57 -- .../btl/generic_bench/timers/STL_perf_analyzer.hh | 82 -- eigen/bench/btl/generic_bench/timers/STL_timer.hh | 78 -- .../generic_bench/timers/mixed_perf_analyzer.hh | 73 -- .../generic_bench/timers/portable_perf_analyzer.hh | 103 --- .../timers/portable_perf_analyzer_old.hh | 134 ---- .../btl/generic_bench/timers/portable_timer.hh | 187 ----- .../btl/generic_bench/timers/x86_perf_analyzer.hh | 108 --- eigen/bench/btl/generic_bench/timers/x86_timer.hh | 246 ------ .../bench/btl/generic_bench/utils/size_lin_log.hh | 70 -- eigen/bench/btl/generic_bench/utils/size_log.hh | 54 -- eigen/bench/btl/generic_bench/utils/utilities.h | 90 --- eigen/bench/btl/generic_bench/utils/xy_file.hh | 75 -- eigen/bench/btl/libs/BLAS/CMakeLists.txt | 47 -- eigen/bench/btl/libs/BLAS/blas.h | 675 ---------------- eigen/bench/btl/libs/BLAS/blas_interface.hh | 83 -- eigen/bench/btl/libs/BLAS/blas_interface_impl.hh | 147 ---- eigen/bench/btl/libs/BLAS/c_interface_base.h | 73 -- eigen/bench/btl/libs/BLAS/main.cpp | 73 -- eigen/bench/btl/libs/STL/CMakeLists.txt | 2 - eigen/bench/btl/libs/STL/STL_interface.hh | 244 ------ eigen/bench/btl/libs/STL/main.cpp | 42 - eigen/bench/btl/libs/blaze/CMakeLists.txt | 13 - eigen/bench/btl/libs/blaze/blaze_interface.hh | 140 ---- eigen/bench/btl/libs/blaze/main.cpp | 40 - eigen/bench/btl/libs/blitz/CMakeLists.txt | 17 - .../btl/libs/blitz/blitz_LU_solve_interface.hh | 192 ----- eigen/bench/btl/libs/blitz/blitz_interface.hh | 147 ---- eigen/bench/btl/libs/blitz/btl_blitz.cpp | 51 -- eigen/bench/btl/libs/blitz/btl_tiny_blitz.cpp | 38 - eigen/bench/btl/libs/blitz/tiny_blitz_interface.hh | 106 --- eigen/bench/btl/libs/eigen2/CMakeLists.txt | 19 - eigen/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp | 46 -- eigen/bench/btl/libs/eigen2/eigen2_interface.hh | 168 ---- eigen/bench/btl/libs/eigen2/main_adv.cpp | 44 -- eigen/bench/btl/libs/eigen2/main_linear.cpp | 34 - eigen/bench/btl/libs/eigen2/main_matmat.cpp | 35 - eigen/bench/btl/libs/eigen2/main_vecmat.cpp | 36 - eigen/bench/btl/libs/eigen3/CMakeLists.txt | 65 -- eigen/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp | 46 -- eigen/bench/btl/libs/eigen3/eigen3_interface.hh | 240 ------ eigen/bench/btl/libs/eigen3/main_adv.cpp | 44 -- eigen/bench/btl/libs/eigen3/main_linear.cpp | 35 - eigen/bench/btl/libs/eigen3/main_matmat.cpp | 35 - eigen/bench/btl/libs/eigen3/main_vecmat.cpp | 36 - eigen/bench/btl/libs/gmm/CMakeLists.txt | 6 - eigen/bench/btl/libs/gmm/gmm_LU_solve_interface.hh | 192 ----- eigen/bench/btl/libs/gmm/gmm_interface.hh | 144 ---- eigen/bench/btl/libs/gmm/main.cpp | 51 -- eigen/bench/btl/libs/mtl4/.kdbgrc.main | 12 - eigen/bench/btl/libs/mtl4/CMakeLists.txt | 6 - eigen/bench/btl/libs/mtl4/main.cpp | 46 -- .../bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh | 192 ----- eigen/bench/btl/libs/mtl4/mtl4_interface.hh | 144 ---- eigen/bench/btl/libs/tensors/CMakeLists.txt | 44 -- eigen/bench/btl/libs/tensors/main_linear.cpp | 23 - eigen/bench/btl/libs/tensors/main_matmat.cpp | 21 - eigen/bench/btl/libs/tensors/main_vecmat.cpp | 21 - eigen/bench/btl/libs/tensors/tensor_interface.hh | 105 --- eigen/bench/btl/libs/tvmet/CMakeLists.txt | 6 - eigen/bench/btl/libs/tvmet/main.cpp | 40 - eigen/bench/btl/libs/tvmet/tvmet_interface.hh | 104 --- eigen/bench/btl/libs/ublas/CMakeLists.txt | 7 - eigen/bench/btl/libs/ublas/main.cpp | 44 -- eigen/bench/btl/libs/ublas/ublas_interface.hh | 141 ---- eigen/bench/check_cache_queries.cpp | 101 --- eigen/bench/dense_solvers.cpp | 186 ----- eigen/bench/eig33.cpp | 195 ----- eigen/bench/geometry.cpp | 126 --- eigen/bench/perf_monitoring/gemm/changesets.txt | 61 -- eigen/bench/perf_monitoring/gemm/gemm.cpp | 67 -- eigen/bench/perf_monitoring/gemm/gemm_settings.txt | 15 - eigen/bench/perf_monitoring/gemm/lazy_gemm.cpp | 98 --- .../perf_monitoring/gemm/lazy_gemm_settings.txt | 15 - eigen/bench/perf_monitoring/gemm/make_plot.sh | 38 - eigen/bench/perf_monitoring/gemm/run.sh | 156 ---- eigen/bench/product_threshold.cpp | 143 ---- eigen/bench/quat_slerp.cpp | 247 ------ eigen/bench/quatmul.cpp | 47 -- eigen/bench/sparse_cholesky.cpp | 216 ----- eigen/bench/sparse_dense_product.cpp | 187 ----- eigen/bench/sparse_lu.cpp | 132 ---- eigen/bench/sparse_product.cpp | 323 -------- eigen/bench/sparse_randomsetter.cpp | 125 --- eigen/bench/sparse_setter.cpp | 485 ------------ eigen/bench/sparse_transpose.cpp | 104 --- eigen/bench/sparse_trisolver.cpp | 220 ------ eigen/bench/spbench/CMakeLists.txt | 85 -- eigen/bench/spbench/sp_solver.cpp | 125 --- eigen/bench/spbench/spbench.dtd | 31 - eigen/bench/spbench/spbenchsolver.cpp | 87 -- eigen/bench/spbench/spbenchsolver.h | 554 ------------- eigen/bench/spbench/spbenchstyle.h | 95 --- eigen/bench/spbench/test_sparseLU.cpp | 93 --- eigen/bench/spmv.cpp | 233 ------ eigen/bench/tensors/README | 21 - eigen/bench/tensors/benchmark.h | 49 -- eigen/bench/tensors/benchmark_main.cc | 237 ------ eigen/bench/tensors/contraction_benchmarks_cpu.cc | 39 - eigen/bench/tensors/tensor_benchmarks.h | 478 ----------- eigen/bench/tensors/tensor_benchmarks_cpu.cc | 168 ---- eigen/bench/tensors/tensor_benchmarks_fp16_gpu.cu | 77 -- eigen/bench/tensors/tensor_benchmarks_gpu.cu | 75 -- eigen/bench/tensors/tensor_benchmarks_sycl.cc | 37 - eigen/bench/vdw_new.cpp | 56 -- 187 files changed, 21347 deletions(-) delete mode 100644 eigen/bench/BenchSparseUtil.h delete mode 100644 eigen/bench/BenchTimer.h delete mode 100644 eigen/bench/BenchUtil.h delete mode 100644 eigen/bench/README.txt delete mode 100644 eigen/bench/analyze-blocking-sizes.cpp delete mode 100644 eigen/bench/basicbench.cxxlist delete mode 100644 eigen/bench/basicbenchmark.cpp delete mode 100644 eigen/bench/basicbenchmark.h delete mode 100644 eigen/bench/benchBlasGemm.cpp delete mode 100644 eigen/bench/benchCholesky.cpp delete mode 100644 eigen/bench/benchEigenSolver.cpp delete mode 100644 eigen/bench/benchFFT.cpp delete mode 100644 eigen/bench/benchGeometry.cpp delete mode 100644 eigen/bench/benchVecAdd.cpp delete mode 100644 eigen/bench/bench_gemm.cpp delete mode 100644 eigen/bench/bench_multi_compilers.sh delete mode 100644 eigen/bench/bench_norm.cpp delete mode 100644 eigen/bench/bench_reverse.cpp delete mode 100644 eigen/bench/bench_sum.cpp delete mode 100644 eigen/bench/bench_unrolling delete mode 100644 eigen/bench/benchmark-blocking-sizes.cpp delete mode 100644 eigen/bench/benchmark.cpp delete mode 100644 eigen/bench/benchmarkSlice.cpp delete mode 100644 eigen/bench/benchmarkX.cpp delete mode 100644 eigen/bench/benchmarkXcwise.cpp delete mode 100644 eigen/bench/benchmark_suite delete mode 100644 eigen/bench/btl/CMakeLists.txt delete mode 100644 eigen/bench/btl/COPYING delete mode 100644 eigen/bench/btl/README delete mode 100644 eigen/bench/btl/actions/action_aat_product.hh delete mode 100644 eigen/bench/btl/actions/action_ata_product.hh delete mode 100644 eigen/bench/btl/actions/action_atv_product.hh delete mode 100644 eigen/bench/btl/actions/action_axpby.hh delete mode 100644 eigen/bench/btl/actions/action_axpy.hh delete mode 100644 eigen/bench/btl/actions/action_cholesky.hh delete mode 100644 eigen/bench/btl/actions/action_ger.hh delete mode 100644 eigen/bench/btl/actions/action_hessenberg.hh delete mode 100644 eigen/bench/btl/actions/action_lu_decomp.hh delete mode 100644 eigen/bench/btl/actions/action_lu_solve.hh delete mode 100644 eigen/bench/btl/actions/action_matrix_matrix_product.hh delete mode 100644 eigen/bench/btl/actions/action_matrix_matrix_product_bis.hh delete mode 100644 eigen/bench/btl/actions/action_matrix_vector_product.hh delete mode 100644 eigen/bench/btl/actions/action_partial_lu.hh delete mode 100644 eigen/bench/btl/actions/action_rot.hh delete mode 100644 eigen/bench/btl/actions/action_symv.hh delete mode 100644 eigen/bench/btl/actions/action_syr2.hh delete mode 100644 eigen/bench/btl/actions/action_trisolve.hh delete mode 100644 eigen/bench/btl/actions/action_trisolve_matrix.hh delete mode 100644 eigen/bench/btl/actions/action_trmm.hh delete mode 100644 eigen/bench/btl/actions/basic_actions.hh delete mode 100644 eigen/bench/btl/cmake/FindACML.cmake delete mode 100644 eigen/bench/btl/cmake/FindATLAS.cmake delete mode 100644 eigen/bench/btl/cmake/FindBLAZE.cmake delete mode 100644 eigen/bench/btl/cmake/FindBlitz.cmake delete mode 100644 eigen/bench/btl/cmake/FindCBLAS.cmake delete mode 100644 eigen/bench/btl/cmake/FindGMM.cmake delete mode 100644 eigen/bench/btl/cmake/FindMKL.cmake delete mode 100644 eigen/bench/btl/cmake/FindMTL4.cmake delete mode 100644 eigen/bench/btl/cmake/FindOPENBLAS.cmake delete mode 100644 eigen/bench/btl/cmake/FindPackageHandleStandardArgs.cmake delete mode 100644 eigen/bench/btl/cmake/FindTvmet.cmake delete mode 100644 eigen/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake delete mode 100644 eigen/bench/btl/data/CMakeLists.txt delete mode 100644 eigen/bench/btl/data/action_settings.txt delete mode 100644 eigen/bench/btl/data/gnuplot_common_settings.hh delete mode 100644 eigen/bench/btl/data/go_mean delete mode 100644 eigen/bench/btl/data/mean.cxx delete mode 100644 eigen/bench/btl/data/mk_gnuplot_script.sh delete mode 100644 eigen/bench/btl/data/mk_mean_script.sh delete mode 100644 eigen/bench/btl/data/mk_new_gnuplot.sh delete mode 100644 eigen/bench/btl/data/perlib_plot_settings.txt delete mode 100644 eigen/bench/btl/data/regularize.cxx delete mode 100644 eigen/bench/btl/data/smooth.cxx delete mode 100644 eigen/bench/btl/data/smooth_all.sh delete mode 100644 eigen/bench/btl/generic_bench/bench.hh delete mode 100644 eigen/bench/btl/generic_bench/bench_parameter.hh delete mode 100644 eigen/bench/btl/generic_bench/btl.hh delete mode 100644 eigen/bench/btl/generic_bench/init/init_function.hh delete mode 100644 eigen/bench/btl/generic_bench/init/init_matrix.hh delete mode 100644 eigen/bench/btl/generic_bench/init/init_vector.hh delete mode 100644 eigen/bench/btl/generic_bench/static/bench_static.hh delete mode 100644 eigen/bench/btl/generic_bench/static/intel_bench_fixed_size.hh delete mode 100644 eigen/bench/btl/generic_bench/static/static_size_generator.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/STL_perf_analyzer.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/STL_timer.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/portable_perf_analyzer.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/portable_perf_analyzer_old.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/portable_timer.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/x86_perf_analyzer.hh delete mode 100644 eigen/bench/btl/generic_bench/timers/x86_timer.hh delete mode 100644 eigen/bench/btl/generic_bench/utils/size_lin_log.hh delete mode 100644 eigen/bench/btl/generic_bench/utils/size_log.hh delete mode 100644 eigen/bench/btl/generic_bench/utils/utilities.h delete mode 100644 eigen/bench/btl/generic_bench/utils/xy_file.hh delete mode 100644 eigen/bench/btl/libs/BLAS/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/BLAS/blas.h delete mode 100644 eigen/bench/btl/libs/BLAS/blas_interface.hh delete mode 100644 eigen/bench/btl/libs/BLAS/blas_interface_impl.hh delete mode 100644 eigen/bench/btl/libs/BLAS/c_interface_base.h delete mode 100644 eigen/bench/btl/libs/BLAS/main.cpp delete mode 100644 eigen/bench/btl/libs/STL/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/STL/STL_interface.hh delete mode 100644 eigen/bench/btl/libs/STL/main.cpp delete mode 100644 eigen/bench/btl/libs/blaze/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/blaze/blaze_interface.hh delete mode 100644 eigen/bench/btl/libs/blaze/main.cpp delete mode 100644 eigen/bench/btl/libs/blitz/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/blitz/blitz_LU_solve_interface.hh delete mode 100644 eigen/bench/btl/libs/blitz/blitz_interface.hh delete mode 100644 eigen/bench/btl/libs/blitz/btl_blitz.cpp delete mode 100644 eigen/bench/btl/libs/blitz/btl_tiny_blitz.cpp delete mode 100644 eigen/bench/btl/libs/blitz/tiny_blitz_interface.hh delete mode 100644 eigen/bench/btl/libs/eigen2/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/eigen2/btl_tiny_eigen2.cpp delete mode 100644 eigen/bench/btl/libs/eigen2/eigen2_interface.hh delete mode 100644 eigen/bench/btl/libs/eigen2/main_adv.cpp delete mode 100644 eigen/bench/btl/libs/eigen2/main_linear.cpp delete mode 100644 eigen/bench/btl/libs/eigen2/main_matmat.cpp delete mode 100644 eigen/bench/btl/libs/eigen2/main_vecmat.cpp delete mode 100644 eigen/bench/btl/libs/eigen3/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp delete mode 100644 eigen/bench/btl/libs/eigen3/eigen3_interface.hh delete mode 100644 eigen/bench/btl/libs/eigen3/main_adv.cpp delete mode 100644 eigen/bench/btl/libs/eigen3/main_linear.cpp delete mode 100644 eigen/bench/btl/libs/eigen3/main_matmat.cpp delete mode 100644 eigen/bench/btl/libs/eigen3/main_vecmat.cpp delete mode 100644 eigen/bench/btl/libs/gmm/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/gmm/gmm_LU_solve_interface.hh delete mode 100644 eigen/bench/btl/libs/gmm/gmm_interface.hh delete mode 100644 eigen/bench/btl/libs/gmm/main.cpp delete mode 100644 eigen/bench/btl/libs/mtl4/.kdbgrc.main delete mode 100644 eigen/bench/btl/libs/mtl4/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/mtl4/main.cpp delete mode 100644 eigen/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh delete mode 100644 eigen/bench/btl/libs/mtl4/mtl4_interface.hh delete mode 100644 eigen/bench/btl/libs/tensors/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/tensors/main_linear.cpp delete mode 100644 eigen/bench/btl/libs/tensors/main_matmat.cpp delete mode 100644 eigen/bench/btl/libs/tensors/main_vecmat.cpp delete mode 100644 eigen/bench/btl/libs/tensors/tensor_interface.hh delete mode 100644 eigen/bench/btl/libs/tvmet/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/tvmet/main.cpp delete mode 100644 eigen/bench/btl/libs/tvmet/tvmet_interface.hh delete mode 100644 eigen/bench/btl/libs/ublas/CMakeLists.txt delete mode 100644 eigen/bench/btl/libs/ublas/main.cpp delete mode 100644 eigen/bench/btl/libs/ublas/ublas_interface.hh delete mode 100644 eigen/bench/check_cache_queries.cpp delete mode 100644 eigen/bench/dense_solvers.cpp delete mode 100644 eigen/bench/eig33.cpp delete mode 100644 eigen/bench/geometry.cpp delete mode 100644 eigen/bench/perf_monitoring/gemm/changesets.txt delete mode 100644 eigen/bench/perf_monitoring/gemm/gemm.cpp delete mode 100644 eigen/bench/perf_monitoring/gemm/gemm_settings.txt delete mode 100644 eigen/bench/perf_monitoring/gemm/lazy_gemm.cpp delete mode 100644 eigen/bench/perf_monitoring/gemm/lazy_gemm_settings.txt delete mode 100644 eigen/bench/perf_monitoring/gemm/make_plot.sh delete mode 100644 eigen/bench/perf_monitoring/gemm/run.sh delete mode 100644 eigen/bench/product_threshold.cpp delete mode 100644 eigen/bench/quat_slerp.cpp delete mode 100644 eigen/bench/quatmul.cpp delete mode 100644 eigen/bench/sparse_cholesky.cpp delete mode 100644 eigen/bench/sparse_dense_product.cpp delete mode 100644 eigen/bench/sparse_lu.cpp delete mode 100644 eigen/bench/sparse_product.cpp delete mode 100644 eigen/bench/sparse_randomsetter.cpp delete mode 100644 eigen/bench/sparse_setter.cpp delete mode 100644 eigen/bench/sparse_transpose.cpp delete mode 100644 eigen/bench/sparse_trisolver.cpp delete mode 100644 eigen/bench/spbench/CMakeLists.txt delete mode 100644 eigen/bench/spbench/sp_solver.cpp delete mode 100644 eigen/bench/spbench/spbench.dtd delete mode 100644 eigen/bench/spbench/spbenchsolver.cpp delete mode 100644 eigen/bench/spbench/spbenchsolver.h delete mode 100644 eigen/bench/spbench/spbenchstyle.h delete mode 100644 eigen/bench/spbench/test_sparseLU.cpp delete mode 100644 eigen/bench/spmv.cpp delete mode 100644 eigen/bench/tensors/README delete mode 100644 eigen/bench/tensors/benchmark.h delete mode 100644 eigen/bench/tensors/benchmark_main.cc delete mode 100644 eigen/bench/tensors/contraction_benchmarks_cpu.cc delete mode 100644 eigen/bench/tensors/tensor_benchmarks.h delete mode 100644 eigen/bench/tensors/tensor_benchmarks_cpu.cc delete mode 100644 eigen/bench/tensors/tensor_benchmarks_fp16_gpu.cu delete mode 100644 eigen/bench/tensors/tensor_benchmarks_gpu.cu delete mode 100644 eigen/bench/tensors/tensor_benchmarks_sycl.cc delete mode 100644 eigen/bench/vdw_new.cpp (limited to 'eigen/bench') diff --git a/eigen/bench/BenchSparseUtil.h b/eigen/bench/BenchSparseUtil.h deleted file mode 100644 index 13981f6..0000000 --- a/eigen/bench/BenchSparseUtil.h +++ /dev/null @@ -1,149 +0,0 @@ - -#include -#include -#include - -using namespace std; -using namespace Eigen; -using namespace Eigen; - -#ifndef SIZE -#define SIZE 1024 -#endif - -#ifndef DENSITY -#define DENSITY 0.01 -#endif - -#ifndef SCALAR -#define SCALAR double -#endif - -typedef SCALAR Scalar; -typedef Matrix DenseMatrix; -typedef Matrix DenseVector; -typedef SparseMatrix EigenSparseMatrix; - -void fillMatrix(float density, int rows, int cols, EigenSparseMatrix& dst) -{ - dst.reserve(double(rows)*cols*density); - for(int j = 0; j < cols; j++) - { - for(int i = 0; i < rows; i++) - { - Scalar v = (internal::random(0,1) < density) ? internal::random() : 0; - if (v!=0) - dst.insert(i,j) = v; - } - } - dst.finalize(); -} - -void fillMatrix2(int nnzPerCol, int rows, int cols, EigenSparseMatrix& dst) -{ -// std::cout << "alloc " << nnzPerCol*cols << "\n"; - dst.reserve(nnzPerCol*cols); - for(int j = 0; j < cols; j++) - { - std::set aux; - for(int i = 0; i < nnzPerCol; i++) - { - int k = internal::random(0,rows-1); - while (aux.find(k)!=aux.end()) - k = internal::random(0,rows-1); - aux.insert(k); - - dst.insert(k,j) = internal::random(); - } - } - dst.finalize(); -} - -void eiToDense(const EigenSparseMatrix& src, DenseMatrix& dst) -{ - dst.setZero(); - for (int j=0; j GmmSparse; -typedef gmm::col_matrix< gmm::wsvector > GmmDynSparse; -void eiToGmm(const EigenSparseMatrix& src, GmmSparse& dst) -{ - GmmDynSparse tmp(src.rows(), src.cols()); - for (int j=0; j -typedef mtl::compressed2D > MtlSparse; -typedef mtl::compressed2D > MtlSparseRowMajor; -void eiToMtl(const EigenSparseMatrix& src, MtlSparse& dst) -{ - mtl::matrix::inserter ins(dst); - for (int j=0; j -#include -#include -#include -#include -#include -#include -#include - -typedef boost::numeric::ublas::compressed_matrix UBlasSparse; - -void eiToUblas(const EigenSparseMatrix& src, UBlasSparse& dst) -{ - dst.resize(src.rows(), src.cols(), false); - for (int j=0; j -void eiToUblasVec(const EigenType& src, UblasType& dst) -{ - dst.resize(src.size()); - for (int j=0; j -} -#endif diff --git a/eigen/bench/BenchTimer.h b/eigen/bench/BenchTimer.h deleted file mode 100644 index ea28496..0000000 --- a/eigen/bench/BenchTimer.h +++ /dev/null @@ -1,195 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2008-2010 Gael Guennebaud -// Copyright (C) 2009 Benoit Jacob -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#ifndef EIGEN_BENCH_TIMERR_H -#define EIGEN_BENCH_TIMERR_H - -#if defined(_WIN32) || defined(__CYGWIN__) -# ifndef NOMINMAX -# define NOMINMAX -# define EIGEN_BT_UNDEF_NOMINMAX -# endif -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# define EIGEN_BT_UNDEF_WIN32_LEAN_AND_MEAN -# endif -# include -#elif defined(__APPLE__) -#include -#else -# include -#endif - -static void escape(void *p) { - asm volatile("" : : "g"(p) : "memory"); -} - -static void clobber() { - asm volatile("" : : : "memory"); -} - -#include - -namespace Eigen -{ - -enum { - CPU_TIMER = 0, - REAL_TIMER = 1 -}; - -/** Elapsed time timer keeping the best try. - * - * On POSIX platforms we use clock_gettime with CLOCK_PROCESS_CPUTIME_ID. - * On Windows we use QueryPerformanceCounter - * - * Important: on linux, you must link with -lrt - */ -class BenchTimer -{ -public: - - BenchTimer() - { -#if defined(_WIN32) || defined(__CYGWIN__) - LARGE_INTEGER freq; - QueryPerformanceFrequency(&freq); - m_frequency = (double)freq.QuadPart; -#endif - reset(); - } - - ~BenchTimer() {} - - inline void reset() - { - m_bests.fill(1e9); - m_worsts.fill(0); - m_totals.setZero(); - } - inline void start() - { - m_starts[CPU_TIMER] = getCpuTime(); - m_starts[REAL_TIMER] = getRealTime(); - } - inline void stop() - { - m_times[CPU_TIMER] = getCpuTime() - m_starts[CPU_TIMER]; - m_times[REAL_TIMER] = getRealTime() - m_starts[REAL_TIMER]; - #if EIGEN_VERSION_AT_LEAST(2,90,0) - m_bests = m_bests.cwiseMin(m_times); - m_worsts = m_worsts.cwiseMax(m_times); - #else - m_bests(0) = std::min(m_bests(0),m_times(0)); - m_bests(1) = std::min(m_bests(1),m_times(1)); - m_worsts(0) = std::max(m_worsts(0),m_times(0)); - m_worsts(1) = std::max(m_worsts(1),m_times(1)); - #endif - m_totals += m_times; - } - - /** Return the elapsed time in seconds between the last start/stop pair - */ - inline double value(int TIMER = CPU_TIMER) const - { - return m_times[TIMER]; - } - - /** Return the best elapsed time in seconds - */ - inline double best(int TIMER = CPU_TIMER) const - { - return m_bests[TIMER]; - } - - /** Return the worst elapsed time in seconds - */ - inline double worst(int TIMER = CPU_TIMER) const - { - return m_worsts[TIMER]; - } - - /** Return the total elapsed time in seconds. - */ - inline double total(int TIMER = CPU_TIMER) const - { - return m_totals[TIMER]; - } - - inline double getCpuTime() const - { -#ifdef _WIN32 - LARGE_INTEGER query_ticks; - QueryPerformanceCounter(&query_ticks); - return query_ticks.QuadPart/m_frequency; -#elif __APPLE__ - return double(mach_absolute_time())*1e-9; -#else - timespec ts; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); - return double(ts.tv_sec) + 1e-9 * double(ts.tv_nsec); -#endif - } - - inline double getRealTime() const - { -#ifdef _WIN32 - SYSTEMTIME st; - GetSystemTime(&st); - return (double)st.wSecond + 1.e-3 * (double)st.wMilliseconds; -#elif __APPLE__ - return double(mach_absolute_time())*1e-9; -#else - timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); - return double(ts.tv_sec) + 1e-9 * double(ts.tv_nsec); -#endif - } - -protected: -#if defined(_WIN32) || defined(__CYGWIN__) - double m_frequency; -#endif - Vector2d m_starts; - Vector2d m_times; - Vector2d m_bests; - Vector2d m_worsts; - Vector2d m_totals; - -public: - EIGEN_MAKE_ALIGNED_OPERATOR_NEW -}; - -#define BENCH(TIMER,TRIES,REP,CODE) { \ - TIMER.reset(); \ - for(int uglyvarname1=0; uglyvarname1 -#include "BenchTimer.h" - -using namespace std; -using namespace Eigen; - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -template void initMatrix_random(MatrixType& mat) __attribute__((noinline)); -template void initMatrix_random(MatrixType& mat) -{ - mat.setRandom();// = MatrixType::random(mat.rows(), mat.cols()); -} - -template void initMatrix_identity(MatrixType& mat) __attribute__((noinline)); -template void initMatrix_identity(MatrixType& mat) -{ - mat.setIdentity(); -} - -#ifndef __INTEL_COMPILER -#define DISABLE_SSE_EXCEPTIONS() { \ - int aux; \ - asm( \ - "stmxcsr %[aux] \n\t" \ - "orl $32832, %[aux] \n\t" \ - "ldmxcsr %[aux] \n\t" \ - : : [aux] "m" (aux)); \ -} -#else -#define DISABLE_SSE_EXCEPTIONS() -#endif - -#ifdef BENCH_GMM -#include -template -void eiToGmm(const EigenMatrixType& src, GmmMatrixType& dst) -{ - dst.resize(src.rows(),src.cols()); - for (int j=0; j -#include -#include -template -void eiToGsl(const EigenMatrixType& src, gsl_matrix** dst) -{ - for (int j=0; j -#include -template -void eiToUblas(const EigenMatrixType& src, UblasMatrixType& dst) -{ - dst.resize(src.rows(),src.cols()); - for (int j=0; j -void eiToUblasVec(const EigenType& src, UblasType& dst) -{ - dst.resize(src.size()); - for (int j=0; j x0.869674 (2) - double, 128x128: 0.054148s 0.0419669s => x1.29025 (2) - double, 512x512: 0.913799s 0.428533s => x2.13239 (2) - double, 1024x1024: 14.5972s 9.3542s => x1.5605 (2) - - icpc -fast -DNDEBUG -fno-exceptions -no-inline-max-size -openmp - double, fixed-size 4x4: 0.000589848s 0.019949s - double, 32x32: 0.0682781s 0.0449722s => x1.51823 (2) - double, 128x128: 0.0547509s 0.0435519s => x1.25714 (2) - double, 512x512: 0.829436s 0.424438s => x1.9542 (2) - double, 1024x1024: 14.5243s 10.7735s => x1.34815 (2) - - - diff --git a/eigen/bench/analyze-blocking-sizes.cpp b/eigen/bench/analyze-blocking-sizes.cpp deleted file mode 100644 index d563a1d..0000000 --- a/eigen/bench/analyze-blocking-sizes.cpp +++ /dev/null @@ -1,876 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2015 Benoit Jacob -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace std; - -const int default_precision = 4; - -// see --only-cubic-sizes -bool only_cubic_sizes = false; - -// see --dump-tables -bool dump_tables = false; - -uint8_t log2_pot(size_t x) { - size_t l = 0; - while (x >>= 1) l++; - return l; -} - -uint16_t compact_size_triple(size_t k, size_t m, size_t n) -{ - return (log2_pot(k) << 8) | (log2_pot(m) << 4) | log2_pot(n); -} - -// just a helper to store a triple of K,M,N sizes for matrix product -struct size_triple_t -{ - uint16_t k, m, n; - size_triple_t() : k(0), m(0), n(0) {} - size_triple_t(size_t _k, size_t _m, size_t _n) : k(_k), m(_m), n(_n) {} - size_triple_t(const size_triple_t& o) : k(o.k), m(o.m), n(o.n) {} - size_triple_t(uint16_t compact) - { - k = 1 << ((compact & 0xf00) >> 8); - m = 1 << ((compact & 0x0f0) >> 4); - n = 1 << ((compact & 0x00f) >> 0); - } - bool is_cubic() const { return k == m && m == n; } -}; - -ostream& operator<<(ostream& s, const size_triple_t& t) -{ - return s << "(" << t.k << ", " << t.m << ", " << t.n << ")"; -} - -struct inputfile_entry_t -{ - uint16_t product_size; - uint16_t pot_block_size; - size_triple_t nonpot_block_size; - float gflops; -}; - -struct inputfile_t -{ - enum class type_t { - unknown, - all_pot_sizes, - default_sizes - }; - - string filename; - vector entries; - type_t type; - - inputfile_t(const string& fname) - : filename(fname) - , type(type_t::unknown) - { - ifstream stream(filename); - if (!stream.is_open()) { - cerr << "couldn't open input file: " << filename << endl; - exit(1); - } - string line; - while (getline(stream, line)) { - if (line.empty()) continue; - if (line.find("BEGIN MEASUREMENTS ALL POT SIZES") == 0) { - if (type != type_t::unknown) { - cerr << "Input file " << filename << " contains redundant BEGIN MEASUREMENTS lines"; - exit(1); - } - type = type_t::all_pot_sizes; - continue; - } - if (line.find("BEGIN MEASUREMENTS DEFAULT SIZES") == 0) { - if (type != type_t::unknown) { - cerr << "Input file " << filename << " contains redundant BEGIN MEASUREMENTS lines"; - exit(1); - } - type = type_t::default_sizes; - continue; - } - - - if (type == type_t::unknown) { - continue; - } - switch(type) { - case type_t::all_pot_sizes: { - unsigned int product_size, block_size; - float gflops; - int sscanf_result = - sscanf(line.c_str(), "%x %x %f", - &product_size, - &block_size, - &gflops); - if (3 != sscanf_result || - !product_size || - product_size > 0xfff || - !block_size || - block_size > 0xfff || - !isfinite(gflops)) - { - cerr << "ill-formed input file: " << filename << endl; - cerr << "offending line:" << endl << line << endl; - exit(1); - } - if (only_cubic_sizes && !size_triple_t(product_size).is_cubic()) { - continue; - } - inputfile_entry_t entry; - entry.product_size = uint16_t(product_size); - entry.pot_block_size = uint16_t(block_size); - entry.gflops = gflops; - entries.push_back(entry); - break; - } - case type_t::default_sizes: { - unsigned int product_size; - float gflops; - int bk, bm, bn; - int sscanf_result = - sscanf(line.c_str(), "%x default(%d, %d, %d) %f", - &product_size, - &bk, &bm, &bn, - &gflops); - if (5 != sscanf_result || - !product_size || - product_size > 0xfff || - !isfinite(gflops)) - { - cerr << "ill-formed input file: " << filename << endl; - cerr << "offending line:" << endl << line << endl; - exit(1); - } - if (only_cubic_sizes && !size_triple_t(product_size).is_cubic()) { - continue; - } - inputfile_entry_t entry; - entry.product_size = uint16_t(product_size); - entry.pot_block_size = 0; - entry.nonpot_block_size = size_triple_t(bk, bm, bn); - entry.gflops = gflops; - entries.push_back(entry); - break; - } - - default: - break; - } - } - stream.close(); - if (type == type_t::unknown) { - cerr << "Unrecognized input file " << filename << endl; - exit(1); - } - if (entries.empty()) { - cerr << "didn't find any measurements in input file: " << filename << endl; - exit(1); - } - } -}; - -struct preprocessed_inputfile_entry_t -{ - uint16_t product_size; - uint16_t block_size; - - float efficiency; -}; - -bool lower_efficiency(const preprocessed_inputfile_entry_t& e1, const preprocessed_inputfile_entry_t& e2) -{ - return e1.efficiency < e2.efficiency; -} - -struct preprocessed_inputfile_t -{ - string filename; - vector entries; - - preprocessed_inputfile_t(const inputfile_t& inputfile) - : filename(inputfile.filename) - { - if (inputfile.type != inputfile_t::type_t::all_pot_sizes) { - abort(); - } - auto it = inputfile.entries.begin(); - auto it_first_with_given_product_size = it; - while (it != inputfile.entries.end()) { - ++it; - if (it == inputfile.entries.end() || - it->product_size != it_first_with_given_product_size->product_size) - { - import_input_file_range_one_product_size(it_first_with_given_product_size, it); - it_first_with_given_product_size = it; - } - } - } - -private: - void import_input_file_range_one_product_size( - const vector::const_iterator& begin, - const vector::const_iterator& end) - { - uint16_t product_size = begin->product_size; - float max_gflops = 0.0f; - for (auto it = begin; it != end; ++it) { - if (it->product_size != product_size) { - cerr << "Unexpected ordering of entries in " << filename << endl; - cerr << "(Expected all entries for product size " << hex << product_size << dec << " to be grouped)" << endl; - exit(1); - } - max_gflops = max(max_gflops, it->gflops); - } - for (auto it = begin; it != end; ++it) { - preprocessed_inputfile_entry_t entry; - entry.product_size = it->product_size; - entry.block_size = it->pot_block_size; - entry.efficiency = it->gflops / max_gflops; - entries.push_back(entry); - } - } -}; - -void check_all_files_in_same_exact_order( - const vector& preprocessed_inputfiles) -{ - if (preprocessed_inputfiles.empty()) { - return; - } - - const preprocessed_inputfile_t& first_file = preprocessed_inputfiles[0]; - const size_t num_entries = first_file.entries.size(); - - for (size_t i = 0; i < preprocessed_inputfiles.size(); i++) { - if (preprocessed_inputfiles[i].entries.size() != num_entries) { - cerr << "these files have different number of entries: " - << preprocessed_inputfiles[i].filename - << " and " - << first_file.filename - << endl; - exit(1); - } - } - - for (size_t entry_index = 0; entry_index < num_entries; entry_index++) { - const uint16_t entry_product_size = first_file.entries[entry_index].product_size; - const uint16_t entry_block_size = first_file.entries[entry_index].block_size; - for (size_t file_index = 0; file_index < preprocessed_inputfiles.size(); file_index++) { - const preprocessed_inputfile_t& cur_file = preprocessed_inputfiles[file_index]; - if (cur_file.entries[entry_index].product_size != entry_product_size || - cur_file.entries[entry_index].block_size != entry_block_size) - { - cerr << "entries not in same order between these files: " - << first_file.filename - << " and " - << cur_file.filename - << endl; - exit(1); - } - } - } -} - -float efficiency_of_subset( - const vector& preprocessed_inputfiles, - const vector& subset) -{ - if (subset.size() <= 1) { - return 1.0f; - } - const preprocessed_inputfile_t& first_file = preprocessed_inputfiles[subset[0]]; - const size_t num_entries = first_file.entries.size(); - float efficiency = 1.0f; - size_t entry_index = 0; - size_t first_entry_index_with_this_product_size = 0; - uint16_t product_size = first_file.entries[0].product_size; - while (entry_index < num_entries) { - ++entry_index; - if (entry_index == num_entries || - first_file.entries[entry_index].product_size != product_size) - { - float efficiency_this_product_size = 0.0f; - for (size_t e = first_entry_index_with_this_product_size; e < entry_index; e++) { - float efficiency_this_entry = 1.0f; - for (auto i = subset.begin(); i != subset.end(); ++i) { - efficiency_this_entry = min(efficiency_this_entry, preprocessed_inputfiles[*i].entries[e].efficiency); - } - efficiency_this_product_size = max(efficiency_this_product_size, efficiency_this_entry); - } - efficiency = min(efficiency, efficiency_this_product_size); - if (entry_index < num_entries) { - first_entry_index_with_this_product_size = entry_index; - product_size = first_file.entries[entry_index].product_size; - } - } - } - - return efficiency; -} - -void dump_table_for_subset( - const vector& preprocessed_inputfiles, - const vector& subset) -{ - const preprocessed_inputfile_t& first_file = preprocessed_inputfiles[subset[0]]; - const size_t num_entries = first_file.entries.size(); - size_t entry_index = 0; - size_t first_entry_index_with_this_product_size = 0; - uint16_t product_size = first_file.entries[0].product_size; - size_t i = 0; - size_triple_t min_product_size(first_file.entries.front().product_size); - size_triple_t max_product_size(first_file.entries.back().product_size); - if (!min_product_size.is_cubic() || !max_product_size.is_cubic()) { - abort(); - } - if (only_cubic_sizes) { - cerr << "Can't generate tables with --only-cubic-sizes." << endl; - abort(); - } - cout << "struct LookupTable {" << endl; - cout << " static const size_t BaseSize = " << min_product_size.k << ";" << endl; - const size_t NumSizes = log2_pot(max_product_size.k / min_product_size.k) + 1; - const size_t TableSize = NumSizes * NumSizes * NumSizes; - cout << " static const size_t NumSizes = " << NumSizes << ";" << endl; - cout << " static const unsigned short* Data() {" << endl; - cout << " static const unsigned short data[" << TableSize << "] = {"; - while (entry_index < num_entries) { - ++entry_index; - if (entry_index == num_entries || - first_file.entries[entry_index].product_size != product_size) - { - float best_efficiency_this_product_size = 0.0f; - uint16_t best_block_size_this_product_size = 0; - for (size_t e = first_entry_index_with_this_product_size; e < entry_index; e++) { - float efficiency_this_entry = 1.0f; - for (auto i = subset.begin(); i != subset.end(); ++i) { - efficiency_this_entry = min(efficiency_this_entry, preprocessed_inputfiles[*i].entries[e].efficiency); - } - if (efficiency_this_entry > best_efficiency_this_product_size) { - best_efficiency_this_product_size = efficiency_this_entry; - best_block_size_this_product_size = first_file.entries[e].block_size; - } - } - if ((i++) % NumSizes) { - cout << " "; - } else { - cout << endl << " "; - } - cout << "0x" << hex << best_block_size_this_product_size << dec; - if (entry_index < num_entries) { - cout << ","; - first_entry_index_with_this_product_size = entry_index; - product_size = first_file.entries[entry_index].product_size; - } - } - } - if (i != TableSize) { - cerr << endl << "Wrote " << i << " table entries, expected " << TableSize << endl; - abort(); - } - cout << endl << " };" << endl; - cout << " return data;" << endl; - cout << " }" << endl; - cout << "};" << endl; -} - -float efficiency_of_partition( - const vector& preprocessed_inputfiles, - const vector>& partition) -{ - float efficiency = 1.0f; - for (auto s = partition.begin(); s != partition.end(); ++s) { - efficiency = min(efficiency, efficiency_of_subset(preprocessed_inputfiles, *s)); - } - return efficiency; -} - -void make_first_subset(size_t subset_size, vector& out_subset, size_t set_size) -{ - assert(subset_size >= 1 && subset_size <= set_size); - out_subset.resize(subset_size); - for (size_t i = 0; i < subset_size; i++) { - out_subset[i] = i; - } -} - -bool is_last_subset(const vector& subset, size_t set_size) -{ - return subset[0] == set_size - subset.size(); -} - -void next_subset(vector& inout_subset, size_t set_size) -{ - if (is_last_subset(inout_subset, set_size)) { - cerr << "iterating past the last subset" << endl; - abort(); - } - size_t i = 1; - while (inout_subset[inout_subset.size() - i] == set_size - i) { - i++; - assert(i <= inout_subset.size()); - } - size_t first_index_to_change = inout_subset.size() - i; - inout_subset[first_index_to_change]++; - size_t p = inout_subset[first_index_to_change]; - for (size_t j = first_index_to_change + 1; j < inout_subset.size(); j++) { - inout_subset[j] = ++p; - } -} - -const size_t number_of_subsets_limit = 100; -const size_t always_search_subsets_of_size_at_least = 2; - -bool is_number_of_subsets_feasible(size_t n, size_t p) -{ - assert(n>0 && p>0 && p<=n); - uint64_t numerator = 1, denominator = 1; - for (size_t i = 0; i < p; i++) { - numerator *= n - i; - denominator *= i + 1; - if (numerator > denominator * number_of_subsets_limit) { - return false; - } - } - return true; -} - -size_t max_feasible_subset_size(size_t n) -{ - assert(n > 0); - const size_t minresult = min(n-1, always_search_subsets_of_size_at_least); - for (size_t p = 1; p <= n - 1; p++) { - if (!is_number_of_subsets_feasible(n, p+1)) { - return max(p, minresult); - } - } - return n - 1; -} - -void find_subset_with_efficiency_higher_than( - const vector& preprocessed_inputfiles, - float required_efficiency_to_beat, - vector& inout_remainder, - vector& out_subset) -{ - out_subset.resize(0); - - if (required_efficiency_to_beat >= 1.0f) { - cerr << "can't beat efficiency 1." << endl; - abort(); - } - - while (!inout_remainder.empty()) { - - vector candidate_indices(inout_remainder.size()); - for (size_t i = 0; i < candidate_indices.size(); i++) { - candidate_indices[i] = i; - } - - size_t candidate_indices_subset_size = max_feasible_subset_size(candidate_indices.size()); - while (candidate_indices_subset_size >= 1) { - vector candidate_indices_subset; - make_first_subset(candidate_indices_subset_size, - candidate_indices_subset, - candidate_indices.size()); - - vector best_candidate_indices_subset; - float best_efficiency = 0.0f; - vector trial_subset = out_subset; - trial_subset.resize(out_subset.size() + candidate_indices_subset_size); - while (true) - { - for (size_t i = 0; i < candidate_indices_subset_size; i++) { - trial_subset[out_subset.size() + i] = inout_remainder[candidate_indices_subset[i]]; - } - - float trial_efficiency = efficiency_of_subset(preprocessed_inputfiles, trial_subset); - if (trial_efficiency > best_efficiency) { - best_efficiency = trial_efficiency; - best_candidate_indices_subset = candidate_indices_subset; - } - if (is_last_subset(candidate_indices_subset, candidate_indices.size())) { - break; - } - next_subset(candidate_indices_subset, candidate_indices.size()); - } - - if (best_efficiency > required_efficiency_to_beat) { - for (size_t i = 0; i < best_candidate_indices_subset.size(); i++) { - candidate_indices[i] = candidate_indices[best_candidate_indices_subset[i]]; - } - candidate_indices.resize(best_candidate_indices_subset.size()); - } - candidate_indices_subset_size--; - } - - size_t candidate_index = candidate_indices[0]; - auto candidate_iterator = inout_remainder.begin() + candidate_index; - vector trial_subset = out_subset; - - trial_subset.push_back(*candidate_iterator); - float trial_efficiency = efficiency_of_subset(preprocessed_inputfiles, trial_subset); - if (trial_efficiency > required_efficiency_to_beat) { - out_subset.push_back(*candidate_iterator); - inout_remainder.erase(candidate_iterator); - } else { - break; - } - } -} - -void find_partition_with_efficiency_higher_than( - const vector& preprocessed_inputfiles, - float required_efficiency_to_beat, - vector>& out_partition) -{ - out_partition.resize(0); - - vector remainder; - for (size_t i = 0; i < preprocessed_inputfiles.size(); i++) { - remainder.push_back(i); - } - - while (!remainder.empty()) { - vector new_subset; - find_subset_with_efficiency_higher_than( - preprocessed_inputfiles, - required_efficiency_to_beat, - remainder, - new_subset); - out_partition.push_back(new_subset); - } -} - -void print_partition( - const vector& preprocessed_inputfiles, - const vector>& partition) -{ - float efficiency = efficiency_of_partition(preprocessed_inputfiles, partition); - cout << "Partition into " << partition.size() << " subsets for " << efficiency * 100.0f << "% efficiency" << endl; - for (auto subset = partition.begin(); subset != partition.end(); ++subset) { - cout << " Subset " << (subset - partition.begin()) - << ", efficiency " << efficiency_of_subset(preprocessed_inputfiles, *subset) * 100.0f << "%:" - << endl; - for (auto file = subset->begin(); file != subset->end(); ++file) { - cout << " " << preprocessed_inputfiles[*file].filename << endl; - } - if (dump_tables) { - cout << " Table:" << endl; - dump_table_for_subset(preprocessed_inputfiles, *subset); - } - } - cout << endl; -} - -struct action_t -{ - virtual const char* invokation_name() const { abort(); return nullptr; } - virtual void run(const vector&) const { abort(); } - virtual ~action_t() {} -}; - -struct partition_action_t : action_t -{ - virtual const char* invokation_name() const override { return "partition"; } - virtual void run(const vector& input_filenames) const override - { - vector preprocessed_inputfiles; - - if (input_filenames.empty()) { - cerr << "The " << invokation_name() << " action needs a list of input files." << endl; - exit(1); - } - - for (auto it = input_filenames.begin(); it != input_filenames.end(); ++it) { - inputfile_t inputfile(*it); - switch (inputfile.type) { - case inputfile_t::type_t::all_pot_sizes: - preprocessed_inputfiles.emplace_back(inputfile); - break; - case inputfile_t::type_t::default_sizes: - cerr << "The " << invokation_name() << " action only uses measurements for all pot sizes, and " - << "has no use for " << *it << " which contains measurements for default sizes." << endl; - exit(1); - break; - default: - cerr << "Unrecognized input file: " << *it << endl; - exit(1); - } - } - - check_all_files_in_same_exact_order(preprocessed_inputfiles); - - float required_efficiency_to_beat = 0.0f; - vector>> partitions; - cerr << "searching for partitions...\r" << flush; - while (true) - { - vector> partition; - find_partition_with_efficiency_higher_than( - preprocessed_inputfiles, - required_efficiency_to_beat, - partition); - float actual_efficiency = efficiency_of_partition(preprocessed_inputfiles, partition); - cerr << "partition " << preprocessed_inputfiles.size() << " files into " << partition.size() - << " subsets for " << 100.0f * actual_efficiency - << " % efficiency" - << " \r" << flush; - partitions.push_back(partition); - if (partition.size() == preprocessed_inputfiles.size() || actual_efficiency == 1.0f) { - break; - } - required_efficiency_to_beat = actual_efficiency; - } - cerr << " " << endl; - while (true) { - bool repeat = false; - for (size_t i = 0; i < partitions.size() - 1; i++) { - if (partitions[i].size() >= partitions[i+1].size()) { - partitions.erase(partitions.begin() + i); - repeat = true; - break; - } - } - if (!repeat) { - break; - } - } - for (auto it = partitions.begin(); it != partitions.end(); ++it) { - print_partition(preprocessed_inputfiles, *it); - } - } -}; - -struct evaluate_defaults_action_t : action_t -{ - struct results_entry_t { - uint16_t product_size; - size_triple_t default_block_size; - uint16_t best_pot_block_size; - float default_gflops; - float best_pot_gflops; - float default_efficiency; - }; - friend ostream& operator<<(ostream& s, const results_entry_t& entry) - { - return s - << "Product size " << size_triple_t(entry.product_size) - << ": default block size " << entry.default_block_size - << " -> " << entry.default_gflops - << " GFlop/s = " << entry.default_efficiency * 100.0f << " %" - << " of best POT block size " << size_triple_t(entry.best_pot_block_size) - << " -> " << entry.best_pot_gflops - << " GFlop/s" << dec; - } - static bool lower_efficiency(const results_entry_t& e1, const results_entry_t& e2) { - return e1.default_efficiency < e2.default_efficiency; - } - virtual const char* invokation_name() const override { return "evaluate-defaults"; } - void show_usage_and_exit() const - { - cerr << "usage: " << invokation_name() << " default-sizes-data all-pot-sizes-data" << endl; - cerr << "checks how well the performance with default sizes compares to the best " - << "performance measured over all POT sizes." << endl; - exit(1); - } - virtual void run(const vector& input_filenames) const override - { - if (input_filenames.size() != 2) { - show_usage_and_exit(); - } - inputfile_t inputfile_default_sizes(input_filenames[0]); - inputfile_t inputfile_all_pot_sizes(input_filenames[1]); - if (inputfile_default_sizes.type != inputfile_t::type_t::default_sizes) { - cerr << inputfile_default_sizes.filename << " is not an input file with default sizes." << endl; - show_usage_and_exit(); - } - if (inputfile_all_pot_sizes.type != inputfile_t::type_t::all_pot_sizes) { - cerr << inputfile_all_pot_sizes.filename << " is not an input file with all POT sizes." << endl; - show_usage_and_exit(); - } - vector results; - vector cubic_results; - - uint16_t product_size = 0; - auto it_all_pot_sizes = inputfile_all_pot_sizes.entries.begin(); - for (auto it_default_sizes = inputfile_default_sizes.entries.begin(); - it_default_sizes != inputfile_default_sizes.entries.end(); - ++it_default_sizes) - { - if (it_default_sizes->product_size == product_size) { - continue; - } - product_size = it_default_sizes->product_size; - while (it_all_pot_sizes != inputfile_all_pot_sizes.entries.end() && - it_all_pot_sizes->product_size != product_size) - { - ++it_all_pot_sizes; - } - if (it_all_pot_sizes == inputfile_all_pot_sizes.entries.end()) { - break; - } - uint16_t best_pot_block_size = 0; - float best_pot_gflops = 0; - for (auto it = it_all_pot_sizes; - it != inputfile_all_pot_sizes.entries.end() && it->product_size == product_size; - ++it) - { - if (it->gflops > best_pot_gflops) { - best_pot_gflops = it->gflops; - best_pot_block_size = it->pot_block_size; - } - } - results_entry_t entry; - entry.product_size = product_size; - entry.default_block_size = it_default_sizes->nonpot_block_size; - entry.best_pot_block_size = best_pot_block_size; - entry.default_gflops = it_default_sizes->gflops; - entry.best_pot_gflops = best_pot_gflops; - entry.default_efficiency = entry.default_gflops / entry.best_pot_gflops; - results.push_back(entry); - - size_triple_t t(product_size); - if (t.k == t.m && t.m == t.n) { - cubic_results.push_back(entry); - } - } - - cout << "All results:" << endl; - for (auto it = results.begin(); it != results.end(); ++it) { - cout << *it << endl; - } - cout << endl; - - sort(results.begin(), results.end(), lower_efficiency); - - const size_t n = min(20, results.size()); - cout << n << " worst results:" << endl; - for (size_t i = 0; i < n; i++) { - cout << results[i] << endl; - } - cout << endl; - - cout << "cubic results:" << endl; - for (auto it = cubic_results.begin(); it != cubic_results.end(); ++it) { - cout << *it << endl; - } - cout << endl; - - sort(cubic_results.begin(), cubic_results.end(), lower_efficiency); - - cout.precision(2); - vector a = {0.5f, 0.20f, 0.10f, 0.05f, 0.02f, 0.01f}; - for (auto it = a.begin(); it != a.end(); ++it) { - size_t n = min(results.size() - 1, size_t(*it * results.size())); - cout << (100.0f * n / (results.size() - 1)) - << " % of product sizes have default efficiency <= " - << 100.0f * results[n].default_efficiency << " %" << endl; - } - cout.precision(default_precision); - } -}; - - -void show_usage_and_exit(int argc, char* argv[], - const vector>& available_actions) -{ - cerr << "usage: " << argv[0] << " [options...] " << endl; - cerr << "available actions:" << endl; - for (auto it = available_actions.begin(); it != available_actions.end(); ++it) { - cerr << " " << (*it)->invokation_name() << endl; - } - cerr << "the input files should each contain an output of benchmark-blocking-sizes" << endl; - exit(1); -} - -int main(int argc, char* argv[]) -{ - cout.precision(default_precision); - cerr.precision(default_precision); - - vector> available_actions; - available_actions.emplace_back(new partition_action_t); - available_actions.emplace_back(new evaluate_defaults_action_t); - - vector input_filenames; - - action_t* action = nullptr; - - if (argc < 2) { - show_usage_and_exit(argc, argv, available_actions); - } - for (int i = 1; i < argc; i++) { - bool arg_handled = false; - // Step 1. Try to match action invokation names. - for (auto it = available_actions.begin(); it != available_actions.end(); ++it) { - if (!strcmp(argv[i], (*it)->invokation_name())) { - if (!action) { - action = it->get(); - arg_handled = true; - break; - } else { - cerr << "can't specify more than one action!" << endl; - show_usage_and_exit(argc, argv, available_actions); - } - } - } - if (arg_handled) { - continue; - } - // Step 2. Try to match option names. - if (argv[i][0] == '-') { - if (!strcmp(argv[i], "--only-cubic-sizes")) { - only_cubic_sizes = true; - arg_handled = true; - } - if (!strcmp(argv[i], "--dump-tables")) { - dump_tables = true; - arg_handled = true; - } - if (!arg_handled) { - cerr << "Unrecognized option: " << argv[i] << endl; - show_usage_and_exit(argc, argv, available_actions); - } - } - if (arg_handled) { - continue; - } - // Step 3. Default to interpreting args as input filenames. - input_filenames.emplace_back(argv[i]); - } - - if (dump_tables && only_cubic_sizes) { - cerr << "Incompatible options: --only-cubic-sizes and --dump-tables." << endl; - show_usage_and_exit(argc, argv, available_actions); - } - - if (!action) { - show_usage_and_exit(argc, argv, available_actions); - } - - action->run(input_filenames); -} diff --git a/eigen/bench/basicbench.cxxlist b/eigen/bench/basicbench.cxxlist deleted file mode 100644 index a8ab34e..0000000 --- a/eigen/bench/basicbench.cxxlist +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# CLIST[((g++))]="g++-3.4 -O3 -DNDEBUG" -# CLIST[((g++))]="g++-3.4 -O3 -DNDEBUG -finline-limit=20000" - -# CLIST[((g++))]="g++-4.1 -O3 -DNDEBUG" -#CLIST[((g++))]="g++-4.1 -O3 -DNDEBUG -finline-limit=20000" - -# CLIST[((g++))]="g++-4.2 -O3 -DNDEBUG" -#CLIST[((g++))]="g++-4.2 -O3 -DNDEBUG -finline-limit=20000" -# CLIST[((g++))]="g++-4.2 -O3 -DNDEBUG -finline-limit=20000 -fprofile-generate" -# CLIST[((g++))]="g++-4.2 -O3 -DNDEBUG -finline-limit=20000 -fprofile-use" - -# CLIST[((g++))]="g++-4.3 -O3 -DNDEBUG" -#CLIST[((g++))]="g++-4.3 -O3 -DNDEBUG -finline-limit=20000" -# CLIST[((g++))]="g++-4.3 -O3 -DNDEBUG -finline-limit=20000 -fprofile-generate" -# CLIST[((g++))]="g++-4.3 -O3 -DNDEBUG -finline-limit=20000 -fprofile-use" - -# CLIST[((g++))]="icpc -fast -DNDEBUG -fno-exceptions -no-inline-max-size -prof-genx" -# CLIST[((g++))]="icpc -fast -DNDEBUG -fno-exceptions -no-inline-max-size -prof-use" - -#CLIST[((g++))]="/opt/intel/Compiler/11.1/072/bin/intel64/icpc -fast -DNDEBUG -fno-exceptions -no-inline-max-size -lrt" -CLIST[((g++))]="/home/orzel/svn/llvm/Release/bin/clang++ -O3 -DNDEBUG -DEIGEN_DONT_VECTORIZE -lrt" -CLIST[((g++))]="/home/orzel/svn/llvm/Release/bin/clang++ -O3 -DNDEBUG -lrt" -CLIST[((g++))]="g++-4.4.4 -O3 -DNDEBUG -DEIGEN_DONT_VECTORIZE -lrt" -CLIST[((g++))]="g++-4.4.4 -O3 -DNDEBUG -lrt" -CLIST[((g++))]="g++-4.5.0 -O3 -DNDEBUG -DEIGEN_DONT_VECTORIZE -lrt" -CLIST[((g++))]="g++-4.5.0 -O3 -DNDEBUG -lrt" diff --git a/eigen/bench/basicbenchmark.cpp b/eigen/bench/basicbenchmark.cpp deleted file mode 100644 index a26ea85..0000000 --- a/eigen/bench/basicbenchmark.cpp +++ /dev/null @@ -1,35 +0,0 @@ - -#include -#include "BenchUtil.h" -#include "basicbenchmark.h" - -int main(int argc, char *argv[]) -{ - DISABLE_SSE_EXCEPTIONS(); - - // this is the list of matrix type and size we want to bench: - // ((suffix) (matrix size) (number of iterations)) - #define MODES ((3d)(3)(4000000)) ((4d)(4)(1000000)) ((Xd)(4)(1000000)) ((Xd)(20)(10000)) -// #define MODES ((Xd)(20)(10000)) - - #define _GENERATE_HEADER(R,ARG,EL) << BOOST_PP_STRINGIZE(BOOST_PP_SEQ_HEAD(EL)) << "-" \ - << BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(1,EL)) << "x" \ - << BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(1,EL)) << " / " - - std::cout BOOST_PP_SEQ_FOR_EACH(_GENERATE_HEADER, ~, MODES ) << endl; - - const int tries = 10; - - #define _RUN_BENCH(R,ARG,EL) \ - std::cout << ARG( \ - BOOST_PP_CAT(Matrix, BOOST_PP_SEQ_HEAD(EL)) (\ - BOOST_PP_SEQ_ELEM(1,EL),BOOST_PP_SEQ_ELEM(1,EL)), BOOST_PP_SEQ_ELEM(2,EL), tries) \ - << " "; - - BOOST_PP_SEQ_FOR_EACH(_RUN_BENCH, benchBasic, MODES ); - std::cout << endl; - BOOST_PP_SEQ_FOR_EACH(_RUN_BENCH, benchBasic, MODES ); - std::cout << endl; - - return 0; -} diff --git a/eigen/bench/basicbenchmark.h b/eigen/bench/basicbenchmark.h deleted file mode 100644 index 3fdc357..0000000 --- a/eigen/bench/basicbenchmark.h +++ /dev/null @@ -1,63 +0,0 @@ - -#ifndef EIGEN_BENCH_BASICBENCH_H -#define EIGEN_BENCH_BASICBENCH_H - -enum {LazyEval, EarlyEval, OmpEval}; - -template -void benchBasic_loop(const MatrixType& I, MatrixType& m, int iterations) __attribute__((noinline)); - -template -void benchBasic_loop(const MatrixType& I, MatrixType& m, int iterations) -{ - for(int a = 0; a < iterations; a++) - { - if (Mode==LazyEval) - { - asm("#begin_bench_loop LazyEval"); - if (MatrixType::SizeAtCompileTime!=Eigen::Dynamic) asm("#fixedsize"); - m = (I + 0.00005 * (m + m.lazy() * m)).eval(); - } - else if (Mode==OmpEval) - { - asm("#begin_bench_loop OmpEval"); - if (MatrixType::SizeAtCompileTime!=Eigen::Dynamic) asm("#fixedsize"); - m = (I + 0.00005 * (m + m.lazy() * m)).evalOMP(); - } - else - { - asm("#begin_bench_loop EarlyEval"); - if (MatrixType::SizeAtCompileTime!=Eigen::Dynamic) asm("#fixedsize"); - m = I + 0.00005 * (m + m * m); - } - asm("#end_bench_loop"); - } -} - -template -double benchBasic(const MatrixType& mat, int size, int tries) __attribute__((noinline)); - -template -double benchBasic(const MatrixType& mat, int iterations, int tries) -{ - const int rows = mat.rows(); - const int cols = mat.cols(); - - MatrixType I(rows,cols); - MatrixType m(rows,cols); - - initMatrix_identity(I); - - Eigen::BenchTimer timer; - for(uint t=0; t(I, m, iterations); - timer.stop(); - cerr << m; - } - return timer.value(); -}; - -#endif // EIGEN_BENCH_BASICBENCH_H diff --git a/eigen/bench/benchBlasGemm.cpp b/eigen/bench/benchBlasGemm.cpp deleted file mode 100644 index cb086a5..0000000 --- a/eigen/bench/benchBlasGemm.cpp +++ /dev/null @@ -1,219 +0,0 @@ -// g++ -O3 -DNDEBUG -I.. -L /usr/lib64/atlas/ benchBlasGemm.cpp -o benchBlasGemm -lrt -lcblas -// possible options: -// -DEIGEN_DONT_VECTORIZE -// -msse2 - -// #define EIGEN_DEFAULT_TO_ROW_MAJOR -#define _FLOAT - -#include - -#include -#include "BenchTimer.h" - -// include the BLAS headers -extern "C" { -#include -} -#include - -#ifdef _FLOAT -typedef float Scalar; -#define CBLAS_GEMM cblas_sgemm -#else -typedef double Scalar; -#define CBLAS_GEMM cblas_dgemm -#endif - - -typedef Eigen::Matrix MyMatrix; -void bench_eigengemm(MyMatrix& mc, const MyMatrix& ma, const MyMatrix& mb, int nbloops); -void check_product(int M, int N, int K); -void check_product(void); - -int main(int argc, char *argv[]) -{ - // disable SSE exceptions - #ifdef __GNUC__ - { - int aux; - asm( - "stmxcsr %[aux] \n\t" - "orl $32832, %[aux] \n\t" - "ldmxcsr %[aux] \n\t" - : : [aux] "m" (aux)); - } - #endif - - int nbtries=1, nbloops=1, M, N, K; - - if (argc==2) - { - if (std::string(argv[1])=="check") - check_product(); - else - M = N = K = atoi(argv[1]); - } - else if ((argc==3) && (std::string(argv[1])=="auto")) - { - M = N = K = atoi(argv[2]); - nbloops = 1000000000/(M*M*M); - if (nbloops<1) - nbloops = 1; - nbtries = 6; - } - else if (argc==4) - { - M = N = K = atoi(argv[1]); - nbloops = atoi(argv[2]); - nbtries = atoi(argv[3]); - } - else if (argc==6) - { - M = atoi(argv[1]); - N = atoi(argv[2]); - K = atoi(argv[3]); - nbloops = atoi(argv[4]); - nbtries = atoi(argv[5]); - } - else - { - std::cout << "Usage: " << argv[0] << " size \n"; - std::cout << "Usage: " << argv[0] << " auto size\n"; - std::cout << "Usage: " << argv[0] << " size nbloops nbtries\n"; - std::cout << "Usage: " << argv[0] << " M N K nbloops nbtries\n"; - std::cout << "Usage: " << argv[0] << " check\n"; - std::cout << "Options:\n"; - std::cout << " size unique size of the 2 matrices (integer)\n"; - std::cout << " auto automatically set the number of repetitions and tries\n"; - std::cout << " nbloops number of times the GEMM routines is executed\n"; - std::cout << " nbtries number of times the loop is benched (return the best try)\n"; - std::cout << " M N K sizes of the matrices: MxN = MxK * KxN (integers)\n"; - std::cout << " check check eigen product using cblas as a reference\n"; - exit(1); - } - - double nbmad = double(M) * double(N) * double(K) * double(nbloops); - - if (!(std::string(argv[1])=="auto")) - std::cout << M << " x " << N << " x " << K << "\n"; - - Scalar alpha, beta; - MyMatrix ma(M,K), mb(K,N), mc(M,N); - ma = MyMatrix::Random(M,K); - mb = MyMatrix::Random(K,N); - mc = MyMatrix::Random(M,N); - - Eigen::BenchTimer timer; - - // we simply compute c += a*b, so: - alpha = 1; - beta = 1; - - // bench cblas - // ROWS_A, COLS_B, COLS_A, 1.0, A, COLS_A, B, COLS_B, 0.0, C, COLS_B); - if (!(std::string(argv[1])=="auto")) - { - timer.reset(); - for (uint k=0 ; k(1,64); - N = internal::random(1,768); - K = internal::random(1,768); - M = (0 + M) * 1; - std::cout << M << " x " << N << " x " << K << "\n"; - check_product(M, N, K); - } -} - diff --git a/eigen/bench/benchCholesky.cpp b/eigen/bench/benchCholesky.cpp deleted file mode 100644 index 9a8e7cf..0000000 --- a/eigen/bench/benchCholesky.cpp +++ /dev/null @@ -1,142 +0,0 @@ - -// g++ -DNDEBUG -O3 -I.. benchLLT.cpp -o benchLLT && ./benchLLT -// options: -// -DBENCH_GSL -lgsl /usr/lib/libcblas.so.3 -// -DEIGEN_DONT_VECTORIZE -// -msse2 -// -DREPEAT=100 -// -DTRIES=10 -// -DSCALAR=double - -#include - -#include -#include -#include -using namespace Eigen; - -#ifndef REPEAT -#define REPEAT 10000 -#endif - -#ifndef TRIES -#define TRIES 10 -#endif - -typedef float Scalar; - -template -__attribute__ ((noinline)) void benchLLT(const MatrixType& m) -{ - int rows = m.rows(); - int cols = m.cols(); - - double cost = 0; - for (int j=0; j SquareMatrixType; - - MatrixType a = MatrixType::Random(rows,cols); - SquareMatrixType covMat = a * a.adjoint(); - - BenchTimer timerNoSqrt, timerSqrt; - - Scalar acc = 0; - int r = internal::random(0,covMat.rows()-1); - int c = internal::random(0,covMat.cols()-1); - for (int t=0; t cholnosqrt(covMat); - acc += cholnosqrt.matrixL().coeff(r,c); - } - timerNoSqrt.stop(); - } - - for (int t=0; t chol(covMat); - acc += chol.matrixL().coeff(r,c); - } - timerSqrt.stop(); - } - - if (MatrixType::RowsAtCompileTime==Dynamic) - std::cout << "dyn "; - else - std::cout << "fixed "; - std::cout << covMat.rows() << " \t" - << (timerNoSqrt.best()) / repeats << "s " - << "(" << 1e-9 * cost*repeats/timerNoSqrt.best() << " GFLOPS)\t" - << (timerSqrt.best()) / repeats << "s " - << "(" << 1e-9 * cost*repeats/timerSqrt.best() << " GFLOPS)\n"; - - - #ifdef BENCH_GSL - if (MatrixType::RowsAtCompileTime==Dynamic) - { - timerSqrt.reset(); - - gsl_matrix* gslCovMat = gsl_matrix_alloc(covMat.rows(),covMat.cols()); - gsl_matrix* gslCopy = gsl_matrix_alloc(covMat.rows(),covMat.cols()); - - eiToGsl(covMat, &gslCovMat); - for (int t=0; t0; ++i) - benchLLT(Matrix(dynsizes[i],dynsizes[i])); - - benchLLT(Matrix()); - benchLLT(Matrix()); - benchLLT(Matrix()); - benchLLT(Matrix()); - benchLLT(Matrix()); - benchLLT(Matrix()); - benchLLT(Matrix()); - benchLLT(Matrix()); - benchLLT(Matrix()); - return 0; -} - diff --git a/eigen/bench/benchEigenSolver.cpp b/eigen/bench/benchEigenSolver.cpp deleted file mode 100644 index dd78c7e..0000000 --- a/eigen/bench/benchEigenSolver.cpp +++ /dev/null @@ -1,212 +0,0 @@ - -// g++ -DNDEBUG -O3 -I.. benchEigenSolver.cpp -o benchEigenSolver && ./benchEigenSolver -// options: -// -DBENCH_GMM -// -DBENCH_GSL -lgsl /usr/lib/libcblas.so.3 -// -DEIGEN_DONT_VECTORIZE -// -msse2 -// -DREPEAT=100 -// -DTRIES=10 -// -DSCALAR=double - -#include - -#include -#include -#include -using namespace Eigen; - -#ifndef REPEAT -#define REPEAT 1000 -#endif - -#ifndef TRIES -#define TRIES 4 -#endif - -#ifndef SCALAR -#define SCALAR float -#endif - -typedef SCALAR Scalar; - -template -__attribute__ ((noinline)) void benchEigenSolver(const MatrixType& m) -{ - int rows = m.rows(); - int cols = m.cols(); - - int stdRepeats = std::max(1,int((REPEAT*1000)/(rows*rows*sqrt(rows)))); - int saRepeats = stdRepeats * 4; - - typedef typename MatrixType::Scalar Scalar; - typedef Matrix SquareMatrixType; - - MatrixType a = MatrixType::Random(rows,cols); - SquareMatrixType covMat = a * a.adjoint(); - - BenchTimer timerSa, timerStd; - - Scalar acc = 0; - int r = internal::random(0,covMat.rows()-1); - int c = internal::random(0,covMat.cols()-1); - { - SelfAdjointEigenSolver ei(covMat); - for (int t=0; t ei(covMat); - for (int t=0; t gmmCovMat(covMat.rows(),covMat.cols()); - gmm::dense_matrix eigvect(covMat.rows(),covMat.cols()); - std::vector eigval(covMat.rows()); - eiToGmm(covMat, gmmCovMat); - for (int t=0; t0; ++i) - benchEigenSolver(Matrix(dynsizes[i],dynsizes[i])); - - benchEigenSolver(Matrix()); - benchEigenSolver(Matrix()); - benchEigenSolver(Matrix()); - benchEigenSolver(Matrix()); - benchEigenSolver(Matrix()); - benchEigenSolver(Matrix()); - benchEigenSolver(Matrix()); - return 0; -} - diff --git a/eigen/bench/benchFFT.cpp b/eigen/bench/benchFFT.cpp deleted file mode 100644 index 3eb1a1a..0000000 --- a/eigen/bench/benchFFT.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2009 Mark Borgerding mark a borgerding net -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#include - -#include -#include -#include -#include - -#include - -using namespace Eigen; -using namespace std; - - -template -string nameof(); - -template <> string nameof() {return "float";} -template <> string nameof() {return "double";} -template <> string nameof() {return "long double";} - -#ifndef TYPE -#define TYPE float -#endif - -#ifndef NFFT -#define NFFT 1024 -#endif -#ifndef NDATA -#define NDATA 1000000 -#endif - -using namespace Eigen; - -template -void bench(int nfft,bool fwd,bool unscaled=false, bool halfspec=false) -{ - typedef typename NumTraits::Real Scalar; - typedef typename std::complex Complex; - int nits = NDATA/nfft; - vector inbuf(nfft); - vector outbuf(nfft); - FFT< Scalar > fft; - - if (unscaled) { - fft.SetFlag(fft.Unscaled); - cout << "unscaled "; - } - if (halfspec) { - fft.SetFlag(fft.HalfSpectrum); - cout << "halfspec "; - } - - - std::fill(inbuf.begin(),inbuf.end(),0); - fft.fwd( outbuf , inbuf); - - BenchTimer timer; - timer.reset(); - for (int k=0;k<8;++k) { - timer.start(); - if (fwd) - for(int i = 0; i < nits; i++) - fft.fwd( outbuf , inbuf); - else - for(int i = 0; i < nits; i++) - fft.inv(inbuf,outbuf); - timer.stop(); - } - - cout << nameof() << " "; - double mflops = 5.*nfft*log2((double)nfft) / (1e6 * timer.value() / (double)nits ); - if ( NumTraits::IsComplex ) { - cout << "complex"; - }else{ - cout << "real "; - mflops /= 2; - } - - - if (fwd) - cout << " fwd"; - else - cout << " inv"; - - cout << " NFFT=" << nfft << " " << (double(1e-6*nfft*nits)/timer.value()) << " MS/s " << mflops << "MFLOPS\n"; -} - -int main(int argc,char ** argv) -{ - bench >(NFFT,true); - bench >(NFFT,false); - bench(NFFT,true); - bench(NFFT,false); - bench(NFFT,false,true); - bench(NFFT,false,true,true); - - bench >(NFFT,true); - bench >(NFFT,false); - bench(NFFT,true); - bench(NFFT,false); - bench >(NFFT,true); - bench >(NFFT,false); - bench(NFFT,true); - bench(NFFT,false); - return 0; -} diff --git a/eigen/bench/benchGeometry.cpp b/eigen/bench/benchGeometry.cpp deleted file mode 100644 index 6e16c03..0000000 --- a/eigen/bench/benchGeometry.cpp +++ /dev/null @@ -1,134 +0,0 @@ -#include -#include -#include -#include -#include - -using namespace Eigen; -using namespace std; - -#ifndef REPEAT -#define REPEAT 1000000 -#endif - -enum func_opt -{ - TV, - TMATV, - TMATVMAT, -}; - - -template -struct func; - -template -struct func -{ - static EIGEN_DONT_INLINE res run( arg1& a1, arg2& a2 ) - { - asm (""); - return a1 * a2; - } -}; - -template -struct func -{ - static EIGEN_DONT_INLINE res run( arg1& a1, arg2& a2 ) - { - asm (""); - return a1.matrix() * a2; - } -}; - -template -struct func -{ - static EIGEN_DONT_INLINE res run( arg1& a1, arg2& a2 ) - { - asm (""); - return res(a1.matrix() * a2.matrix()); - } -}; - -template -struct test_transform -{ - static void run() - { - arg1 a1; - a1.setIdentity(); - arg2 a2; - a2.setIdentity(); - - BenchTimer timer; - timer.reset(); - for (int k=0; k<10; ++k) - { - timer.start(); - for (int k=0; k Trans;\ - typedef Matrix Vec;\ - typedef func Func;\ - test_transform< Func, Trans, Vec >::run();\ - } - -#define run_trans( op, scalar, mode, option ) \ - std::cout << #scalar << "\t " << #mode << "\t " << #option << " "; \ - {\ - typedef Transform Trans;\ - typedef func Func;\ - test_transform< Func, Trans, Trans >::run();\ - } - -int main(int argc, char* argv[]) -{ - cout << "vec = trans * vec" << endl; - run_vec(TV, float, Isometry, AutoAlign, 3); - run_vec(TV, float, Isometry, DontAlign, 3); - run_vec(TV, float, Isometry, AutoAlign, 4); - run_vec(TV, float, Isometry, DontAlign, 4); - run_vec(TV, float, Projective, AutoAlign, 4); - run_vec(TV, float, Projective, DontAlign, 4); - run_vec(TV, double, Isometry, AutoAlign, 3); - run_vec(TV, double, Isometry, DontAlign, 3); - run_vec(TV, double, Isometry, AutoAlign, 4); - run_vec(TV, double, Isometry, DontAlign, 4); - run_vec(TV, double, Projective, AutoAlign, 4); - run_vec(TV, double, Projective, DontAlign, 4); - - cout << "vec = trans.matrix() * vec" << endl; - run_vec(TMATV, float, Isometry, AutoAlign, 4); - run_vec(TMATV, float, Isometry, DontAlign, 4); - run_vec(TMATV, double, Isometry, AutoAlign, 4); - run_vec(TMATV, double, Isometry, DontAlign, 4); - - cout << "trans = trans1 * trans" << endl; - run_trans(TV, float, Isometry, AutoAlign); - run_trans(TV, float, Isometry, DontAlign); - run_trans(TV, double, Isometry, AutoAlign); - run_trans(TV, double, Isometry, DontAlign); - run_trans(TV, float, Projective, AutoAlign); - run_trans(TV, float, Projective, DontAlign); - run_trans(TV, double, Projective, AutoAlign); - run_trans(TV, double, Projective, DontAlign); - - cout << "trans = trans1.matrix() * trans.matrix()" << endl; - run_trans(TMATVMAT, float, Isometry, AutoAlign); - run_trans(TMATVMAT, float, Isometry, DontAlign); - run_trans(TMATVMAT, double, Isometry, AutoAlign); - run_trans(TMATVMAT, double, Isometry, DontAlign); -} - diff --git a/eigen/bench/benchVecAdd.cpp b/eigen/bench/benchVecAdd.cpp deleted file mode 100644 index ce8e1e9..0000000 --- a/eigen/bench/benchVecAdd.cpp +++ /dev/null @@ -1,135 +0,0 @@ - -#include -#include -#include -using namespace Eigen; - -#ifndef SIZE -#define SIZE 50 -#endif - -#ifndef REPEAT -#define REPEAT 10000 -#endif - -typedef float Scalar; - -__attribute__ ((noinline)) void benchVec(Scalar* a, Scalar* b, Scalar* c, int size); -__attribute__ ((noinline)) void benchVec(MatrixXf& a, MatrixXf& b, MatrixXf& c); -__attribute__ ((noinline)) void benchVec(VectorXf& a, VectorXf& b, VectorXf& c); - -int main(int argc, char* argv[]) -{ - int size = SIZE * 8; - int size2 = size * size; - Scalar* a = internal::aligned_new(size2); - Scalar* b = internal::aligned_new(size2+4)+1; - Scalar* c = internal::aligned_new(size2); - - for (int i=0; i2 ; --innersize) - { - if (size2%innersize==0) - { - int outersize = size2/innersize; - MatrixXf ma = Map(a, innersize, outersize ); - MatrixXf mb = Map(b, innersize, outersize ); - MatrixXf mc = Map(c, innersize, outersize ); - timer.reset(); - for (int k=0; k<3; ++k) - { - timer.start(); - benchVec(ma, mb, mc); - timer.stop(); - } - std::cout << innersize << " x " << outersize << " " << timer.value() << "s " << (double(size2*REPEAT)/timer.value())/(1024.*1024.*1024.) << " GFlops\n"; - } - } - - VectorXf va = Map(a, size2); - VectorXf vb = Map(b, size2); - VectorXf vc = Map(c, size2); - timer.reset(); - for (int k=0; k<3; ++k) - { - timer.start(); - benchVec(va, vb, vc); - timer.stop(); - } - std::cout << timer.value() << "s " << (double(size2*REPEAT)/timer.value())/(1024.*1024.*1024.) << " GFlops\n"; - - return 0; -} - -void benchVec(MatrixXf& a, MatrixXf& b, MatrixXf& c) -{ - for (int k=0; k::type PacketScalar; - const int PacketSize = internal::packet_traits::size; - PacketScalar a0, a1, a2, a3, b0, b1, b2, b3; - for (int k=0; k -// -DSCALARA=double or -DSCALARB=double -// -DHAVE_BLAS -// -DDECOUPLED -// - -#include -#include -#include - -using namespace std; -using namespace Eigen; - -#ifndef SCALAR -// #define SCALAR std::complex -#define SCALAR float -#endif - -#ifndef SCALARA -#define SCALARA SCALAR -#endif - -#ifndef SCALARB -#define SCALARB SCALAR -#endif - -typedef SCALAR Scalar; -typedef NumTraits::Real RealScalar; -typedef Matrix A; -typedef Matrix B; -typedef Matrix C; -typedef Matrix M; - -#ifdef HAVE_BLAS - -extern "C" { - #include -} - -static float fone = 1; -static float fzero = 0; -static double done = 1; -static double szero = 0; -static std::complex cfone = 1; -static std::complex cfzero = 0; -static std::complex cdone = 1; -static std::complex cdzero = 0; -static char notrans = 'N'; -static char trans = 'T'; -static char nonunit = 'N'; -static char lower = 'L'; -static char right = 'R'; -static int intone = 1; - -void blas_gemm(const MatrixXf& a, const MatrixXf& b, MatrixXf& c) -{ - int M = c.rows(); int N = c.cols(); int K = a.cols(); - int lda = a.rows(); int ldb = b.rows(); int ldc = c.rows(); - - sgemm_(¬rans,¬rans,&M,&N,&K,&fone, - const_cast(a.data()),&lda, - const_cast(b.data()),&ldb,&fone, - c.data(),&ldc); -} - -EIGEN_DONT_INLINE void blas_gemm(const MatrixXd& a, const MatrixXd& b, MatrixXd& c) -{ - int M = c.rows(); int N = c.cols(); int K = a.cols(); - int lda = a.rows(); int ldb = b.rows(); int ldc = c.rows(); - - dgemm_(¬rans,¬rans,&M,&N,&K,&done, - const_cast(a.data()),&lda, - const_cast(b.data()),&ldb,&done, - c.data(),&ldc); -} - -void blas_gemm(const MatrixXcf& a, const MatrixXcf& b, MatrixXcf& c) -{ - int M = c.rows(); int N = c.cols(); int K = a.cols(); - int lda = a.rows(); int ldb = b.rows(); int ldc = c.rows(); - - cgemm_(¬rans,¬rans,&M,&N,&K,(float*)&cfone, - const_cast((const float*)a.data()),&lda, - const_cast((const float*)b.data()),&ldb,(float*)&cfone, - (float*)c.data(),&ldc); -} - -void blas_gemm(const MatrixXcd& a, const MatrixXcd& b, MatrixXcd& c) -{ - int M = c.rows(); int N = c.cols(); int K = a.cols(); - int lda = a.rows(); int ldb = b.rows(); int ldc = c.rows(); - - zgemm_(¬rans,¬rans,&M,&N,&K,(double*)&cdone, - const_cast((const double*)a.data()),&lda, - const_cast((const double*)b.data()),&ldb,(double*)&cdone, - (double*)c.data(),&ldc); -} - - - -#endif - -void matlab_cplx_cplx(const M& ar, const M& ai, const M& br, const M& bi, M& cr, M& ci) -{ - cr.noalias() += ar * br; - cr.noalias() -= ai * bi; - ci.noalias() += ar * bi; - ci.noalias() += ai * br; -} - -void matlab_real_cplx(const M& a, const M& br, const M& bi, M& cr, M& ci) -{ - cr.noalias() += a * br; - ci.noalias() += a * bi; -} - -void matlab_cplx_real(const M& ar, const M& ai, const M& b, M& cr, M& ci) -{ - cr.noalias() += ar * b; - ci.noalias() += ai * b; -} - -template -EIGEN_DONT_INLINE void gemm(const A& a, const B& b, C& c) -{ - c.noalias() += a * b; -} - -int main(int argc, char ** argv) -{ - std::ptrdiff_t l1 = internal::queryL1CacheSize(); - std::ptrdiff_t l2 = internal::queryTopLevelCacheSize(); - std::cout << "L1 cache size = " << (l1>0 ? l1/1024 : -1) << " KB\n"; - std::cout << "L2/L3 cache size = " << (l2>0 ? l2/1024 : -1) << " KB\n"; - typedef internal::gebp_traits Traits; - std::cout << "Register blocking = " << Traits::mr << " x " << Traits::nr << "\n"; - - int rep = 1; // number of repetitions per try - int tries = 2; // number of tries, we keep the best - - int s = 2048; - int m = s; - int n = s; - int p = s; - int cache_size1=-1, cache_size2=l2, cache_size3 = 0; - - bool need_help = false; - for (int i=1; i -c -t -p \n"; - std::cout << " : size\n"; - std::cout << " : rows columns depth\n"; - return 1; - } - -#if EIGEN_VERSION_AT_LEAST(3,2,90) - if(cache_size1>0) - setCpuCacheSizes(cache_size1,cache_size2,cache_size3); -#endif - - A a(m,p); a.setRandom(); - B b(p,n); b.setRandom(); - C c(m,n); c.setOnes(); - C rc = c; - - std::cout << "Matrix sizes = " << m << "x" << p << " * " << p << "x" << n << "\n"; - std::ptrdiff_t mc(m), nc(n), kc(p); - internal::computeProductBlockingSizes(kc, mc, nc); - std::cout << "blocking size (mc x kc) = " << mc << " x " << kc << "\n"; - - C r = c; - - // check the parallel product is correct - #if defined EIGEN_HAS_OPENMP - Eigen::initParallel(); - int procs = omp_get_max_threads(); - if(procs>1) - { - #ifdef HAVE_BLAS - blas_gemm(a,b,r); - #else - omp_set_num_threads(1); - r.noalias() += a * b; - omp_set_num_threads(procs); - #endif - c.noalias() += a * b; - if(!r.isApprox(c)) std::cerr << "Warning, your parallel product is crap!\n\n"; - } - #elif defined HAVE_BLAS - blas_gemm(a,b,r); - c.noalias() += a * b; - if(!r.isApprox(c)) { - std::cout << r - c << "\n"; - std::cerr << "Warning, your product is crap!\n\n"; - } - #else - if(1.*m*n*p<2000.*2000*2000) - { - gemm(a,b,c); - r.noalias() += a.cast() .lazyProduct( b.cast() ); - if(!r.isApprox(c)) { - std::cout << r - c << "\n"; - std::cerr << "Warning, your product is crap!\n\n"; - } - } - #endif - - #ifdef HAVE_BLAS - BenchTimer tblas; - c = rc; - BENCH(tblas, tries, rep, blas_gemm(a,b,c)); - std::cout << "blas cpu " << tblas.best(CPU_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tblas.best(CPU_TIMER))*1e-9 << " GFLOPS \t(" << tblas.total(CPU_TIMER) << "s)\n"; - std::cout << "blas real " << tblas.best(REAL_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tblas.best(REAL_TIMER))*1e-9 << " GFLOPS \t(" << tblas.total(REAL_TIMER) << "s)\n"; - #endif - - BenchTimer tmt; - c = rc; - BENCH(tmt, tries, rep, gemm(a,b,c)); - std::cout << "eigen cpu " << tmt.best(CPU_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tmt.best(CPU_TIMER))*1e-9 << " GFLOPS \t(" << tmt.total(CPU_TIMER) << "s)\n"; - std::cout << "eigen real " << tmt.best(REAL_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tmt.best(REAL_TIMER))*1e-9 << " GFLOPS \t(" << tmt.total(REAL_TIMER) << "s)\n"; - - #ifdef EIGEN_HAS_OPENMP - if(procs>1) - { - BenchTimer tmono; - omp_set_num_threads(1); - Eigen::setNbThreads(1); - c = rc; - BENCH(tmono, tries, rep, gemm(a,b,c)); - std::cout << "eigen mono cpu " << tmono.best(CPU_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tmono.best(CPU_TIMER))*1e-9 << " GFLOPS \t(" << tmono.total(CPU_TIMER) << "s)\n"; - std::cout << "eigen mono real " << tmono.best(REAL_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tmono.best(REAL_TIMER))*1e-9 << " GFLOPS \t(" << tmono.total(REAL_TIMER) << "s)\n"; - std::cout << "mt speed up x" << tmono.best(CPU_TIMER) / tmt.best(REAL_TIMER) << " => " << (100.0*tmono.best(CPU_TIMER) / tmt.best(REAL_TIMER))/procs << "%\n"; - } - #endif - - if(1.*m*n*p<30*30*30) - { - BenchTimer tmt; - c = rc; - BENCH(tmt, tries, rep, c.noalias()+=a.lazyProduct(b)); - std::cout << "lazy cpu " << tmt.best(CPU_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tmt.best(CPU_TIMER))*1e-9 << " GFLOPS \t(" << tmt.total(CPU_TIMER) << "s)\n"; - std::cout << "lazy real " << tmt.best(REAL_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/tmt.best(REAL_TIMER))*1e-9 << " GFLOPS \t(" << tmt.total(REAL_TIMER) << "s)\n"; - } - - #ifdef DECOUPLED - if((NumTraits::IsComplex) && (NumTraits::IsComplex)) - { - M ar(m,p); ar.setRandom(); - M ai(m,p); ai.setRandom(); - M br(p,n); br.setRandom(); - M bi(p,n); bi.setRandom(); - M cr(m,n); cr.setRandom(); - M ci(m,n); ci.setRandom(); - - BenchTimer t; - BENCH(t, tries, rep, matlab_cplx_cplx(ar,ai,br,bi,cr,ci)); - std::cout << "\"matlab\" cpu " << t.best(CPU_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/t.best(CPU_TIMER))*1e-9 << " GFLOPS \t(" << t.total(CPU_TIMER) << "s)\n"; - std::cout << "\"matlab\" real " << t.best(REAL_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/t.best(REAL_TIMER))*1e-9 << " GFLOPS \t(" << t.total(REAL_TIMER) << "s)\n"; - } - if((!NumTraits::IsComplex) && (NumTraits::IsComplex)) - { - M a(m,p); a.setRandom(); - M br(p,n); br.setRandom(); - M bi(p,n); bi.setRandom(); - M cr(m,n); cr.setRandom(); - M ci(m,n); ci.setRandom(); - - BenchTimer t; - BENCH(t, tries, rep, matlab_real_cplx(a,br,bi,cr,ci)); - std::cout << "\"matlab\" cpu " << t.best(CPU_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/t.best(CPU_TIMER))*1e-9 << " GFLOPS \t(" << t.total(CPU_TIMER) << "s)\n"; - std::cout << "\"matlab\" real " << t.best(REAL_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/t.best(REAL_TIMER))*1e-9 << " GFLOPS \t(" << t.total(REAL_TIMER) << "s)\n"; - } - if((NumTraits::IsComplex) && (!NumTraits::IsComplex)) - { - M ar(m,p); ar.setRandom(); - M ai(m,p); ai.setRandom(); - M b(p,n); b.setRandom(); - M cr(m,n); cr.setRandom(); - M ci(m,n); ci.setRandom(); - - BenchTimer t; - BENCH(t, tries, rep, matlab_cplx_real(ar,ai,b,cr,ci)); - std::cout << "\"matlab\" cpu " << t.best(CPU_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/t.best(CPU_TIMER))*1e-9 << " GFLOPS \t(" << t.total(CPU_TIMER) << "s)\n"; - std::cout << "\"matlab\" real " << t.best(REAL_TIMER)/rep << "s \t" << (double(m)*n*p*rep*2/t.best(REAL_TIMER))*1e-9 << " GFLOPS \t(" << t.total(REAL_TIMER) << "s)\n"; - } - #endif - - return 0; -} - diff --git a/eigen/bench/bench_multi_compilers.sh b/eigen/bench/bench_multi_compilers.sh deleted file mode 100644 index 27e91f1..0000000 --- a/eigen/bench/bench_multi_compilers.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -if (($# < 2)); then - echo "Usage: $0 compilerlist.txt benchfile.cpp" -else - -compilerlist=$1 -benchfile=$2 - -g=0 -source $compilerlist - -# for each compiler, compile benchfile and run the benchmark -for (( i=0 ; i /dev/null - echo "" - else - echo "compiler not found: $compiler" - fi -done - -fi diff --git a/eigen/bench/bench_norm.cpp b/eigen/bench/bench_norm.cpp deleted file mode 100644 index 129afcf..0000000 --- a/eigen/bench/bench_norm.cpp +++ /dev/null @@ -1,360 +0,0 @@ -#include -#include -#include -#include "BenchTimer.h" -using namespace Eigen; -using namespace std; - -template -EIGEN_DONT_INLINE typename T::Scalar sqsumNorm(T& v) -{ - return v.norm(); -} - -template -EIGEN_DONT_INLINE typename T::Scalar stableNorm(T& v) -{ - return v.stableNorm(); -} - -template -EIGEN_DONT_INLINE typename T::Scalar hypotNorm(T& v) -{ - return v.hypotNorm(); -} - -template -EIGEN_DONT_INLINE typename T::Scalar blueNorm(T& v) -{ - return v.blueNorm(); -} - -template -EIGEN_DONT_INLINE typename T::Scalar lapackNorm(T& v) -{ - typedef typename T::Scalar Scalar; - int n = v.size(); - Scalar scale = 0; - Scalar ssq = 1; - for (int i=0;i= ax) - { - ssq += numext::abs2(ax/scale); - } - else - { - ssq = Scalar(1) + ssq * numext::abs2(scale/ax); - scale = ax; - } - } - return scale * std::sqrt(ssq); -} - -template -EIGEN_DONT_INLINE typename T::Scalar twopassNorm(T& v) -{ - typedef typename T::Scalar Scalar; - Scalar s = v.array().abs().maxCoeff(); - return s*(v/s).norm(); -} - -template -EIGEN_DONT_INLINE typename T::Scalar bl2passNorm(T& v) -{ - return v.stableNorm(); -} - -template -EIGEN_DONT_INLINE typename T::Scalar divacNorm(T& v) -{ - int n =v.size() / 2; - for (int i=0;i0) - { - for (int i=0;i -EIGEN_DONT_INLINE typename T::Scalar pblueNorm(const T& v) -{ - #ifndef EIGEN_VECTORIZE - return v.blueNorm(); - #else - typedef typename T::Scalar Scalar; - - static int nmax = 0; - static Scalar b1, b2, s1m, s2m, overfl, rbig, relerr; - int n; - - if(nmax <= 0) - { - int nbig, ibeta, it, iemin, iemax, iexp; - Scalar abig, eps; - - nbig = std::numeric_limits::max(); // largest integer - ibeta = std::numeric_limits::radix; //NumTraits::Base; // base for floating-point numbers - it = std::numeric_limits::digits; //NumTraits::Mantissa; // number of base-beta digits in mantissa - iemin = std::numeric_limits::min_exponent; // minimum exponent - iemax = std::numeric_limits::max_exponent; // maximum exponent - rbig = std::numeric_limits::max(); // largest floating-point number - - // Check the basic machine-dependent constants. - if(iemin > 1 - 2*it || 1+it>iemax || (it==2 && ibeta<5) - || (it<=4 && ibeta <= 3 ) || it<2) - { - eigen_assert(false && "the algorithm cannot be guaranteed on this computer"); - } - iexp = -((1-iemin)/2); - b1 = std::pow(ibeta, iexp); // lower boundary of midrange - iexp = (iemax + 1 - it)/2; - b2 = std::pow(ibeta,iexp); // upper boundary of midrange - - iexp = (2-iemin)/2; - s1m = std::pow(ibeta,iexp); // scaling factor for lower range - iexp = - ((iemax+it)/2); - s2m = std::pow(ibeta,iexp); // scaling factor for upper range - - overfl = rbig*s2m; // overfow boundary for abig - eps = std::pow(ibeta, 1-it); - relerr = std::sqrt(eps); // tolerance for neglecting asml - abig = 1.0/eps - 1.0; - if (Scalar(nbig)>abig) nmax = abig; // largest safe n - else nmax = nbig; - } - - typedef typename internal::packet_traits::type Packet; - const int ps = internal::packet_traits::size; - Packet pasml = internal::pset1(Scalar(0)); - Packet pamed = internal::pset1(Scalar(0)); - Packet pabig = internal::pset1(Scalar(0)); - Packet ps2m = internal::pset1(s2m); - Packet ps1m = internal::pset1(s1m); - Packet pb2 = internal::pset1(b2); - Packet pb1 = internal::pset1(b1); - for(int j=0; j(j)); - Packet ax_s2m = internal::pmul(ax,ps2m); - Packet ax_s1m = internal::pmul(ax,ps1m); - Packet maskBig = internal::plt(pb2,ax); - Packet maskSml = internal::plt(ax,pb1); - -// Packet maskMed = internal::pand(maskSml,maskBig); -// Packet scale = internal::pset1(Scalar(0)); -// scale = internal::por(scale, internal::pand(maskBig,ps2m)); -// scale = internal::por(scale, internal::pand(maskSml,ps1m)); -// scale = internal::por(scale, internal::pandnot(internal::pset1(Scalar(1)),maskMed)); -// ax = internal::pmul(ax,scale); -// ax = internal::pmul(ax,ax); -// pabig = internal::padd(pabig, internal::pand(maskBig, ax)); -// pasml = internal::padd(pasml, internal::pand(maskSml, ax)); -// pamed = internal::padd(pamed, internal::pandnot(ax,maskMed)); - - - pabig = internal::padd(pabig, internal::pand(maskBig, internal::pmul(ax_s2m,ax_s2m))); - pasml = internal::padd(pasml, internal::pand(maskSml, internal::pmul(ax_s1m,ax_s1m))); - pamed = internal::padd(pamed, internal::pandnot(internal::pmul(ax,ax),internal::pand(maskSml,maskBig))); - } - Scalar abig = internal::predux(pabig); - Scalar asml = internal::predux(pasml); - Scalar amed = internal::predux(pamed); - if(abig > Scalar(0)) - { - abig = std::sqrt(abig); - if(abig > overfl) - { - eigen_assert(false && "overflow"); - return rbig; - } - if(amed > Scalar(0)) - { - abig = abig/s2m; - amed = std::sqrt(amed); - } - else - { - return abig/s2m; - } - - } - else if(asml > Scalar(0)) - { - if (amed > Scalar(0)) - { - abig = std::sqrt(amed); - amed = std::sqrt(asml) / s1m; - } - else - { - return std::sqrt(asml)/s1m; - } - } - else - { - return std::sqrt(amed); - } - asml = std::min(abig, amed); - abig = std::max(abig, amed); - if(asml <= abig*relerr) - return abig; - else - return abig * std::sqrt(Scalar(1) + numext::abs2(asml/abig)); - #endif -} - -#define BENCH_PERF(NRM) { \ - float af = 0; double ad = 0; std::complex ac = 0; \ - Eigen::BenchTimer tf, td, tcf; tf.reset(); td.reset(); tcf.reset();\ - for (int k=0; k()); - double yd = based * std::abs(internal::random()); - VectorXf vf = VectorXf::Ones(s) * yf; - VectorXd vd = VectorXd::Ones(s) * yd; - - std::cout << "reference\t" << std::sqrt(double(s))*yf << "\t" << std::sqrt(double(s))*yd << "\n"; - std::cout << "sqsumNorm\t" << sqsumNorm(vf) << "\t" << sqsumNorm(vd) << "\n"; - std::cout << "hypotNorm\t" << hypotNorm(vf) << "\t" << hypotNorm(vd) << "\n"; - std::cout << "blueNorm\t" << blueNorm(vf) << "\t" << blueNorm(vd) << "\n"; - std::cout << "pblueNorm\t" << pblueNorm(vf) << "\t" << pblueNorm(vd) << "\n"; - std::cout << "lapackNorm\t" << lapackNorm(vf) << "\t" << lapackNorm(vd) << "\n"; - std::cout << "twopassNorm\t" << twopassNorm(vf) << "\t" << twopassNorm(vd) << "\n"; - std::cout << "bl2passNorm\t" << bl2passNorm(vf) << "\t" << bl2passNorm(vd) << "\n"; -} - -void check_accuracy_var(int ef0, int ef1, int ed0, int ed1, int s) -{ - VectorXf vf(s); - VectorXd vd(s); - for (int i=0; i()) * std::pow(double(10), internal::random(ef0,ef1)); - vd[i] = std::abs(internal::random()) * std::pow(double(10), internal::random(ed0,ed1)); - } - - //std::cout << "reference\t" << internal::sqrt(double(s))*yf << "\t" << internal::sqrt(double(s))*yd << "\n"; - std::cout << "sqsumNorm\t" << sqsumNorm(vf) << "\t" << sqsumNorm(vd) << "\t" << sqsumNorm(vf.cast()) << "\t" << sqsumNorm(vd.cast()) << "\n"; - std::cout << "hypotNorm\t" << hypotNorm(vf) << "\t" << hypotNorm(vd) << "\t" << hypotNorm(vf.cast()) << "\t" << hypotNorm(vd.cast()) << "\n"; - std::cout << "blueNorm\t" << blueNorm(vf) << "\t" << blueNorm(vd) << "\t" << blueNorm(vf.cast()) << "\t" << blueNorm(vd.cast()) << "\n"; - std::cout << "pblueNorm\t" << pblueNorm(vf) << "\t" << pblueNorm(vd) << "\t" << blueNorm(vf.cast()) << "\t" << blueNorm(vd.cast()) << "\n"; - std::cout << "lapackNorm\t" << lapackNorm(vf) << "\t" << lapackNorm(vd) << "\t" << lapackNorm(vf.cast()) << "\t" << lapackNorm(vd.cast()) << "\n"; - std::cout << "twopassNorm\t" << twopassNorm(vf) << "\t" << twopassNorm(vd) << "\t" << twopassNorm(vf.cast()) << "\t" << twopassNorm(vd.cast()) << "\n"; -// std::cout << "bl2passNorm\t" << bl2passNorm(vf) << "\t" << bl2passNorm(vd) << "\t" << bl2passNorm(vf.cast()) << "\t" << bl2passNorm(vd.cast()) << "\n"; -} - -int main(int argc, char** argv) -{ - int tries = 10; - int iters = 100000; - double y = 1.1345743233455785456788e12 * internal::random(); - VectorXf v = VectorXf::Ones(1024) * y; - -// return 0; - int s = 10000; - double basef_ok = 1.1345743233455785456788e15; - double based_ok = 1.1345743233455785456788e95; - - double basef_under = 1.1345743233455785456788e-27; - double based_under = 1.1345743233455785456788e-303; - - double basef_over = 1.1345743233455785456788e+27; - double based_over = 1.1345743233455785456788e+302; - - std::cout.precision(20); - - std::cerr << "\nNo under/overflow:\n"; - check_accuracy(basef_ok, based_ok, s); - - std::cerr << "\nUnderflow:\n"; - check_accuracy(basef_under, based_under, s); - - std::cerr << "\nOverflow:\n"; - check_accuracy(basef_over, based_over, s); - - std::cerr << "\nVarying (over):\n"; - for (int k=0; k<1; ++k) - { - check_accuracy_var(20,27,190,302,s); - std::cout << "\n"; - } - - std::cerr << "\nVarying (under):\n"; - for (int k=0; k<1; ++k) - { - check_accuracy_var(-27,20,-302,-190,s); - std::cout << "\n"; - } - - y = 1; - std::cout.precision(4); - int s1 = 1024*1024*32; - std::cerr << "Performance (out of cache, " << s1 << "):\n"; - { - int iters = 1; - VectorXf vf = VectorXf::Random(s1) * y; - VectorXd vd = VectorXd::Random(s1) * y; - VectorXcf vcf = VectorXcf::Random(s1) * y; - BENCH_PERF(sqsumNorm); - BENCH_PERF(stableNorm); - BENCH_PERF(blueNorm); - BENCH_PERF(pblueNorm); - BENCH_PERF(lapackNorm); - BENCH_PERF(hypotNorm); - BENCH_PERF(twopassNorm); - BENCH_PERF(bl2passNorm); - } - - std::cerr << "\nPerformance (in cache, " << 512 << "):\n"; - { - int iters = 100000; - VectorXf vf = VectorXf::Random(512) * y; - VectorXd vd = VectorXd::Random(512) * y; - VectorXcf vcf = VectorXcf::Random(512) * y; - BENCH_PERF(sqsumNorm); - BENCH_PERF(stableNorm); - BENCH_PERF(blueNorm); - BENCH_PERF(pblueNorm); - BENCH_PERF(lapackNorm); - BENCH_PERF(hypotNorm); - BENCH_PERF(twopassNorm); - BENCH_PERF(bl2passNorm); - } -} diff --git a/eigen/bench/bench_reverse.cpp b/eigen/bench/bench_reverse.cpp deleted file mode 100644 index 1e69ca1..0000000 --- a/eigen/bench/bench_reverse.cpp +++ /dev/null @@ -1,84 +0,0 @@ - -#include -#include -#include -using namespace Eigen; - -#ifndef REPEAT -#define REPEAT 100000 -#endif - -#ifndef TRIES -#define TRIES 20 -#endif - -typedef double Scalar; - -template -__attribute__ ((noinline)) void bench_reverse(const MatrixType& m) -{ - int rows = m.rows(); - int cols = m.cols(); - int size = m.size(); - - int repeats = (REPEAT*1000)/size; - MatrixType a = MatrixType::Random(rows,cols); - MatrixType b = MatrixType::Random(rows,cols); - - BenchTimer timerB, timerH, timerV; - - Scalar acc = 0; - int r = internal::random(0,rows-1); - int c = internal::random(0,cols-1); - for (int t=0; t0; ++i) - { - bench_reverse(Matrix(dynsizes[i],dynsizes[i])); - bench_reverse(Matrix(dynsizes[i]*dynsizes[i])); - } -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); -// bench_reverse(Matrix()); - return 0; -} - diff --git a/eigen/bench/bench_sum.cpp b/eigen/bench/bench_sum.cpp deleted file mode 100644 index a3d925e..0000000 --- a/eigen/bench/bench_sum.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -using namespace Eigen; -using namespace std; - -int main() -{ - typedef Matrix Vec; - Vec v(SIZE); - v.setZero(); - v[0] = 1; - v[1] = 2; - for(int i = 0; i < 1000000; i++) - { - v.coeffRef(0) += v.sum() * SCALAR(1e-20); - } - cout << v.sum() << endl; -} diff --git a/eigen/bench/bench_unrolling b/eigen/bench/bench_unrolling deleted file mode 100644 index 8264438..0000000 --- a/eigen/bench/bench_unrolling +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# gcc : CXX="g++ -finline-limit=10000 -ftemplate-depth-2000 --param max-inline-recursive-depth=2000" -# icc : CXX="icpc -fast -no-inline-max-size -fno-exceptions" -CXX=${CXX-g++ -finline-limit=10000 -ftemplate-depth-2000 --param max-inline-recursive-depth=2000} # default value - -for ((i=1; i<16; ++i)); do - echo "Matrix size: $i x $i :" - $CXX -O3 -I.. -DNDEBUG benchmark.cpp -DMATSIZE=$i -DEIGEN_UNROLLING_LIMIT=400 -o benchmark && time ./benchmark >/dev/null - $CXX -O3 -I.. -DNDEBUG -finline-limit=10000 benchmark.cpp -DMATSIZE=$i -DEIGEN_DONT_USE_UNROLLED_LOOPS=1 -o benchmark && time ./benchmark >/dev/null - echo " " -done diff --git a/eigen/bench/benchmark-blocking-sizes.cpp b/eigen/bench/benchmark-blocking-sizes.cpp deleted file mode 100644 index 827be28..0000000 --- a/eigen/bench/benchmark-blocking-sizes.cpp +++ /dev/null @@ -1,677 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2015 Benoit Jacob -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#include -#include -#include -#include -#include -#include -#include - -bool eigen_use_specific_block_size; -int eigen_block_size_k, eigen_block_size_m, eigen_block_size_n; -#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZES eigen_use_specific_block_size -#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_K eigen_block_size_k -#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_M eigen_block_size_m -#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_N eigen_block_size_n -#include - -#include - -using namespace Eigen; -using namespace std; - -static BenchTimer timer; - -// how many times we repeat each measurement. -// measurements are randomly shuffled - we're not doing -// all N identical measurements in a row. -const int measurement_repetitions = 3; - -// Timings below this value are too short to be accurate, -// we'll repeat measurements with more iterations until -// we get a timing above that threshold. -const float min_accurate_time = 1e-2f; - -// See --min-working-set-size command line parameter. -size_t min_working_set_size = 0; - -float max_clock_speed = 0.0f; - -// range of sizes that we will benchmark (in all 3 K,M,N dimensions) -const size_t maxsize = 2048; -const size_t minsize = 16; - -typedef MatrixXf MatrixType; -typedef MatrixType::Scalar Scalar; -typedef internal::packet_traits::type Packet; - -static_assert((maxsize & (maxsize - 1)) == 0, "maxsize must be a power of two"); -static_assert((minsize & (minsize - 1)) == 0, "minsize must be a power of two"); -static_assert(maxsize > minsize, "maxsize must be larger than minsize"); -static_assert(maxsize < (minsize << 16), "maxsize must be less than (minsize<<16)"); - -// just a helper to store a triple of K,M,N sizes for matrix product -struct size_triple_t -{ - size_t k, m, n; - size_triple_t() : k(0), m(0), n(0) {} - size_triple_t(size_t _k, size_t _m, size_t _n) : k(_k), m(_m), n(_n) {} - size_triple_t(const size_triple_t& o) : k(o.k), m(o.m), n(o.n) {} - size_triple_t(uint16_t compact) - { - k = 1 << ((compact & 0xf00) >> 8); - m = 1 << ((compact & 0x0f0) >> 4); - n = 1 << ((compact & 0x00f) >> 0); - } -}; - -uint8_t log2_pot(size_t x) { - size_t l = 0; - while (x >>= 1) l++; - return l; -} - -// Convert between size tripes and a compact form fitting in 12 bits -// where each size, which must be a POT, is encoded as its log2, on 4 bits -// so the largest representable size is 2^15 == 32k ... big enough. -uint16_t compact_size_triple(size_t k, size_t m, size_t n) -{ - return (log2_pot(k) << 8) | (log2_pot(m) << 4) | log2_pot(n); -} - -uint16_t compact_size_triple(const size_triple_t& t) -{ - return compact_size_triple(t.k, t.m, t.n); -} - -// A single benchmark. Initially only contains benchmark params. -// Then call run(), which stores the result in the gflops field. -struct benchmark_t -{ - uint16_t compact_product_size; - uint16_t compact_block_size; - bool use_default_block_size; - float gflops; - benchmark_t() - : compact_product_size(0) - , compact_block_size(0) - , use_default_block_size(false) - , gflops(0) - { - } - benchmark_t(size_t pk, size_t pm, size_t pn, - size_t bk, size_t bm, size_t bn) - : compact_product_size(compact_size_triple(pk, pm, pn)) - , compact_block_size(compact_size_triple(bk, bm, bn)) - , use_default_block_size(false) - , gflops(0) - {} - benchmark_t(size_t pk, size_t pm, size_t pn) - : compact_product_size(compact_size_triple(pk, pm, pn)) - , compact_block_size(0) - , use_default_block_size(true) - , gflops(0) - {} - - void run(); -}; - -ostream& operator<<(ostream& s, const benchmark_t& b) -{ - s << hex << b.compact_product_size << dec; - if (b.use_default_block_size) { - size_triple_t t(b.compact_product_size); - Index k = t.k, m = t.m, n = t.n; - internal::computeProductBlockingSizes(k, m, n); - s << " default(" << k << ", " << m << ", " << n << ")"; - } else { - s << " " << hex << b.compact_block_size << dec; - } - s << " " << b.gflops; - return s; -} - -// We sort first by increasing benchmark parameters, -// then by decreasing performance. -bool operator<(const benchmark_t& b1, const benchmark_t& b2) -{ - return b1.compact_product_size < b2.compact_product_size || - (b1.compact_product_size == b2.compact_product_size && ( - (b1.compact_block_size < b2.compact_block_size || ( - b1.compact_block_size == b2.compact_block_size && - b1.gflops > b2.gflops)))); -} - -void benchmark_t::run() -{ - size_triple_t productsizes(compact_product_size); - - if (use_default_block_size) { - eigen_use_specific_block_size = false; - } else { - // feed eigen with our custom blocking params - eigen_use_specific_block_size = true; - size_triple_t blocksizes(compact_block_size); - eigen_block_size_k = blocksizes.k; - eigen_block_size_m = blocksizes.m; - eigen_block_size_n = blocksizes.n; - } - - // set up the matrix pool - - const size_t combined_three_matrices_sizes = - sizeof(Scalar) * - (productsizes.k * productsizes.m + - productsizes.k * productsizes.n + - productsizes.m * productsizes.n); - - // 64 M is large enough that nobody has a cache bigger than that, - // while still being small enough that everybody has this much RAM, - // so conveniently we don't need to special-case platforms here. - const size_t unlikely_large_cache_size = 64 << 20; - - const size_t working_set_size = - min_working_set_size ? min_working_set_size : unlikely_large_cache_size; - - const size_t matrix_pool_size = - 1 + working_set_size / combined_three_matrices_sizes; - - MatrixType *lhs = new MatrixType[matrix_pool_size]; - MatrixType *rhs = new MatrixType[matrix_pool_size]; - MatrixType *dst = new MatrixType[matrix_pool_size]; - - for (size_t i = 0; i < matrix_pool_size; i++) { - lhs[i] = MatrixType::Zero(productsizes.m, productsizes.k); - rhs[i] = MatrixType::Zero(productsizes.k, productsizes.n); - dst[i] = MatrixType::Zero(productsizes.m, productsizes.n); - } - - // main benchmark loop - - int iters_at_a_time = 1; - float time_per_iter = 0.0f; - size_t matrix_index = 0; - while (true) { - - double starttime = timer.getCpuTime(); - for (int i = 0; i < iters_at_a_time; i++) { - dst[matrix_index].noalias() = lhs[matrix_index] * rhs[matrix_index]; - matrix_index++; - if (matrix_index == matrix_pool_size) { - matrix_index = 0; - } - } - double endtime = timer.getCpuTime(); - - const float timing = float(endtime - starttime); - - if (timing >= min_accurate_time) { - time_per_iter = timing / iters_at_a_time; - break; - } - - iters_at_a_time *= 2; - } - - delete[] lhs; - delete[] rhs; - delete[] dst; - - gflops = 2e-9 * productsizes.k * productsizes.m * productsizes.n / time_per_iter; -} - -void print_cpuinfo() -{ -#ifdef __linux__ - cout << "contents of /proc/cpuinfo:" << endl; - string line; - ifstream cpuinfo("/proc/cpuinfo"); - if (cpuinfo.is_open()) { - while (getline(cpuinfo, line)) { - cout << line << endl; - } - cpuinfo.close(); - } - cout << endl; -#elif defined __APPLE__ - cout << "output of sysctl hw:" << endl; - system("sysctl hw"); - cout << endl; -#endif -} - -template -string type_name() -{ - return "unknown"; -} - -template<> -string type_name() -{ - return "float"; -} - -template<> -string type_name() -{ - return "double"; -} - -struct action_t -{ - virtual const char* invokation_name() const { abort(); return nullptr; } - virtual void run() const { abort(); } - virtual ~action_t() {} -}; - -void show_usage_and_exit(int /*argc*/, char* argv[], - const vector>& available_actions) -{ - cerr << "usage: " << argv[0] << " [options...]" << endl << endl; - cerr << "available actions:" << endl << endl; - for (auto it = available_actions.begin(); it != available_actions.end(); ++it) { - cerr << " " << (*it)->invokation_name() << endl; - } - cerr << endl; - cerr << "options:" << endl << endl; - cerr << " --min-working-set-size=N:" << endl; - cerr << " Set the minimum working set size to N bytes." << endl; - cerr << " This is rounded up as needed to a multiple of matrix size." << endl; - cerr << " A larger working set lowers the chance of a warm cache." << endl; - cerr << " The default value 0 means use a large enough working" << endl; - cerr << " set to likely outsize caches." << endl; - cerr << " A value of 1 (that is, 1 byte) would mean don't do anything to" << endl; - cerr << " avoid warm caches." << endl; - exit(1); -} - -float measure_clock_speed() -{ - cerr << "Measuring clock speed... \r" << flush; - - vector all_gflops; - for (int i = 0; i < 8; i++) { - benchmark_t b(1024, 1024, 1024); - b.run(); - all_gflops.push_back(b.gflops); - } - - sort(all_gflops.begin(), all_gflops.end()); - float stable_estimate = all_gflops[2] + all_gflops[3] + all_gflops[4] + all_gflops[5]; - - // multiply by an arbitrary constant to discourage trying doing anything with the - // returned values besides just comparing them with each other. - float result = stable_estimate * 123.456f; - - return result; -} - -struct human_duration_t -{ - int seconds; - human_duration_t(int s) : seconds(s) {} -}; - -ostream& operator<<(ostream& s, const human_duration_t& d) -{ - int remainder = d.seconds; - if (remainder > 3600) { - int hours = remainder / 3600; - s << hours << " h "; - remainder -= hours * 3600; - } - if (remainder > 60) { - int minutes = remainder / 60; - s << minutes << " min "; - remainder -= minutes * 60; - } - if (d.seconds < 600) { - s << remainder << " s"; - } - return s; -} - -const char session_filename[] = "/data/local/tmp/benchmark-blocking-sizes-session.data"; - -void serialize_benchmarks(const char* filename, const vector& benchmarks, size_t first_benchmark_to_run) -{ - FILE* file = fopen(filename, "w"); - if (!file) { - cerr << "Could not open file " << filename << " for writing." << endl; - cerr << "Do you have write permissions on the current working directory?" << endl; - exit(1); - } - size_t benchmarks_vector_size = benchmarks.size(); - fwrite(&max_clock_speed, sizeof(max_clock_speed), 1, file); - fwrite(&benchmarks_vector_size, sizeof(benchmarks_vector_size), 1, file); - fwrite(&first_benchmark_to_run, sizeof(first_benchmark_to_run), 1, file); - fwrite(benchmarks.data(), sizeof(benchmark_t), benchmarks.size(), file); - fclose(file); -} - -bool deserialize_benchmarks(const char* filename, vector& benchmarks, size_t& first_benchmark_to_run) -{ - FILE* file = fopen(filename, "r"); - if (!file) { - return false; - } - if (1 != fread(&max_clock_speed, sizeof(max_clock_speed), 1, file)) { - return false; - } - size_t benchmarks_vector_size = 0; - if (1 != fread(&benchmarks_vector_size, sizeof(benchmarks_vector_size), 1, file)) { - return false; - } - if (1 != fread(&first_benchmark_to_run, sizeof(first_benchmark_to_run), 1, file)) { - return false; - } - benchmarks.resize(benchmarks_vector_size); - if (benchmarks.size() != fread(benchmarks.data(), sizeof(benchmark_t), benchmarks.size(), file)) { - return false; - } - unlink(filename); - return true; -} - -void try_run_some_benchmarks( - vector& benchmarks, - double time_start, - size_t& first_benchmark_to_run) -{ - if (first_benchmark_to_run == benchmarks.size()) { - return; - } - - double time_last_progress_update = 0; - double time_last_clock_speed_measurement = 0; - double time_now = 0; - - size_t benchmark_index = first_benchmark_to_run; - - while (true) { - float ratio_done = float(benchmark_index) / benchmarks.size(); - time_now = timer.getRealTime(); - - // We check clock speed every minute and at the end. - if (benchmark_index == benchmarks.size() || - time_now > time_last_clock_speed_measurement + 60.0f) - { - time_last_clock_speed_measurement = time_now; - - // Ensure that clock speed is as expected - float current_clock_speed = measure_clock_speed(); - - // The tolerance needs to be smaller than the relative difference between - // clock speeds that a device could operate under. - // It seems unlikely that a device would be throttling clock speeds by - // amounts smaller than 2%. - // With a value of 1%, I was getting within noise on a Sandy Bridge. - const float clock_speed_tolerance = 0.02f; - - if (current_clock_speed > (1 + clock_speed_tolerance) * max_clock_speed) { - // Clock speed is now higher than we previously measured. - // Either our initial measurement was inaccurate, which won't happen - // too many times as we are keeping the best clock speed value and - // and allowing some tolerance; or something really weird happened, - // which invalidates all benchmark results collected so far. - // Either way, we better restart all over again now. - if (benchmark_index) { - cerr << "Restarting at " << 100.0f * ratio_done - << " % because clock speed increased. " << endl; - } - max_clock_speed = current_clock_speed; - first_benchmark_to_run = 0; - return; - } - - bool rerun_last_tests = false; - - if (current_clock_speed < (1 - clock_speed_tolerance) * max_clock_speed) { - cerr << "Measurements completed so far: " - << 100.0f * ratio_done - << " % " << endl; - cerr << "Clock speed seems to be only " - << current_clock_speed/max_clock_speed - << " times what it used to be." << endl; - - unsigned int seconds_to_sleep_if_lower_clock_speed = 1; - - while (current_clock_speed < (1 - clock_speed_tolerance) * max_clock_speed) { - if (seconds_to_sleep_if_lower_clock_speed > 32) { - cerr << "Sleeping longer probably won't make a difference." << endl; - cerr << "Serializing benchmarks to " << session_filename << endl; - serialize_benchmarks(session_filename, benchmarks, first_benchmark_to_run); - cerr << "Now restart this benchmark, and it should pick up where we left." << endl; - exit(2); - } - rerun_last_tests = true; - cerr << "Sleeping " - << seconds_to_sleep_if_lower_clock_speed - << " s... \r" << endl; - sleep(seconds_to_sleep_if_lower_clock_speed); - current_clock_speed = measure_clock_speed(); - seconds_to_sleep_if_lower_clock_speed *= 2; - } - } - - if (rerun_last_tests) { - cerr << "Redoing the last " - << 100.0f * float(benchmark_index - first_benchmark_to_run) / benchmarks.size() - << " % because clock speed had been low. " << endl; - return; - } - - // nothing wrong with the clock speed so far, so there won't be a need to rerun - // benchmarks run so far in case we later encounter a lower clock speed. - first_benchmark_to_run = benchmark_index; - } - - if (benchmark_index == benchmarks.size()) { - // We're done! - first_benchmark_to_run = benchmarks.size(); - // Erase progress info - cerr << " " << endl; - return; - } - - // Display progress info on stderr - if (time_now > time_last_progress_update + 1.0f) { - time_last_progress_update = time_now; - cerr << "Measurements... " << 100.0f * ratio_done - << " %, ETA " - << human_duration_t(float(time_now - time_start) * (1.0f - ratio_done) / ratio_done) - << " \r" << flush; - } - - // This is where we actually run a benchmark! - benchmarks[benchmark_index].run(); - benchmark_index++; - } -} - -void run_benchmarks(vector& benchmarks) -{ - size_t first_benchmark_to_run; - vector deserialized_benchmarks; - bool use_deserialized_benchmarks = false; - if (deserialize_benchmarks(session_filename, deserialized_benchmarks, first_benchmark_to_run)) { - cerr << "Found serialized session with " - << 100.0f * first_benchmark_to_run / deserialized_benchmarks.size() - << " % already done" << endl; - if (deserialized_benchmarks.size() == benchmarks.size() && - first_benchmark_to_run > 0 && - first_benchmark_to_run < benchmarks.size()) - { - use_deserialized_benchmarks = true; - } - } - - if (use_deserialized_benchmarks) { - benchmarks = deserialized_benchmarks; - } else { - // not using deserialized benchmarks, starting from scratch - first_benchmark_to_run = 0; - - // Randomly shuffling benchmarks allows us to get accurate enough progress info, - // as now the cheap/expensive benchmarks are randomly mixed so they average out. - // It also means that if data is corrupted for some time span, the odds are that - // not all repetitions of a given benchmark will be corrupted. - random_shuffle(benchmarks.begin(), benchmarks.end()); - } - - for (int i = 0; i < 4; i++) { - max_clock_speed = max(max_clock_speed, measure_clock_speed()); - } - - double time_start = 0.0; - while (first_benchmark_to_run < benchmarks.size()) { - if (first_benchmark_to_run == 0) { - time_start = timer.getRealTime(); - } - try_run_some_benchmarks(benchmarks, - time_start, - first_benchmark_to_run); - } - - // Sort timings by increasing benchmark parameters, and decreasing gflops. - // The latter is very important. It means that we can ignore all but the first - // benchmark with given parameters. - sort(benchmarks.begin(), benchmarks.end()); - - // Collect best (i.e. now first) results for each parameter values. - vector best_benchmarks; - for (auto it = benchmarks.begin(); it != benchmarks.end(); ++it) { - if (best_benchmarks.empty() || - best_benchmarks.back().compact_product_size != it->compact_product_size || - best_benchmarks.back().compact_block_size != it->compact_block_size) - { - best_benchmarks.push_back(*it); - } - } - - // keep and return only the best benchmarks - benchmarks = best_benchmarks; -} - -struct measure_all_pot_sizes_action_t : action_t -{ - virtual const char* invokation_name() const { return "all-pot-sizes"; } - virtual void run() const - { - vector benchmarks; - for (int repetition = 0; repetition < measurement_repetitions; repetition++) { - for (size_t ksize = minsize; ksize <= maxsize; ksize *= 2) { - for (size_t msize = minsize; msize <= maxsize; msize *= 2) { - for (size_t nsize = minsize; nsize <= maxsize; nsize *= 2) { - for (size_t kblock = minsize; kblock <= ksize; kblock *= 2) { - for (size_t mblock = minsize; mblock <= msize; mblock *= 2) { - for (size_t nblock = minsize; nblock <= nsize; nblock *= 2) { - benchmarks.emplace_back(ksize, msize, nsize, kblock, mblock, nblock); - } - } - } - } - } - } - } - - run_benchmarks(benchmarks); - - cout << "BEGIN MEASUREMENTS ALL POT SIZES" << endl; - for (auto it = benchmarks.begin(); it != benchmarks.end(); ++it) { - cout << *it << endl; - } - } -}; - -struct measure_default_sizes_action_t : action_t -{ - virtual const char* invokation_name() const { return "default-sizes"; } - virtual void run() const - { - vector benchmarks; - for (int repetition = 0; repetition < measurement_repetitions; repetition++) { - for (size_t ksize = minsize; ksize <= maxsize; ksize *= 2) { - for (size_t msize = minsize; msize <= maxsize; msize *= 2) { - for (size_t nsize = minsize; nsize <= maxsize; nsize *= 2) { - benchmarks.emplace_back(ksize, msize, nsize); - } - } - } - } - - run_benchmarks(benchmarks); - - cout << "BEGIN MEASUREMENTS DEFAULT SIZES" << endl; - for (auto it = benchmarks.begin(); it != benchmarks.end(); ++it) { - cout << *it << endl; - } - } -}; - -int main(int argc, char* argv[]) -{ - double time_start = timer.getRealTime(); - cout.precision(4); - cerr.precision(4); - - vector> available_actions; - available_actions.emplace_back(new measure_all_pot_sizes_action_t); - available_actions.emplace_back(new measure_default_sizes_action_t); - - auto action = available_actions.end(); - - if (argc <= 1) { - show_usage_and_exit(argc, argv, available_actions); - } - for (auto it = available_actions.begin(); it != available_actions.end(); ++it) { - if (!strcmp(argv[1], (*it)->invokation_name())) { - action = it; - break; - } - } - - if (action == available_actions.end()) { - show_usage_and_exit(argc, argv, available_actions); - } - - for (int i = 2; i < argc; i++) { - if (argv[i] == strstr(argv[i], "--min-working-set-size=")) { - const char* equals_sign = strchr(argv[i], '='); - min_working_set_size = strtoul(equals_sign+1, nullptr, 10); - } else { - cerr << "unrecognized option: " << argv[i] << endl << endl; - show_usage_and_exit(argc, argv, available_actions); - } - } - - print_cpuinfo(); - - cout << "benchmark parameters:" << endl; - cout << "pointer size: " << 8*sizeof(void*) << " bits" << endl; - cout << "scalar type: " << type_name() << endl; - cout << "packet size: " << internal::packet_traits::size << endl; - cout << "minsize = " << minsize << endl; - cout << "maxsize = " << maxsize << endl; - cout << "measurement_repetitions = " << measurement_repetitions << endl; - cout << "min_accurate_time = " << min_accurate_time << endl; - cout << "min_working_set_size = " << min_working_set_size; - if (min_working_set_size == 0) { - cout << " (try to outsize caches)"; - } - cout << endl << endl; - - (*action)->run(); - - double time_end = timer.getRealTime(); - cerr << "Finished in " << human_duration_t(time_end - time_start) << endl; -} diff --git a/eigen/bench/benchmark.cpp b/eigen/bench/benchmark.cpp deleted file mode 100644 index c721b90..0000000 --- a/eigen/bench/benchmark.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// g++ -O3 -DNDEBUG -DMATSIZE= benchmark.cpp -o benchmark && time ./benchmark - -#include - -#include - -#ifndef MATSIZE -#define MATSIZE 3 -#endif - -using namespace std; -using namespace Eigen; - -#ifndef REPEAT -#define REPEAT 40000000 -#endif - -#ifndef SCALAR -#define SCALAR double -#endif - -int main(int argc, char *argv[]) -{ - Matrix I = Matrix::Ones(); - Matrix m; - for(int i = 0; i < MATSIZE; i++) - for(int j = 0; j < MATSIZE; j++) - { - m(i,j) = (i+MATSIZE*j); - } - asm("#begin"); - for(int a = 0; a < REPEAT; a++) - { - m = Matrix::Ones() + 0.00005 * (m + (m*m)); - } - asm("#end"); - cout << m << endl; - return 0; -} diff --git a/eigen/bench/benchmarkSlice.cpp b/eigen/bench/benchmarkSlice.cpp deleted file mode 100644 index c5b89c5..0000000 --- a/eigen/bench/benchmarkSlice.cpp +++ /dev/null @@ -1,38 +0,0 @@ -// g++ -O3 -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX - -#include - -#include - -using namespace std; -using namespace Eigen; - -#ifndef REPEAT -#define REPEAT 10000 -#endif - -#ifndef SCALAR -#define SCALAR float -#endif - -int main(int argc, char *argv[]) -{ - typedef Matrix Mat; - Mat m(100, 100); - m.setRandom(); - - for(int a = 0; a < REPEAT; a++) - { - int r, c, nr, nc; - r = Eigen::internal::random(0,10); - c = Eigen::internal::random(0,10); - nr = Eigen::internal::random(50,80); - nc = Eigen::internal::random(50,80); - m.block(r,c,nr,nc) += Mat::Ones(nr,nc); - m.block(r,c,nr,nc) *= SCALAR(10); - m.block(r,c,nr,nc) -= Mat::constant(nr,nc,10); - m.block(r,c,nr,nc) /= SCALAR(10); - } - cout << m[0] << endl; - return 0; -} diff --git a/eigen/bench/benchmarkX.cpp b/eigen/bench/benchmarkX.cpp deleted file mode 100644 index 8e4b60c..0000000 --- a/eigen/bench/benchmarkX.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// g++ -fopenmp -I .. -O3 -DNDEBUG -finline-limit=1000 benchmarkX.cpp -o b && time ./b - -#include - -#include - -using namespace std; -using namespace Eigen; - -#ifndef MATTYPE -#define MATTYPE MatrixXLd -#endif - -#ifndef MATSIZE -#define MATSIZE 400 -#endif - -#ifndef REPEAT -#define REPEAT 100 -#endif - -int main(int argc, char *argv[]) -{ - MATTYPE I = MATTYPE::Ones(MATSIZE,MATSIZE); - MATTYPE m(MATSIZE,MATSIZE); - for(int i = 0; i < MATSIZE; i++) for(int j = 0; j < MATSIZE; j++) - { - m(i,j) = (i+j+1)/(MATSIZE*MATSIZE); - } - for(int a = 0; a < REPEAT; a++) - { - m = I + 0.0001 * (m + m*m); - } - cout << m(0,0) << endl; - return 0; -} diff --git a/eigen/bench/benchmarkXcwise.cpp b/eigen/bench/benchmarkXcwise.cpp deleted file mode 100644 index 6243743..0000000 --- a/eigen/bench/benchmarkXcwise.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// g++ -O3 -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX - -#include -#include - -using namespace std; -using namespace Eigen; - -#ifndef VECTYPE -#define VECTYPE VectorXLd -#endif - -#ifndef VECSIZE -#define VECSIZE 1000000 -#endif - -#ifndef REPEAT -#define REPEAT 1000 -#endif - -int main(int argc, char *argv[]) -{ - VECTYPE I = VECTYPE::Ones(VECSIZE); - VECTYPE m(VECSIZE,1); - for(int i = 0; i < VECSIZE; i++) - { - m[i] = 0.1 * i/VECSIZE; - } - for(int a = 0; a < REPEAT; a++) - { - m = VECTYPE::Ones(VECSIZE) + 0.00005 * (m.cwise().square() + m/4); - } - cout << m[0] << endl; - return 0; -} diff --git a/eigen/bench/benchmark_suite b/eigen/bench/benchmark_suite deleted file mode 100644 index 3f21d36..0000000 --- a/eigen/bench/benchmark_suite +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -CXX=${CXX-g++} # default value unless caller has defined CXX -echo "Fixed size 3x3, column-major, -DNDEBUG" -$CXX -O3 -I .. -DNDEBUG benchmark.cpp -o benchmark && time ./benchmark >/dev/null -echo "Fixed size 3x3, column-major, with asserts" -$CXX -O3 -I .. benchmark.cpp -o benchmark && time ./benchmark >/dev/null -echo "Fixed size 3x3, row-major, -DNDEBUG" -$CXX -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR -DNDEBUG benchmark.cpp -o benchmark && time ./benchmark >/dev/null -echo "Fixed size 3x3, row-major, with asserts" -$CXX -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR benchmark.cpp -o benchmark && time ./benchmark >/dev/null -echo "Dynamic size 20x20, column-major, -DNDEBUG" -$CXX -O3 -I .. -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null -echo "Dynamic size 20x20, column-major, with asserts" -$CXX -O3 -I .. benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null -echo "Dynamic size 20x20, row-major, -DNDEBUG" -$CXX -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR -DNDEBUG benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null -echo "Dynamic size 20x20, row-major, with asserts" -$CXX -O3 -I .. -DEIGEN_DEFAULT_TO_ROW_MAJOR benchmarkX.cpp -o benchmarkX && time ./benchmarkX >/dev/null diff --git a/eigen/bench/btl/CMakeLists.txt b/eigen/bench/btl/CMakeLists.txt deleted file mode 100644 index 38ff9f4..0000000 --- a/eigen/bench/btl/CMakeLists.txt +++ /dev/null @@ -1,107 +0,0 @@ -PROJECT(BTL) - -CMAKE_MINIMUM_REQUIRED(VERSION 2.6.2) - -set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${Eigen_SOURCE_DIR}/cmake) -include(MacroOptionalAddSubdirectory) - -OPTION(BTL_NOVEC "Disable SSE/Altivec optimizations when possible" OFF) - -SET(CMAKE_INCLUDE_CURRENT_DIR ON) - -string(REGEX MATCH icpc IS_ICPC ${CMAKE_CXX_COMPILER}) -IF(CMAKE_COMPILER_IS_GNUCXX OR IS_ICPC) - SET(CMAKE_CXX_FLAGS "-g0 -O3 -DNDEBUG ${CMAKE_CXX_FLAGS}") - SET(CMAKE_Fortran_FLAGS "-g0 -O3 -DNDEBUG ${CMAKE_Fortran_FLAGS}") - IF(BTL_NOVEC) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_DONT_VECTORIZE") - ENDIF(BTL_NOVEC) -ENDIF(CMAKE_COMPILER_IS_GNUCXX OR IS_ICPC) - -IF(MSVC) - SET(CMAKE_CXX_FLAGS " /O2 /Ot /GL /fp:fast -DNDEBUG") -# SET(CMAKE_Fortran_FLAGS "-g0 -O3 -DNDEBUG") - IF(BTL_NOVEC) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_DONT_VECTORIZE") - ENDIF(BTL_NOVEC) -ENDIF(MSVC) - -if(IS_ICPC) - set(CMAKE_CXX_FLAGS "-fast ${CMAKE_CXX_FLAGS}") - set(CMAKE_Fortran_FLAGS "-fast ${CMAKE_Fortran_FLAGS}") -endif(IS_ICPC) - -include_directories( - ${PROJECT_SOURCE_DIR}/actions - ${PROJECT_SOURCE_DIR}/generic_bench - ${PROJECT_SOURCE_DIR}/generic_bench/utils - ${PROJECT_SOURCE_DIR}/libs/STL) - -# find_package(MKL) -# if (MKL_FOUND) -# add_definitions(-DHAVE_MKL) -# set(DEFAULT_LIBRARIES ${MKL_LIBRARIES}) -# endif (MKL_FOUND) - -find_library(EIGEN_BTL_RT_LIBRARY rt) -# if we cannot find it easily, then we don't need it! -if(NOT EIGEN_BTL_RT_LIBRARY) - set(EIGEN_BTL_RT_LIBRARY "") -endif() - -MACRO(BTL_ADD_BENCH targetname) - - foreach(_current_var ${ARGN}) - set(_last_var ${_current_var}) - endforeach(_current_var) - - set(_sources ${ARGN}) - list(LENGTH _sources _argn_length) - - list(REMOVE_ITEM _sources ON OFF TRUE FALSE) - - list(LENGTH _sources _src_length) - - if (${_argn_length} EQUAL ${_src_length}) - set(_last_var ON) - endif (${_argn_length} EQUAL ${_src_length}) - - OPTION(BUILD_${targetname} "Build benchmark ${targetname}" ${_last_var}) - - IF(BUILD_${targetname}) - ADD_EXECUTABLE(${targetname} ${_sources}) - ADD_TEST(${targetname} "${targetname}") - target_link_libraries(${targetname} ${DEFAULT_LIBRARIES} ${EIGEN_BTL_RT_LIBRARY}) - ENDIF(BUILD_${targetname}) - -ENDMACRO(BTL_ADD_BENCH) - -macro(btl_add_target_property target prop value) - - if(BUILD_${target}) - get_target_property(previous ${target} ${prop}) - if(NOT previous) - set(previous "") - endif() - set_target_properties(${target} PROPERTIES ${prop} "${previous} ${value}") - endif() - -endmacro(btl_add_target_property) - -ENABLE_TESTING() - -add_subdirectory(libs/eigen3) -add_subdirectory(libs/eigen2) -add_subdirectory(libs/tensors) -add_subdirectory(libs/BLAS) -add_subdirectory(libs/ublas) -add_subdirectory(libs/gmm) -add_subdirectory(libs/mtl4) -add_subdirectory(libs/blitz) -add_subdirectory(libs/tvmet) -add_subdirectory(libs/STL) -add_subdirectory(libs/blaze) - -add_subdirectory(data) - - diff --git a/eigen/bench/btl/COPYING b/eigen/bench/btl/COPYING deleted file mode 100644 index 486449c..0000000 --- a/eigen/bench/btl/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/eigen/bench/btl/README b/eigen/bench/btl/README deleted file mode 100644 index f3f5fb3..0000000 --- a/eigen/bench/btl/README +++ /dev/null @@ -1,154 +0,0 @@ -Bench Template Library - -**************************************** -Introduction : - -The aim of this project is to compare the performance -of available numerical libraries. The code is designed -as generic and modular as possible. Thus, adding new -numerical libraries or new numerical tests should -require minimal effort. - - -***************************************** - -Installation : - -BTL uses cmake / ctest: - -1 - create a build directory: - - $ mkdir build - $ cd build - -2 - configure: - - $ ccmake .. - -3 - run the bench using ctest: - - $ ctest -V - -You can run the benchmarks only on libraries matching a given regular expression: - ctest -V -R -For instance: - ctest -V -R eigen2 - -You can also select a given set of actions defining the environment variable BTL_CONFIG this way: - BTL_CONFIG="-a action1{:action2}*" ctest -V -An exemple: - BTL_CONFIG="-a axpy:vector_matrix:trisolve:ata" ctest -V -R eigen2 - -Finally, if bench results already exist (the bench*.dat files) then they merges by keeping the best for each matrix size. If you want to overwrite the previous ones you can simply add the "--overwrite" option: - BTL_CONFIG="-a axpy:vector_matrix:trisolve:ata --overwrite" ctest -V -R eigen2 - -4 : Analyze the result. different data files (.dat) are produced in each libs directories. - If gnuplot is available, choose a directory name in the data directory to store the results and type: - $ cd data - $ mkdir my_directory - $ cp ../libs/*/*.dat my_directory - Build the data utilities in this (data) directory - make - Then you can look the raw data, - go_mean my_directory - or smooth the data first : - smooth_all.sh my_directory - go_mean my_directory_smooth - - -************************************************* - -Files and directories : - - generic_bench : all the bench sources common to all libraries - - actions : sources for different action wrappers (axpy, matrix-matrix product) to be tested. - - libs/* : bench sources specific to each tested libraries. - - machine_dep : directory used to store machine specific Makefile.in - - data : directory used to store gnuplot scripts and data analysis utilities - -************************************************** - -Principles : the code modularity is achieved by defining two concepts : - - ****** Action concept : This is a class defining which kind - of test must be performed (e.g. a matrix_vector_product). - An Action should define the following methods : - - *** Ctor using the size of the problem (matrix or vector size) as an argument - Action action(size); - *** initialize : this method initialize the calculation (e.g. initialize the matrices and vectors arguments) - action.initialize(); - *** calculate : this method actually launch the calculation to be benchmarked - action.calculate; - *** nb_op_base() : this method returns the complexity of the calculate method (allowing the mflops evaluation) - *** name() : this method returns the name of the action (std::string) - - ****** Interface concept : This is a class or namespace defining how to use a given library and - its specific containers (matrix and vector). Up to now an interface should following types - - *** real_type : kind of float to be used (float or double) - *** stl_vector : must correspond to std::vector - *** stl_matrix : must correspond to std::vector - *** gene_vector : the vector type for this interface --> e.g. (real_type *) for the C_interface - *** gene_matrix : the matrix type for this interface --> e.g. (gene_vector *) for the C_interface - - + the following common methods - - *** free_matrix(gene_matrix & A, int N) dealocation of a N sized gene_matrix A - *** free_vector(gene_vector & B) dealocation of a N sized gene_vector B - *** matrix_from_stl(gene_matrix & A, stl_matrix & A_stl) copy the content of an stl_matrix A_stl into a gene_matrix A. - The allocation of A is done in this function. - *** vector_to_stl(gene_vector & B, stl_vector & B_stl) copy the content of an stl_vector B_stl into a gene_vector B. - The allocation of B is done in this function. - *** matrix_to_stl(gene_matrix & A, stl_matrix & A_stl) copy the content of an gene_matrix A into an stl_matrix A_stl. - The size of A_STL must corresponds to the size of A. - *** vector_to_stl(gene_vector & A, stl_vector & A_stl) copy the content of an gene_vector A into an stl_vector A_stl. - The size of B_STL must corresponds to the size of B. - *** copy_matrix(gene_matrix & source, gene_matrix & cible, int N) : copy the content of source in cible. Both source - and cible must be sized NxN. - *** copy_vector(gene_vector & source, gene_vector & cible, int N) : copy the content of source in cible. Both source - and cible must be sized N. - - and the following method corresponding to the action one wants to be benchmarked : - - *** matrix_vector_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int N) - *** matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int N) - *** ata_product(const gene_matrix & A, gene_matrix & X, int N) - *** aat_product(const gene_matrix & A, gene_matrix & X, int N) - *** axpy(real coef, const gene_vector & X, gene_vector & Y, int N) - - The bench algorithm (generic_bench/bench.hh) is templated with an action itself templated with - an interface. A typical main.cpp source stored in a given library directory libs/A_LIB - looks like : - - bench< AN_ACTION < AN_INTERFACE > >( 10 , 1000 , 50 ) ; - - this function will produce XY data file containing measured mflops as a function of the size for 50 - sizes between 10 and 10000. - - This algorithm can be adapted by providing a given Perf_Analyzer object which determines how the time - measurements must be done. For example, the X86_Perf_Analyzer use the asm rdtsc function and provides - a very fast and accurate (but less portable) timing method. The default is the Portable_Perf_Analyzer - so - - bench< AN_ACTION < AN_INTERFACE > >( 10 , 1000 , 50 ) ; - - is equivalent to - - bench< Portable_Perf_Analyzer,AN_ACTION < AN_INTERFACE > >( 10 , 1000 , 50 ) ; - - If your system supports it we suggest to use a mixed implementation (X86_perf_Analyzer+Portable_Perf_Analyzer). - replace - bench(size_min,size_max,nb_point); - with - bench(size_min,size_max,nb_point); - in generic/bench.hh - -. - - - diff --git a/eigen/bench/btl/actions/action_aat_product.hh b/eigen/bench/btl/actions/action_aat_product.hh deleted file mode 100644 index aa5b35c..0000000 --- a/eigen/bench/btl/actions/action_aat_product.hh +++ /dev/null @@ -1,145 +0,0 @@ -//===================================================== -// File : action_aat_product.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_AAT_PRODUCT -#define ACTION_AAT_PRODUCT -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_aat_product { - -public : - - // Ctor - - Action_aat_product( int size ):_size(size) - { - MESSAGE("Action_aat_product Ctor"); - - // STL matrix and vector initialization - - init_matrix(A_stl,_size); - init_matrix(X_stl,_size); - init_matrix(resu_stl,_size); - - // generic matrix and vector initialization - - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(X_ref,X_stl); - - Interface::matrix_from_stl(A,A_stl); - Interface::matrix_from_stl(X,X_stl); - - } - - // invalidate copy ctor - - Action_aat_product( const Action_aat_product & ) - { - INFOS("illegal call to Action_aat_product Copy Ctor"); - exit(0); - } - - // Dtor - - ~Action_aat_product( void ){ - - MESSAGE("Action_aat_product Dtor"); - - // deallocation - - Interface::free_matrix(A,_size); - Interface::free_matrix(X,_size); - - Interface::free_matrix(A_ref,_size); - Interface::free_matrix(X_ref,_size); - - } - - // action name - - static inline std::string name( void ) - { - return "aat_"+Interface::name(); - } - - double nb_op_base( void ){ - return double(_size)*double(_size)*double(_size); - } - - inline void initialize( void ){ - - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_matrix(X_ref,X,_size); - - } - - inline void calculate( void ) { - - Interface::aat_product(A,X,_size); - - } - - void check_result( void ){ - if (_size>128) return; - // calculation check - - Interface::matrix_to_stl(X,resu_stl); - - STL_interface::aat_product(A_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-6){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(1); - } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_matrix X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_matrix X; - - - int _size; - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_ata_product.hh b/eigen/bench/btl/actions/action_ata_product.hh deleted file mode 100644 index 04364fe..0000000 --- a/eigen/bench/btl/actions/action_ata_product.hh +++ /dev/null @@ -1,145 +0,0 @@ -//===================================================== -// File : action_ata_product.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_ATA_PRODUCT -#define ACTION_ATA_PRODUCT -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_ata_product { - -public : - - // Ctor - - Action_ata_product( int size ):_size(size) - { - MESSAGE("Action_ata_product Ctor"); - - // STL matrix and vector initialization - - init_matrix(A_stl,_size); - init_matrix(X_stl,_size); - init_matrix(resu_stl,_size); - - // generic matrix and vector initialization - - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(X_ref,X_stl); - - Interface::matrix_from_stl(A,A_stl); - Interface::matrix_from_stl(X,X_stl); - - } - - // invalidate copy ctor - - Action_ata_product( const Action_ata_product & ) - { - INFOS("illegal call to Action_ata_product Copy Ctor"); - exit(0); - } - - // Dtor - - ~Action_ata_product( void ){ - - MESSAGE("Action_ata_product Dtor"); - - // deallocation - - Interface::free_matrix(A,_size); - Interface::free_matrix(X,_size); - - Interface::free_matrix(A_ref,_size); - Interface::free_matrix(X_ref,_size); - - } - - // action name - - static inline std::string name( void ) - { - return "ata_"+Interface::name(); - } - - double nb_op_base( void ){ - return 2.0*_size*_size*_size; - } - - inline void initialize( void ){ - - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_matrix(X_ref,X,_size); - - } - - inline void calculate( void ) { - - Interface::ata_product(A,X,_size); - - } - - void check_result( void ){ - if (_size>128) return; - // calculation check - - Interface::matrix_to_stl(X,resu_stl); - - STL_interface::ata_product(A_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-6){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(1); - } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_matrix X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_matrix X; - - - int _size; - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_atv_product.hh b/eigen/bench/btl/actions/action_atv_product.hh deleted file mode 100644 index a823451..0000000 --- a/eigen/bench/btl/actions/action_atv_product.hh +++ /dev/null @@ -1,134 +0,0 @@ -//===================================================== -// File : action_atv_product.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_ATV_PRODUCT -#define ACTION_ATV_PRODUCT -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_atv_product { - -public : - - Action_atv_product( int size ) : _size(size) - { - MESSAGE("Action_atv_product Ctor"); - - // STL matrix and vector initialization - - init_matrix(A_stl,_size); - init_vector(B_stl,_size); - init_vector(X_stl,_size); - init_vector(resu_stl,_size); - - // generic matrix and vector initialization - - Interface::matrix_from_stl(A_ref,A_stl); - Interface::vector_from_stl(B_ref,B_stl); - Interface::vector_from_stl(X_ref,X_stl); - - Interface::matrix_from_stl(A,A_stl); - Interface::vector_from_stl(B,B_stl); - Interface::vector_from_stl(X,X_stl); - } - - // invalidate copy ctor - Action_atv_product( const Action_atv_product & ) - { - INFOS("illegal call to Action_atv_product Copy Ctor"); - exit(1); - } - - ~Action_atv_product( void ) - { - MESSAGE("Action_atv_product Dtor"); - - Interface::free_matrix(A,_size); - Interface::free_vector(B); - Interface::free_vector(X); - - Interface::free_matrix(A_ref,_size); - Interface::free_vector(B_ref); - Interface::free_vector(X_ref); - } - - static inline std::string name() { return "atv_" + Interface::name(); } - - double nb_op_base( void ) { return 2.0*_size*_size; } - - inline void initialize( void ){ - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_vector(B_ref,B,_size); - Interface::copy_vector(X_ref,X,_size); - } - - BTL_DONT_INLINE void calculate( void ) { - BTL_ASM_COMMENT("begin atv"); - Interface::atv_product(A,B,X,_size); - BTL_ASM_COMMENT("end atv"); - } - - void check_result( void ) - { - if (_size>128) return; - Interface::vector_to_stl(X,resu_stl); - - STL_interface::atv_product(A_stl,B_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-6){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(1); - } - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector X_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_vector B_ref; - typename Interface::gene_vector X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_vector B; - typename Interface::gene_vector X; - - - int _size; - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_axpby.hh b/eigen/bench/btl/actions/action_axpby.hh deleted file mode 100644 index dadd0cc..0000000 --- a/eigen/bench/btl/actions/action_axpby.hh +++ /dev/null @@ -1,127 +0,0 @@ -//===================================================== -// File : action_axpby.hh -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_AXPBY -#define ACTION_AXPBY -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_axpby { - -public : - - // Ctor - Action_axpby( int size ):_alpha(0.5),_beta(0.95),_size(size) - { - MESSAGE("Action_axpby Ctor"); - - // STL vector initialization - init_vector(X_stl,_size); - init_vector(Y_stl,_size); - init_vector(resu_stl,_size); - - // generic matrix and vector initialization - Interface::vector_from_stl(X_ref,X_stl); - Interface::vector_from_stl(Y_ref,Y_stl); - - Interface::vector_from_stl(X,X_stl); - Interface::vector_from_stl(Y,Y_stl); - } - - // invalidate copy ctor - Action_axpby( const Action_axpby & ) - { - INFOS("illegal call to Action_axpby Copy Ctor"); - exit(1); - } - - // Dtor - ~Action_axpby( void ){ - MESSAGE("Action_axpby Dtor"); - - // deallocation - Interface::free_vector(X_ref); - Interface::free_vector(Y_ref); - - Interface::free_vector(X); - Interface::free_vector(Y); - } - - // action name - static inline std::string name( void ) - { - return "axpby_"+Interface::name(); - } - - double nb_op_base( void ){ - return 3.0*_size; - } - - inline void initialize( void ){ - Interface::copy_vector(X_ref,X,_size); - Interface::copy_vector(Y_ref,Y,_size); - } - - inline void calculate( void ) { - BTL_ASM_COMMENT("mybegin axpby"); - Interface::axpby(_alpha,X,_beta,Y,_size); - BTL_ASM_COMMENT("myend axpby"); - } - - void check_result( void ){ - if (_size>128) return; - // calculation check - Interface::vector_to_stl(Y,resu_stl); - - STL_interface::axpby(_alpha,X_stl,_beta,Y_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(Y_stl,resu_stl); - - if (error>1.e-6){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(2); - } - } - -private : - - typename Interface::stl_vector X_stl; - typename Interface::stl_vector Y_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_vector X_ref; - typename Interface::gene_vector Y_ref; - - typename Interface::gene_vector X; - typename Interface::gene_vector Y; - - typename Interface::real_type _alpha; - typename Interface::real_type _beta; - - int _size; -}; - -#endif diff --git a/eigen/bench/btl/actions/action_axpy.hh b/eigen/bench/btl/actions/action_axpy.hh deleted file mode 100644 index 261be4c..0000000 --- a/eigen/bench/btl/actions/action_axpy.hh +++ /dev/null @@ -1,139 +0,0 @@ -//===================================================== -// File : action_axpy.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_AXPY -#define ACTION_AXPY -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_axpy { - -public : - - // Ctor - - Action_axpy( int size ):_coef(1.0),_size(size) - { - MESSAGE("Action_axpy Ctor"); - - // STL vector initialization - - init_vector(X_stl,_size); - init_vector(Y_stl,_size); - init_vector(resu_stl,_size); - - // generic matrix and vector initialization - - Interface::vector_from_stl(X_ref,X_stl); - Interface::vector_from_stl(Y_ref,Y_stl); - - Interface::vector_from_stl(X,X_stl); - Interface::vector_from_stl(Y,Y_stl); - - - } - - // invalidate copy ctor - - Action_axpy( const Action_axpy & ) - { - INFOS("illegal call to Action_axpy Copy Ctor"); - exit(1); - } - - // Dtor - - ~Action_axpy( void ){ - - MESSAGE("Action_axpy Dtor"); - - // deallocation - - Interface::free_vector(X_ref); - Interface::free_vector(Y_ref); - - Interface::free_vector(X); - Interface::free_vector(Y); - } - - // action name - - static inline std::string name( void ) - { - return "axpy_"+Interface::name(); - } - - double nb_op_base( void ){ - return 2.0*_size; - } - - inline void initialize( void ){ - Interface::copy_vector(X_ref,X,_size); - Interface::copy_vector(Y_ref,Y,_size); - } - - inline void calculate( void ) { - BTL_ASM_COMMENT("mybegin axpy"); - Interface::axpy(_coef,X,Y,_size); - BTL_ASM_COMMENT("myend axpy"); - } - - void check_result( void ){ - if (_size>128) return; - // calculation check - - Interface::vector_to_stl(Y,resu_stl); - - STL_interface::axpy(_coef,X_stl,Y_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(Y_stl,resu_stl); - - if (error>1.e-6){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(0); - } - - } - -private : - - typename Interface::stl_vector X_stl; - typename Interface::stl_vector Y_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_vector X_ref; - typename Interface::gene_vector Y_ref; - - typename Interface::gene_vector X; - typename Interface::gene_vector Y; - - typename Interface::real_type _coef; - - int _size; -}; - -#endif diff --git a/eigen/bench/btl/actions/action_cholesky.hh b/eigen/bench/btl/actions/action_cholesky.hh deleted file mode 100644 index 5f66d11..0000000 --- a/eigen/bench/btl/actions/action_cholesky.hh +++ /dev/null @@ -1,128 +0,0 @@ -//===================================================== -// File : action_cholesky.hh -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_CHOLESKY -#define ACTION_CHOLESKY -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_cholesky { - -public : - - // Ctor - - Action_cholesky( int size ):_size(size) - { - MESSAGE("Action_cholesky Ctor"); - - // STL mat/vec initialization - init_matrix_symm(X_stl,_size); - init_matrix(C_stl,_size); - - // make sure X is invertible - for (int i=0; i<_size; ++i) - X_stl[i][i] = std::abs(X_stl[i][i]) * 1e2 + 100; - - // generic matrix and vector initialization - Interface::matrix_from_stl(X_ref,X_stl); - Interface::matrix_from_stl(X,X_stl); - Interface::matrix_from_stl(C,C_stl); - - _cost = 0; - for (int j=0; j<_size; ++j) - { - double r = std::max(_size - j -1,0); - _cost += 2*(r*j+r+j); - } - } - - // invalidate copy ctor - - Action_cholesky( const Action_cholesky & ) - { - INFOS("illegal call to Action_cholesky Copy Ctor"); - exit(1); - } - - // Dtor - - ~Action_cholesky( void ){ - - MESSAGE("Action_cholesky Dtor"); - - // deallocation - Interface::free_matrix(X_ref,_size); - Interface::free_matrix(X,_size); - Interface::free_matrix(C,_size); - } - - // action name - - static inline std::string name( void ) - { - return "cholesky_"+Interface::name(); - } - - double nb_op_base( void ){ - return _cost; - } - - inline void initialize( void ){ - Interface::copy_matrix(X_ref,X,_size); - } - - inline void calculate( void ) { - Interface::cholesky(X,C,_size); - } - - void check_result( void ){ - // calculation check -// STL_interface::cholesky(X_stl,C_stl,_size); -// -// typename Interface::real_type error= -// STL_interface::norm_diff(C_stl,resu_stl); -// -// if (error>1.e-6){ -// INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); -// } - - } - -private : - - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix C_stl; - - typename Interface::gene_matrix X_ref; - typename Interface::gene_matrix X; - typename Interface::gene_matrix C; - - int _size; - double _cost; -}; - -#endif diff --git a/eigen/bench/btl/actions/action_ger.hh b/eigen/bench/btl/actions/action_ger.hh deleted file mode 100644 index dc766ef..0000000 --- a/eigen/bench/btl/actions/action_ger.hh +++ /dev/null @@ -1,128 +0,0 @@ - -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_GER -#define ACTION_GER -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_ger { - -public : - - // Ctor - BTL_DONT_INLINE Action_ger( int size ):_size(size) - { - MESSAGE("Action_ger Ctor"); - - // STL matrix and vector initialization - typename Interface::stl_matrix tmp; - init_matrix(A_stl,_size); - init_vector(B_stl,_size); - init_vector(X_stl,_size); - init_vector(resu_stl,_size); - - // generic matrix and vector initialization - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(A,A_stl); - Interface::vector_from_stl(B_ref,B_stl); - Interface::vector_from_stl(B,B_stl); - Interface::vector_from_stl(X_ref,X_stl); - Interface::vector_from_stl(X,X_stl); - } - - // invalidate copy ctor - Action_ger( const Action_ger & ) - { - INFOS("illegal call to Action_ger Copy Ctor"); - exit(1); - } - - // Dtor - BTL_DONT_INLINE ~Action_ger( void ){ - MESSAGE("Action_ger Dtor"); - Interface::free_matrix(A,_size); - Interface::free_vector(B); - Interface::free_vector(X); - Interface::free_matrix(A_ref,_size); - Interface::free_vector(B_ref); - Interface::free_vector(X_ref); - - } - - // action name - static inline std::string name( void ) - { - return "ger_" + Interface::name(); - } - - double nb_op_base( void ){ - return 2.0*_size*_size; - } - - BTL_DONT_INLINE void initialize( void ){ - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_vector(B_ref,B,_size); - Interface::copy_vector(X_ref,X,_size); - } - - BTL_DONT_INLINE void calculate( void ) { - BTL_ASM_COMMENT("#begin ger"); - Interface::ger(A,B,X,_size); - BTL_ASM_COMMENT("end ger"); - } - - BTL_DONT_INLINE void check_result( void ){ - // calculation check - Interface::vector_to_stl(X,resu_stl); - - STL_interface::ger(A_stl,B_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-3){ - INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); - } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector X_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_vector B_ref; - typename Interface::gene_vector X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_vector B; - typename Interface::gene_vector X; - - int _size; -}; - - -#endif diff --git a/eigen/bench/btl/actions/action_hessenberg.hh b/eigen/bench/btl/actions/action_hessenberg.hh deleted file mode 100644 index 2100ebd..0000000 --- a/eigen/bench/btl/actions/action_hessenberg.hh +++ /dev/null @@ -1,233 +0,0 @@ -//===================================================== -// File : action_hessenberg.hh -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_HESSENBERG -#define ACTION_HESSENBERG -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_hessenberg { - -public : - - // Ctor - - Action_hessenberg( int size ):_size(size) - { - MESSAGE("Action_hessenberg Ctor"); - - // STL vector initialization - init_matrix(X_stl,_size); - - init_matrix(C_stl,_size); - init_matrix(resu_stl,_size); - - // generic matrix and vector initialization - Interface::matrix_from_stl(X_ref,X_stl); - Interface::matrix_from_stl(X,X_stl); - Interface::matrix_from_stl(C,C_stl); - - _cost = 0; - for (int j=0; j<_size-2; ++j) - { - double r = std::max(0,_size-j-1); - double b = std::max(0,_size-j-2); - _cost += 6 + 3*b + r*r*4 + r*_size*4; - } - } - - // invalidate copy ctor - - Action_hessenberg( const Action_hessenberg & ) - { - INFOS("illegal call to Action_hessenberg Copy Ctor"); - exit(1); - } - - // Dtor - - ~Action_hessenberg( void ){ - - MESSAGE("Action_hessenberg Dtor"); - - // deallocation - Interface::free_matrix(X_ref,_size); - Interface::free_matrix(X,_size); - Interface::free_matrix(C,_size); - } - - // action name - - static inline std::string name( void ) - { - return "hessenberg_"+Interface::name(); - } - - double nb_op_base( void ){ - return _cost; - } - - inline void initialize( void ){ - Interface::copy_matrix(X_ref,X,_size); - } - - inline void calculate( void ) { - Interface::hessenberg(X,C,_size); - } - - void check_result( void ){ - // calculation check - Interface::matrix_to_stl(C,resu_stl); - -// STL_interface::hessenberg(X_stl,C_stl,_size); -// -// typename Interface::real_type error= -// STL_interface::norm_diff(C_stl,resu_stl); -// -// if (error>1.e-6){ -// INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); -// } - - } - -private : - - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix C_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix X_ref; - typename Interface::gene_matrix X; - typename Interface::gene_matrix C; - - int _size; - double _cost; -}; - -template -class Action_tridiagonalization { - -public : - - // Ctor - - Action_tridiagonalization( int size ):_size(size) - { - MESSAGE("Action_tridiagonalization Ctor"); - - // STL vector initialization - init_matrix(X_stl,_size); - - for(int i=0; i<_size; ++i) - { - for(int j=0; j(C_stl,_size); - init_matrix(resu_stl,_size); - - // generic matrix and vector initialization - Interface::matrix_from_stl(X_ref,X_stl); - Interface::matrix_from_stl(X,X_stl); - Interface::matrix_from_stl(C,C_stl); - - _cost = 0; - for (int j=0; j<_size-2; ++j) - { - double r = std::max(0,_size-j-1); - double b = std::max(0,_size-j-2); - _cost += 6. + 3.*b + r*r*8.; - } - } - - // invalidate copy ctor - - Action_tridiagonalization( const Action_tridiagonalization & ) - { - INFOS("illegal call to Action_tridiagonalization Copy Ctor"); - exit(1); - } - - // Dtor - - ~Action_tridiagonalization( void ){ - - MESSAGE("Action_tridiagonalization Dtor"); - - // deallocation - Interface::free_matrix(X_ref,_size); - Interface::free_matrix(X,_size); - Interface::free_matrix(C,_size); - } - - // action name - - static inline std::string name( void ) { return "tridiagonalization_"+Interface::name(); } - - double nb_op_base( void ){ - return _cost; - } - - inline void initialize( void ){ - Interface::copy_matrix(X_ref,X,_size); - } - - inline void calculate( void ) { - Interface::tridiagonalization(X,C,_size); - } - - void check_result( void ){ - // calculation check - Interface::matrix_to_stl(C,resu_stl); - -// STL_interface::tridiagonalization(X_stl,C_stl,_size); -// -// typename Interface::real_type error= -// STL_interface::norm_diff(C_stl,resu_stl); -// -// if (error>1.e-6){ -// INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); -// } - - } - -private : - - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix C_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix X_ref; - typename Interface::gene_matrix X; - typename Interface::gene_matrix C; - - int _size; - double _cost; -}; - -#endif diff --git a/eigen/bench/btl/actions/action_lu_decomp.hh b/eigen/bench/btl/actions/action_lu_decomp.hh deleted file mode 100644 index 2448e82..0000000 --- a/eigen/bench/btl/actions/action_lu_decomp.hh +++ /dev/null @@ -1,124 +0,0 @@ -//===================================================== -// File : action_lu_decomp.hh -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_LU_DECOMP -#define ACTION_LU_DECOMP -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_lu_decomp { - -public : - - // Ctor - - Action_lu_decomp( int size ):_size(size) - { - MESSAGE("Action_lu_decomp Ctor"); - - // STL vector initialization - init_matrix(X_stl,_size); - - init_matrix(C_stl,_size); - init_matrix(resu_stl,_size); - - // generic matrix and vector initialization - Interface::matrix_from_stl(X_ref,X_stl); - Interface::matrix_from_stl(X,X_stl); - Interface::matrix_from_stl(C,C_stl); - - _cost = 2.0*size*size*size/3.0 + size*size; - } - - // invalidate copy ctor - - Action_lu_decomp( const Action_lu_decomp & ) - { - INFOS("illegal call to Action_lu_decomp Copy Ctor"); - exit(1); - } - - // Dtor - - ~Action_lu_decomp( void ){ - - MESSAGE("Action_lu_decomp Dtor"); - - // deallocation - Interface::free_matrix(X_ref,_size); - Interface::free_matrix(X,_size); - Interface::free_matrix(C,_size); - } - - // action name - - static inline std::string name( void ) - { - return "complete_lu_decomp_"+Interface::name(); - } - - double nb_op_base( void ){ - return _cost; - } - - inline void initialize( void ){ - Interface::copy_matrix(X_ref,X,_size); - } - - inline void calculate( void ) { - Interface::lu_decomp(X,C,_size); - } - - void check_result( void ){ - // calculation check - Interface::matrix_to_stl(C,resu_stl); - -// STL_interface::lu_decomp(X_stl,C_stl,_size); -// -// typename Interface::real_type error= -// STL_interface::norm_diff(C_stl,resu_stl); -// -// if (error>1.e-6){ -// INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); -// } - - } - -private : - - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix C_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix X_ref; - typename Interface::gene_matrix X; - typename Interface::gene_matrix C; - - int _size; - double _cost; -}; - -#endif diff --git a/eigen/bench/btl/actions/action_lu_solve.hh b/eigen/bench/btl/actions/action_lu_solve.hh deleted file mode 100644 index 5a81e63..0000000 --- a/eigen/bench/btl/actions/action_lu_solve.hh +++ /dev/null @@ -1,136 +0,0 @@ -//===================================================== -// File : action_lu_solve.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_LU_SOLVE -#define ACTION_LU_SOLVE -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_lu_solve -{ - -public : - - static inline std::string name( void ) - { - return "lu_solve_"+Interface::name(); - } - - static double nb_op_base(int size){ - return 2.0*size*size*size/3.0; // questionable but not really important - } - - - static double calculate( int nb_calc, int size ) { - - // STL matrix and vector initialization - - typename Interface::stl_matrix A_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector X_stl; - - init_matrix(A_stl,size); - init_vector(B_stl,size); - init_vector(X_stl,size); - - // generic matrix and vector initialization - - typename Interface::gene_matrix A; - typename Interface::gene_vector B; - typename Interface::gene_vector X; - - typename Interface::gene_matrix LU; - - Interface::matrix_from_stl(A,A_stl); - Interface::vector_from_stl(B,B_stl); - Interface::vector_from_stl(X,X_stl); - Interface::matrix_from_stl(LU,A_stl); - - // local variable : - - typename Interface::Pivot_Vector pivot; // pivot vector - Interface::new_Pivot_Vector(pivot,size); - - // timer utilities - - Portable_Timer chronos; - - // time measurement - - chronos.start(); - - for (int ii=0;ii::matrix_vector_product(A_stl,X_stl,B_new_stl,size); - - typename Interface::real_type error= - STL_interface::norm_diff(B_stl,B_new_stl); - - if (error>1.e-5){ - INFOS("WRONG CALCULATION...residual=" << error); - STL_interface::display_vector(B_stl); - STL_interface::display_vector(B_new_stl); - exit(0); - } - - // deallocation and return time - - Interface::free_matrix(A,size); - Interface::free_vector(B); - Interface::free_vector(X); - Interface::free_Pivot_Vector(pivot); - - return time; - } - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_matrix_matrix_product.hh b/eigen/bench/btl/actions/action_matrix_matrix_product.hh deleted file mode 100644 index f65ee05..0000000 --- a/eigen/bench/btl/actions/action_matrix_matrix_product.hh +++ /dev/null @@ -1,150 +0,0 @@ -//===================================================== -// File : action_matrix_matrix_product.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_MATRIX_MATRIX_PRODUCT -#define ACTION_MATRIX_MATRIX_PRODUCT -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_matrix_matrix_product { - -public : - - // Ctor - - Action_matrix_matrix_product( int size ):_size(size) - { - MESSAGE("Action_matrix_matrix_product Ctor"); - - // STL matrix and vector initialization - - init_matrix(A_stl,_size); - init_matrix(B_stl,_size); - init_matrix(X_stl,_size); - init_matrix(resu_stl,_size); - - // generic matrix and vector initialization - - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(B_ref,B_stl); - Interface::matrix_from_stl(X_ref,X_stl); - - Interface::matrix_from_stl(A,A_stl); - Interface::matrix_from_stl(B,B_stl); - Interface::matrix_from_stl(X,X_stl); - - } - - // invalidate copy ctor - - Action_matrix_matrix_product( const Action_matrix_matrix_product & ) - { - INFOS("illegal call to Action_matrix_matrix_product Copy Ctor"); - exit(0); - } - - // Dtor - - ~Action_matrix_matrix_product( void ){ - - MESSAGE("Action_matrix_matrix_product Dtor"); - - // deallocation - - Interface::free_matrix(A,_size); - Interface::free_matrix(B,_size); - Interface::free_matrix(X,_size); - - Interface::free_matrix(A_ref,_size); - Interface::free_matrix(B_ref,_size); - Interface::free_matrix(X_ref,_size); - - } - - // action name - - static inline std::string name( void ) - { - return "matrix_matrix_"+Interface::name(); - } - - double nb_op_base( void ){ - return 2.0*_size*_size*_size; - } - - inline void initialize( void ){ - - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_matrix(B_ref,B,_size); - Interface::copy_matrix(X_ref,X,_size); - - } - - inline void calculate( void ) { - Interface::matrix_matrix_product(A,B,X,_size); - } - - void check_result( void ){ - - // calculation check - if (_size<200) - { - Interface::matrix_to_stl(X,resu_stl); - STL_interface::matrix_matrix_product(A_stl,B_stl,X_stl,_size); - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - if (error>1.e-6){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(1); - } - } - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix B_stl; - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_matrix B_ref; - typename Interface::gene_matrix X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_matrix B; - typename Interface::gene_matrix X; - - - int _size; - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_matrix_matrix_product_bis.hh b/eigen/bench/btl/actions/action_matrix_matrix_product_bis.hh deleted file mode 100644 index 29c10a6..0000000 --- a/eigen/bench/btl/actions/action_matrix_matrix_product_bis.hh +++ /dev/null @@ -1,152 +0,0 @@ -//===================================================== -// File : action_matrix_matrix_product_bis.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_MATRIX_MATRIX_PRODUCT_BIS -#define ACTION_MATRIX_MATRIX_PRODUCT_BIS -#include "utilities.h" -#include "STL_interface.hh" -#include "STL_timer.hh" -#include -#include "init_function.hh" -#include "init_vector.hh" -#include "init_matrix.hh" - -using namespace std; - -template -class Action_matrix_matrix_product_bis { - -public : - - static inline std::string name( void ) - { - return "matrix_matrix_"+Interface::name(); - } - - static double nb_op_base(int size){ - return 2.0*size*size*size; - } - - static double calculate( int nb_calc, int size ) { - - // STL matrix and vector initialization - - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix B_stl; - typename Interface::stl_matrix X_stl; - - init_matrix(A_stl,size); - init_matrix(B_stl,size); - init_matrix(X_stl,size); - - // generic matrix and vector initialization - - typename Interface::gene_matrix A_ref; - typename Interface::gene_matrix B_ref; - typename Interface::gene_matrix X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_matrix B; - typename Interface::gene_matrix X; - - - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(B_ref,B_stl); - Interface::matrix_from_stl(X_ref,X_stl); - - Interface::matrix_from_stl(A,A_stl); - Interface::matrix_from_stl(B,B_stl); - Interface::matrix_from_stl(X,X_stl); - - - // STL_timer utilities - - STL_timer chronos; - - // Baseline evaluation - - chronos.start_baseline(nb_calc); - - do { - - Interface::copy_matrix(A_ref,A,size); - Interface::copy_matrix(B_ref,B,size); - Interface::copy_matrix(X_ref,X,size); - - - // Interface::matrix_matrix_product(A,B,X,size); This line must be commented !!!! - } - while(chronos.check()); - - chronos.report(true); - - // Time measurement - - chronos.start(nb_calc); - - do { - - Interface::copy_matrix(A_ref,A,size); - Interface::copy_matrix(B_ref,B,size); - Interface::copy_matrix(X_ref,X,size); - - Interface::matrix_matrix_product(A,B,X,size); // here it is not commented !!!! - } - while(chronos.check()); - - chronos.report(true); - - double time=chronos.calculated_time/2000.0; - - // calculation check - - typename Interface::stl_matrix resu_stl(size); - - Interface::matrix_to_stl(X,resu_stl); - - STL_interface::matrix_matrix_product(A_stl,B_stl,X_stl,size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-6){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(1); - } - - // deallocation and return time - - Interface::free_matrix(A,size); - Interface::free_matrix(B,size); - Interface::free_matrix(X,size); - - Interface::free_matrix(A_ref,size); - Interface::free_matrix(B_ref,size); - Interface::free_matrix(X_ref,size); - - return time; - } - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_matrix_vector_product.hh b/eigen/bench/btl/actions/action_matrix_vector_product.hh deleted file mode 100644 index 8bab79d..0000000 --- a/eigen/bench/btl/actions/action_matrix_vector_product.hh +++ /dev/null @@ -1,153 +0,0 @@ -//===================================================== -// File : action_matrix_vector_product.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_MATRIX_VECTOR_PRODUCT -#define ACTION_MATRIX_VECTOR_PRODUCT -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_matrix_vector_product { - -public : - - // Ctor - - BTL_DONT_INLINE Action_matrix_vector_product( int size ):_size(size) - { - MESSAGE("Action_matrix_vector_product Ctor"); - - // STL matrix and vector initialization - - init_matrix(A_stl,_size); - init_vector(B_stl,_size); - init_vector(X_stl,_size); - init_vector(resu_stl,_size); - - // generic matrix and vector initialization - - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(A,A_stl); - Interface::vector_from_stl(B_ref,B_stl); - Interface::vector_from_stl(B,B_stl); - Interface::vector_from_stl(X_ref,X_stl); - Interface::vector_from_stl(X,X_stl); - - } - - // invalidate copy ctor - - Action_matrix_vector_product( const Action_matrix_vector_product & ) - { - INFOS("illegal call to Action_matrix_vector_product Copy Ctor"); - exit(1); - } - - // Dtor - - BTL_DONT_INLINE ~Action_matrix_vector_product( void ){ - - MESSAGE("Action_matrix_vector_product Dtor"); - - // deallocation - - Interface::free_matrix(A,_size); - Interface::free_vector(B); - Interface::free_vector(X); - - Interface::free_matrix(A_ref,_size); - Interface::free_vector(B_ref); - Interface::free_vector(X_ref); - - } - - // action name - - static inline std::string name( void ) - { - return "matrix_vector_" + Interface::name(); - } - - double nb_op_base( void ){ - return 2.0*_size*_size; - } - - BTL_DONT_INLINE void initialize( void ){ - - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_vector(B_ref,B,_size); - Interface::copy_vector(X_ref,X,_size); - - } - - BTL_DONT_INLINE void calculate( void ) { - BTL_ASM_COMMENT("#begin matrix_vector_product"); - Interface::matrix_vector_product(A,B,X,_size); - BTL_ASM_COMMENT("end matrix_vector_product"); - } - - BTL_DONT_INLINE void check_result( void ){ - - // calculation check - - Interface::vector_to_stl(X,resu_stl); - - STL_interface::matrix_vector_product(A_stl,B_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-5){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(0); - } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector X_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_vector B_ref; - typename Interface::gene_vector X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_vector B; - typename Interface::gene_vector X; - - - int _size; - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_partial_lu.hh b/eigen/bench/btl/actions/action_partial_lu.hh deleted file mode 100644 index 770ea1d..0000000 --- a/eigen/bench/btl/actions/action_partial_lu.hh +++ /dev/null @@ -1,125 +0,0 @@ -//===================================================== -// File : action_lu_decomp.hh -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_PARTIAL_LU -#define ACTION_PARTIAL_LU -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_partial_lu { - -public : - - // Ctor - - Action_partial_lu( int size ):_size(size) - { - MESSAGE("Action_partial_lu Ctor"); - - // STL vector initialization - init_matrix(X_stl,_size); - init_matrix(C_stl,_size); - - // make sure X is invertible - for (int i=0; i<_size; ++i) - X_stl[i][i] = X_stl[i][i] * 1e2 + 1; - - // generic matrix and vector initialization - Interface::matrix_from_stl(X_ref,X_stl); - Interface::matrix_from_stl(X,X_stl); - Interface::matrix_from_stl(C,C_stl); - - _cost = 2.0*size*size*size/3.0 + size*size; - } - - // invalidate copy ctor - - Action_partial_lu( const Action_partial_lu & ) - { - INFOS("illegal call to Action_partial_lu Copy Ctor"); - exit(1); - } - - // Dtor - - ~Action_partial_lu( void ){ - - MESSAGE("Action_partial_lu Dtor"); - - // deallocation - Interface::free_matrix(X_ref,_size); - Interface::free_matrix(X,_size); - Interface::free_matrix(C,_size); - } - - // action name - - static inline std::string name( void ) - { - return "partial_lu_decomp_"+Interface::name(); - } - - double nb_op_base( void ){ - return _cost; - } - - inline void initialize( void ){ - Interface::copy_matrix(X_ref,X,_size); - } - - inline void calculate( void ) { - Interface::partial_lu_decomp(X,C,_size); - } - - void check_result( void ){ - // calculation check -// Interface::matrix_to_stl(C,resu_stl); - -// STL_interface::lu_decomp(X_stl,C_stl,_size); -// -// typename Interface::real_type error= -// STL_interface::norm_diff(C_stl,resu_stl); -// -// if (error>1.e-6){ -// INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); -// } - - } - -private : - - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix C_stl; - - typename Interface::gene_matrix X_ref; - typename Interface::gene_matrix X; - typename Interface::gene_matrix C; - - int _size; - double _cost; -}; - -#endif diff --git a/eigen/bench/btl/actions/action_rot.hh b/eigen/bench/btl/actions/action_rot.hh deleted file mode 100644 index df822a6..0000000 --- a/eigen/bench/btl/actions/action_rot.hh +++ /dev/null @@ -1,116 +0,0 @@ - -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_ROT -#define ACTION_ROT -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_rot { - -public : - - // Ctor - BTL_DONT_INLINE Action_rot( int size ):_size(size) - { - MESSAGE("Action_rot Ctor"); - - // STL matrix and vector initialization - typename Interface::stl_matrix tmp; - init_vector(A_stl,_size); - init_vector(B_stl,_size); - - // generic matrix and vector initialization - Interface::vector_from_stl(A_ref,A_stl); - Interface::vector_from_stl(A,A_stl); - Interface::vector_from_stl(B_ref,B_stl); - Interface::vector_from_stl(B,B_stl); - } - - // invalidate copy ctor - Action_rot( const Action_rot & ) - { - INFOS("illegal call to Action_rot Copy Ctor"); - exit(1); - } - - // Dtor - BTL_DONT_INLINE ~Action_rot( void ){ - MESSAGE("Action_rot Dtor"); - Interface::free_vector(A); - Interface::free_vector(B); - Interface::free_vector(A_ref); - Interface::free_vector(B_ref); - } - - // action name - static inline std::string name( void ) - { - return "rot_" + Interface::name(); - } - - double nb_op_base( void ){ - return 6.0*_size; - } - - BTL_DONT_INLINE void initialize( void ){ - Interface::copy_vector(A_ref,A,_size); - Interface::copy_vector(B_ref,B,_size); - } - - BTL_DONT_INLINE void calculate( void ) { - BTL_ASM_COMMENT("#begin rot"); - Interface::rot(A,B,0.5,0.6,_size); - BTL_ASM_COMMENT("end rot"); - } - - BTL_DONT_INLINE void check_result( void ){ - // calculation check -// Interface::vector_to_stl(X,resu_stl); - -// STL_interface::rot(A_stl,B_stl,X_stl,_size); - -// typename Interface::real_type error= -// STL_interface::norm_diff(X_stl,resu_stl); - -// if (error>1.e-3){ -// INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); -// } - - } - -private : - - typename Interface::stl_vector A_stl; - typename Interface::stl_vector B_stl; - - typename Interface::gene_vector A_ref; - typename Interface::gene_vector B_ref; - - typename Interface::gene_vector A; - typename Interface::gene_vector B; - - int _size; -}; - - -#endif diff --git a/eigen/bench/btl/actions/action_symv.hh b/eigen/bench/btl/actions/action_symv.hh deleted file mode 100644 index a32b9df..0000000 --- a/eigen/bench/btl/actions/action_symv.hh +++ /dev/null @@ -1,139 +0,0 @@ -//===================================================== -// File : action_symv.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_SYMV -#define ACTION_SYMV -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_symv { - -public : - - // Ctor - - BTL_DONT_INLINE Action_symv( int size ):_size(size) - { - MESSAGE("Action_symv Ctor"); - - // STL matrix and vector initialization - init_matrix_symm(A_stl,_size); - init_vector(B_stl,_size); - init_vector(X_stl,_size); - init_vector(resu_stl,_size); - - // generic matrix and vector initialization - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(A,A_stl); - Interface::vector_from_stl(B_ref,B_stl); - Interface::vector_from_stl(B,B_stl); - Interface::vector_from_stl(X_ref,X_stl); - Interface::vector_from_stl(X,X_stl); - - } - - // invalidate copy ctor - - Action_symv( const Action_symv & ) - { - INFOS("illegal call to Action_symv Copy Ctor"); - exit(1); - } - - // Dtor - BTL_DONT_INLINE ~Action_symv( void ){ - Interface::free_matrix(A,_size); - Interface::free_vector(B); - Interface::free_vector(X); - Interface::free_matrix(A_ref,_size); - Interface::free_vector(B_ref); - Interface::free_vector(X_ref); - } - - // action name - - static inline std::string name( void ) - { - return "symv_" + Interface::name(); - } - - double nb_op_base( void ){ - return 2.0*_size*_size; - } - - BTL_DONT_INLINE void initialize( void ){ - - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_vector(B_ref,B,_size); - Interface::copy_vector(X_ref,X,_size); - - } - - BTL_DONT_INLINE void calculate( void ) { - BTL_ASM_COMMENT("#begin symv"); - Interface::symv(A,B,X,_size); - BTL_ASM_COMMENT("end symv"); - } - - BTL_DONT_INLINE void check_result( void ){ - if (_size>128) return; - // calculation check - Interface::vector_to_stl(X,resu_stl); - - STL_interface::symv(A_stl,B_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-5){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(0); - } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector X_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_vector B_ref; - typename Interface::gene_vector X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_vector B; - typename Interface::gene_vector X; - - - int _size; - -}; - - -#endif diff --git a/eigen/bench/btl/actions/action_syr2.hh b/eigen/bench/btl/actions/action_syr2.hh deleted file mode 100644 index 7c6712b..0000000 --- a/eigen/bench/btl/actions/action_syr2.hh +++ /dev/null @@ -1,133 +0,0 @@ -//===================================================== -// File : action_syr2.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_SYR2 -#define ACTION_SYR2 -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_syr2 { - -public : - - // Ctor - - BTL_DONT_INLINE Action_syr2( int size ):_size(size) - { - // STL matrix and vector initialization - typename Interface::stl_matrix tmp; - init_matrix(A_stl,_size); - init_vector(B_stl,_size); - init_vector(X_stl,_size); - init_vector(resu_stl,_size); - - // generic matrix and vector initialization - Interface::matrix_from_stl(A_ref,A_stl); - Interface::matrix_from_stl(A,A_stl); - Interface::vector_from_stl(B_ref,B_stl); - Interface::vector_from_stl(B,B_stl); - Interface::vector_from_stl(X_ref,X_stl); - Interface::vector_from_stl(X,X_stl); - } - - // invalidate copy ctor - Action_syr2( const Action_syr2 & ) - { - INFOS("illegal call to Action_syr2 Copy Ctor"); - exit(1); - } - - // Dtor - BTL_DONT_INLINE ~Action_syr2( void ){ - Interface::free_matrix(A,_size); - Interface::free_vector(B); - Interface::free_vector(X); - Interface::free_matrix(A_ref,_size); - Interface::free_vector(B_ref); - Interface::free_vector(X_ref); - } - - // action name - - static inline std::string name( void ) - { - return "syr2_" + Interface::name(); - } - - double nb_op_base( void ){ - return 2.0*_size*_size; - } - - BTL_DONT_INLINE void initialize( void ){ - Interface::copy_matrix(A_ref,A,_size); - Interface::copy_vector(B_ref,B,_size); - Interface::copy_vector(X_ref,X,_size); - } - - BTL_DONT_INLINE void calculate( void ) { - BTL_ASM_COMMENT("#begin syr2"); - Interface::syr2(A,B,X,_size); - BTL_ASM_COMMENT("end syr2"); - } - - BTL_DONT_INLINE void check_result( void ){ - // calculation check - Interface::vector_to_stl(X,resu_stl); - - STL_interface::syr2(A_stl,B_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-3){ - INFOS("WRONG CALCULATION...residual=" << error); -// exit(0); - } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector X_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_vector B_ref; - typename Interface::gene_vector X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_vector B; - typename Interface::gene_vector X; - - - int _size; - -}; - - -#endif diff --git a/eigen/bench/btl/actions/action_trisolve.hh b/eigen/bench/btl/actions/action_trisolve.hh deleted file mode 100644 index d6f0b47..0000000 --- a/eigen/bench/btl/actions/action_trisolve.hh +++ /dev/null @@ -1,137 +0,0 @@ -//===================================================== -// File : action_trisolve.hh -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_TRISOLVE -#define ACTION_TRISOLVE -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_trisolve { - -public : - - // Ctor - - Action_trisolve( int size ):_size(size) - { - MESSAGE("Action_trisolve Ctor"); - - // STL vector initialization - init_matrix(L_stl,_size); - init_vector(B_stl,_size); - init_vector(X_stl,_size); - for (int j=0; j<_size; ++j) - { - for (int i=0; i(resu_stl,_size); - - // generic matrix and vector initialization - Interface::matrix_from_stl(L,L_stl); - Interface::vector_from_stl(X,X_stl); - Interface::vector_from_stl(B,B_stl); - - _cost = 0; - for (int j=0; j<_size; ++j) - { - _cost += 2*j + 1; - } - } - - // invalidate copy ctor - - Action_trisolve( const Action_trisolve & ) - { - INFOS("illegal call to Action_trisolve Copy Ctor"); - exit(1); - } - - // Dtor - - ~Action_trisolve( void ){ - - MESSAGE("Action_trisolve Dtor"); - - // deallocation - Interface::free_matrix(L,_size); - Interface::free_vector(B); - Interface::free_vector(X); - } - - // action name - - static inline std::string name( void ) - { - return "trisolve_vector_"+Interface::name(); - } - - double nb_op_base( void ){ - return _cost; - } - - inline void initialize( void ){ - //Interface::copy_vector(X_ref,X,_size); - } - - inline void calculate( void ) { - Interface::trisolve_lower(L,B,X,_size); - } - - void check_result(){ - if (_size>128) return; - // calculation check - Interface::vector_to_stl(X,resu_stl); - - STL_interface::trisolve_lower(L_stl,B_stl,X_stl,_size); - - typename Interface::real_type error= - STL_interface::norm_diff(X_stl,resu_stl); - - if (error>1.e-4){ - INFOS("WRONG CALCULATION...residual=" << error); - exit(2); - } //else INFOS("CALCULATION OK...residual=" << error); - - } - -private : - - typename Interface::stl_matrix L_stl; - typename Interface::stl_vector X_stl; - typename Interface::stl_vector B_stl; - typename Interface::stl_vector resu_stl; - - typename Interface::gene_matrix L; - typename Interface::gene_vector X; - typename Interface::gene_vector B; - - int _size; - double _cost; -}; - -#endif diff --git a/eigen/bench/btl/actions/action_trisolve_matrix.hh b/eigen/bench/btl/actions/action_trisolve_matrix.hh deleted file mode 100644 index 0fc2bb9..0000000 --- a/eigen/bench/btl/actions/action_trisolve_matrix.hh +++ /dev/null @@ -1,165 +0,0 @@ -//===================================================== -// File : action_matrix_matrix_product.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_TRISOLVE_MATRIX_PRODUCT -#define ACTION_TRISOLVE_MATRIX_PRODUCT -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_trisolve_matrix { - -public : - - // Ctor - - Action_trisolve_matrix( int size ):_size(size) - { - MESSAGE("Action_trisolve_matrix Ctor"); - - // STL matrix and vector initialization - - init_matrix(A_stl,_size); - init_matrix(B_stl,_size); - init_matrix(X_stl,_size); - init_matrix(resu_stl,_size); - - for (int j=0; j<_size; ++j) - { - for (int i=0; i::matrix_matrix_product(A_stl,B_stl,X_stl,_size); -// -// typename Interface::real_type error= -// STL_interface::norm_diff(X_stl,resu_stl); -// -// if (error>1.e-6){ -// INFOS("WRONG CALCULATION...residual=" << error); -// // exit(1); -// } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix B_stl; - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_matrix B_ref; - typename Interface::gene_matrix X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_matrix B; - typename Interface::gene_matrix X; - - int _size; - double _cost; - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/action_trmm.hh b/eigen/bench/btl/actions/action_trmm.hh deleted file mode 100644 index 8f78138..0000000 --- a/eigen/bench/btl/actions/action_trmm.hh +++ /dev/null @@ -1,165 +0,0 @@ -//===================================================== -// File : action_matrix_matrix_product.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef ACTION_TRMM -#define ACTION_TRMM -#include "utilities.h" -#include "STL_interface.hh" -#include -#include "init/init_function.hh" -#include "init/init_vector.hh" -#include "init/init_matrix.hh" - -using namespace std; - -template -class Action_trmm { - -public : - - // Ctor - - Action_trmm( int size ):_size(size) - { - MESSAGE("Action_trmm Ctor"); - - // STL matrix and vector initialization - - init_matrix(A_stl,_size); - init_matrix(B_stl,_size); - init_matrix(X_stl,_size); - init_matrix(resu_stl,_size); - - for (int j=0; j<_size; ++j) - { - for (int i=0; i::matrix_matrix_product(A_stl,B_stl,X_stl,_size); -// -// typename Interface::real_type error= -// STL_interface::norm_diff(X_stl,resu_stl); -// -// if (error>1.e-6){ -// INFOS("WRONG CALCULATION...residual=" << error); -// // exit(1); -// } - - } - -private : - - typename Interface::stl_matrix A_stl; - typename Interface::stl_matrix B_stl; - typename Interface::stl_matrix X_stl; - typename Interface::stl_matrix resu_stl; - - typename Interface::gene_matrix A_ref; - typename Interface::gene_matrix B_ref; - typename Interface::gene_matrix X_ref; - - typename Interface::gene_matrix A; - typename Interface::gene_matrix B; - typename Interface::gene_matrix X; - - int _size; - double _cost; - -}; - - -#endif - - - diff --git a/eigen/bench/btl/actions/basic_actions.hh b/eigen/bench/btl/actions/basic_actions.hh deleted file mode 100644 index a3333ea..0000000 --- a/eigen/bench/btl/actions/basic_actions.hh +++ /dev/null @@ -1,21 +0,0 @@ - -#include "action_axpy.hh" -#include "action_axpby.hh" - -#include "action_matrix_vector_product.hh" -#include "action_atv_product.hh" - -#include "action_matrix_matrix_product.hh" -// #include "action_ata_product.hh" -#include "action_aat_product.hh" - -#include "action_trisolve.hh" -#include "action_trmm.hh" -#include "action_symv.hh" -// #include "action_symm.hh" -#include "action_syr2.hh" -#include "action_ger.hh" -#include "action_rot.hh" - -// #include "action_lu_solve.hh" - diff --git a/eigen/bench/btl/cmake/FindACML.cmake b/eigen/bench/btl/cmake/FindACML.cmake deleted file mode 100644 index 4989fa2..0000000 --- a/eigen/bench/btl/cmake/FindACML.cmake +++ /dev/null @@ -1,51 +0,0 @@ - -if (ACML_LIBRARIES) - set(ACML_FIND_QUIETLY TRUE) -endif (ACML_LIBRARIES) - -find_library(ACML_LIBRARIES - NAMES - acml_mp acml_mv - PATHS - $ENV{ACMLDIR}/lib - $ENV{ACML_DIR}/lib - ${LIB_INSTALL_DIR} -) - -find_file(ACML_LIBRARIES - NAMES - libacml_mp.so - PATHS - /usr/lib - /usr/lib64 - $ENV{ACMLDIR}/lib - ${LIB_INSTALL_DIR} -) - -if(NOT ACML_LIBRARIES) - message(STATUS "Multi-threaded library not found, looking for single-threaded") - find_library(ACML_LIBRARIES - NAMES - acml acml_mv - PATHS - $ENV{ACMLDIR}/lib - $ENV{ACML_DIR}/lib - ${LIB_INSTALL_DIR} - ) - find_file(ACML_LIBRARIES - libacml.so libacml_mv.so - PATHS - /usr/lib - /usr/lib64 - $ENV{ACMLDIR}/lib - ${LIB_INSTALL_DIR} - ) -endif() - - - - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(ACML DEFAULT_MSG ACML_LIBRARIES) - -mark_as_advanced(ACML_LIBRARIES) diff --git a/eigen/bench/btl/cmake/FindATLAS.cmake b/eigen/bench/btl/cmake/FindATLAS.cmake deleted file mode 100644 index 4136a98..0000000 --- a/eigen/bench/btl/cmake/FindATLAS.cmake +++ /dev/null @@ -1,31 +0,0 @@ - -if (ATLAS_LIBRARIES) - set(ATLAS_FIND_QUIETLY TRUE) -endif (ATLAS_LIBRARIES) - -find_file(ATLAS_LIB libatlas.so.3 PATHS /usr/lib /usr/lib/atlas /usr/lib64 /usr/lib64/atlas $ENV{ATLASDIR} ${LIB_INSTALL_DIR}) -find_library(ATLAS_LIB satlas PATHS $ENV{ATLASDIR} ${LIB_INSTALL_DIR}) - -find_file(ATLAS_LAPACK NAMES liblapack_atlas.so.3 liblapack.so.3 PATHS /usr/lib /usr/lib/atlas /usr/lib64 /usr/lib64/atlas $ENV{ATLASDIR} ${LIB_INSTALL_DIR}) -find_library(ATLAS_LAPACK NAMES lapack_atlas lapack PATHS $ENV{ATLASDIR} ${LIB_INSTALL_DIR}) - -find_file(ATLAS_F77BLAS libf77blas.so.3 PATHS /usr/lib /usr/lib/atlas /usr/lib64 /usr/lib64/atlas $ENV{ATLASDIR} ${LIB_INSTALL_DIR}) -find_library(ATLAS_F77BLAS f77blas PATHS $ENV{ATLASDIR} ${LIB_INSTALL_DIR}) - -if(ATLAS_LIB AND ATLAS_CBLAS AND ATLAS_LAPACK AND ATLAS_F77BLAS) - - set(ATLAS_LIBRARIES ${ATLAS_LAPACK} ${ATLAS_LIB}) - - # search the default lapack lib link to it - find_file(ATLAS_REFERENCE_LAPACK liblapack.so.3 PATHS /usr/lib /usr/lib64) - find_library(ATLAS_REFERENCE_LAPACK NAMES lapack) -# if(ATLAS_REFERENCE_LAPACK) -# set(ATLAS_LIBRARIES ${ATLAS_LIBRARIES} ${ATLAS_REFERENCE_LAPACK}) -# endif() - -endif(ATLAS_LIB AND ATLAS_CBLAS AND ATLAS_LAPACK AND ATLAS_F77BLAS) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(ATLAS DEFAULT_MSG ATLAS_LIBRARIES) - -mark_as_advanced(ATLAS_LIBRARIES) diff --git a/eigen/bench/btl/cmake/FindBLAZE.cmake b/eigen/bench/btl/cmake/FindBLAZE.cmake deleted file mode 100644 index dba4c89..0000000 --- a/eigen/bench/btl/cmake/FindBLAZE.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# - Try to find eigen2 headers -# Once done this will define -# -# BLAZE_FOUND - system has blaze lib -# BLAZE_INCLUDE_DIR - the blaze include directory -# -# Copyright (C) 2008 Gael Guennebaud -# Adapted from FindEigen.cmake: -# Copyright (c) 2006, 2007 Montel Laurent, -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -if (BLAZE_INCLUDE_DIR) - - # in cache already - set(BLAZE_FOUND TRUE) - -else (BLAZE_INCLUDE_DIR) - -find_path(BLAZE_INCLUDE_DIR NAMES blaze/Blaze.h - PATHS - ${INCLUDE_INSTALL_DIR} - ) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(BLAZE DEFAULT_MSG BLAZE_INCLUDE_DIR) - -mark_as_advanced(BLAZE_INCLUDE_DIR) - -endif(BLAZE_INCLUDE_DIR) - diff --git a/eigen/bench/btl/cmake/FindBlitz.cmake b/eigen/bench/btl/cmake/FindBlitz.cmake deleted file mode 100644 index 92880bb..0000000 --- a/eigen/bench/btl/cmake/FindBlitz.cmake +++ /dev/null @@ -1,40 +0,0 @@ -# - Try to find blitz lib -# Once done this will define -# -# BLITZ_FOUND - system has blitz lib -# BLITZ_INCLUDES - the blitz include directory -# BLITZ_LIBRARIES - The libraries needed to use blitz - -# Copyright (c) 2006, Montel Laurent, -# Copyright (c) 2007, Allen Winter, -# Copyright (C) 2008 Gael Guennebaud -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -# include(FindLibraryWithDebug) - -if (BLITZ_INCLUDES AND BLITZ_LIBRARIES) - set(Blitz_FIND_QUIETLY TRUE) -endif (BLITZ_INCLUDES AND BLITZ_LIBRARIES) - -find_path(BLITZ_INCLUDES - NAMES - blitz/array.h - PATH_SUFFIXES blitz* - PATHS - $ENV{BLITZDIR}/include - ${INCLUDE_INSTALL_DIR} -) - -find_library(BLITZ_LIBRARIES - blitz - PATHS - $ENV{BLITZDIR}/lib - ${LIB_INSTALL_DIR} -) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Blitz DEFAULT_MSG - BLITZ_INCLUDES BLITZ_LIBRARIES) - -mark_as_advanced(BLITZ_INCLUDES BLITZ_LIBRARIES) diff --git a/eigen/bench/btl/cmake/FindCBLAS.cmake b/eigen/bench/btl/cmake/FindCBLAS.cmake deleted file mode 100644 index ce0f2f2..0000000 --- a/eigen/bench/btl/cmake/FindCBLAS.cmake +++ /dev/null @@ -1,35 +0,0 @@ -# include(FindLibraryWithDebug) - -if (CBLAS_INCLUDES AND CBLAS_LIBRARIES) - set(CBLAS_FIND_QUIETLY TRUE) -endif (CBLAS_INCLUDES AND CBLAS_LIBRARIES) - -find_path(CBLAS_INCLUDES - NAMES - cblas.h - PATHS - $ENV{CBLASDIR}/include - ${INCLUDE_INSTALL_DIR} -) - -find_library(CBLAS_LIBRARIES - cblas - PATHS - $ENV{CBLASDIR}/lib - ${LIB_INSTALL_DIR} -) - -find_file(CBLAS_LIBRARIES - libcblas.so.3 - PATHS - /usr/lib - /usr/lib64 - $ENV{CBLASDIR}/lib - ${LIB_INSTALL_DIR} -) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(CBLAS DEFAULT_MSG - CBLAS_INCLUDES CBLAS_LIBRARIES) - -mark_as_advanced(CBLAS_INCLUDES CBLAS_LIBRARIES) diff --git a/eigen/bench/btl/cmake/FindGMM.cmake b/eigen/bench/btl/cmake/FindGMM.cmake deleted file mode 100644 index 5049c64..0000000 --- a/eigen/bench/btl/cmake/FindGMM.cmake +++ /dev/null @@ -1,17 +0,0 @@ -if (GMM_INCLUDE_DIR) - # in cache already - set(GMM_FOUND TRUE) -else (GMM_INCLUDE_DIR) - -find_path(GMM_INCLUDE_DIR NAMES gmm/gmm.h - PATHS - ${INCLUDE_INSTALL_DIR} - ${GMM_INCLUDE_PATH} - ) - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMM DEFAULT_MSG GMM_INCLUDE_DIR ) - -mark_as_advanced(GMM_INCLUDE_DIR) - -endif(GMM_INCLUDE_DIR) diff --git a/eigen/bench/btl/cmake/FindMKL.cmake b/eigen/bench/btl/cmake/FindMKL.cmake deleted file mode 100644 index f4d7c6e..0000000 --- a/eigen/bench/btl/cmake/FindMKL.cmake +++ /dev/null @@ -1,65 +0,0 @@ - -if (MKL_LIBRARIES) - set(MKL_FIND_QUIETLY TRUE) -endif (MKL_LIBRARIES) - -if(CMAKE_MINOR_VERSION GREATER 4) - -if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") - -find_library(MKL_LIBRARIES - mkl_core - PATHS - $ENV{MKLLIB} - /opt/intel/mkl/*/lib/em64t - /opt/intel/Compiler/*/*/mkl/lib/em64t - ${LIB_INSTALL_DIR} -) - -find_library(MKL_GUIDE - guide - PATHS - $ENV{MKLLIB} - /opt/intel/mkl/*/lib/em64t - /opt/intel/Compiler/*/*/mkl/lib/em64t - /opt/intel/Compiler/*/*/lib/intel64 - ${LIB_INSTALL_DIR} -) - -if(MKL_LIBRARIES AND MKL_GUIDE) - set(MKL_LIBRARIES ${MKL_LIBRARIES} mkl_intel_lp64 mkl_sequential ${MKL_GUIDE} pthread) -endif() - -else(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") - -find_library(MKL_LIBRARIES - mkl_core - PATHS - $ENV{MKLLIB} - /opt/intel/mkl/*/lib/32 - /opt/intel/Compiler/*/*/mkl/lib/32 - ${LIB_INSTALL_DIR} -) - -find_library(MKL_GUIDE - guide - PATHS - $ENV{MKLLIB} - /opt/intel/mkl/*/lib/32 - /opt/intel/Compiler/*/*/mkl/lib/32 - /opt/intel/Compiler/*/*/lib/intel32 - ${LIB_INSTALL_DIR} -) - -if(MKL_LIBRARIES AND MKL_GUIDE) - set(MKL_LIBRARIES ${MKL_LIBRARIES} mkl_intel mkl_sequential ${MKL_GUIDE} pthread) -endif() - -endif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") - -endif(CMAKE_MINOR_VERSION GREATER 4) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(MKL DEFAULT_MSG MKL_LIBRARIES) - -mark_as_advanced(MKL_LIBRARIES) diff --git a/eigen/bench/btl/cmake/FindMTL4.cmake b/eigen/bench/btl/cmake/FindMTL4.cmake deleted file mode 100644 index 3de4909..0000000 --- a/eigen/bench/btl/cmake/FindMTL4.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# - Try to find eigen2 headers -# Once done this will define -# -# MTL4_FOUND - system has eigen2 lib -# MTL4_INCLUDE_DIR - the eigen2 include directory -# -# Copyright (C) 2008 Gael Guennebaud -# Adapted from FindEigen.cmake: -# Copyright (c) 2006, 2007 Montel Laurent, -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -if (MTL4_INCLUDE_DIR) - - # in cache already - set(MTL4_FOUND TRUE) - -else (MTL4_INCLUDE_DIR) - -find_path(MTL4_INCLUDE_DIR NAMES boost/numeric/mtl/mtl.hpp - PATHS - ${INCLUDE_INSTALL_DIR} - ) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(MTL4 DEFAULT_MSG MTL4_INCLUDE_DIR) - -mark_as_advanced(MTL4_INCLUDE_DIR) - -endif(MTL4_INCLUDE_DIR) - diff --git a/eigen/bench/btl/cmake/FindOPENBLAS.cmake b/eigen/bench/btl/cmake/FindOPENBLAS.cmake deleted file mode 100644 index 2a09194..0000000 --- a/eigen/bench/btl/cmake/FindOPENBLAS.cmake +++ /dev/null @@ -1,17 +0,0 @@ - -if (OPENBLAS_LIBRARIES) - set(OPENBLAS_FIND_QUIETLY TRUE) -endif (OPENBLAS_LIBRARIES) - -find_file(OPENBLAS_LIBRARIES NAMES libopenblas.so libopenblas.so.0 PATHS /usr/lib /usr/lib64 $ENV{OPENBLASDIR} ${LIB_INSTALL_DIR}) -find_library(OPENBLAS_LIBRARIES openblas PATHS $ENV{OPENBLASDIR} ${LIB_INSTALL_DIR}) - -if(OPENBLAS_LIBRARIES AND CMAKE_COMPILER_IS_GNUCXX) - set(OPENBLAS_LIBRARIES ${OPENBLAS_LIBRARIES} "-lpthread -lgfortran") -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(OPENBLAS DEFAULT_MSG - OPENBLAS_LIBRARIES) - -mark_as_advanced(OPENBLAS_LIBRARIES) diff --git a/eigen/bench/btl/cmake/FindPackageHandleStandardArgs.cmake b/eigen/bench/btl/cmake/FindPackageHandleStandardArgs.cmake deleted file mode 100644 index 7f122ed..0000000 --- a/eigen/bench/btl/cmake/FindPackageHandleStandardArgs.cmake +++ /dev/null @@ -1,60 +0,0 @@ -# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME (DEFAULT_MSG|"Custom failure message") VAR1 ... ) -# -# This macro is intended to be used in FindXXX.cmake modules files. -# It handles the REQUIRED and QUIET argument to FIND_PACKAGE() and -# it also sets the _FOUND variable. -# The package is found if all variables listed are TRUE. -# Example: -# -# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR) -# -# LibXml2 is considered to be found, if both LIBXML2_LIBRARIES and -# LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to TRUE. -# If it is not found and REQUIRED was used, it fails with FATAL_ERROR, -# independent whether QUIET was used or not. -# -# If it is found, the location is reported using the VAR1 argument, so -# here a message "Found LibXml2: /usr/lib/libxml2.so" will be printed out. -# If the second argument is DEFAULT_MSG, the message in the failure case will -# be "Could NOT find LibXml2", if you don't like this message you can specify -# your own custom failure message there. - -MACRO(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FAIL_MSG _VAR1 ) - - IF("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG") - IF (${_NAME}_FIND_REQUIRED) - SET(_FAIL_MESSAGE "Could not find REQUIRED package ${_NAME}") - ELSE (${_NAME}_FIND_REQUIRED) - SET(_FAIL_MESSAGE "Could not find OPTIONAL package ${_NAME}") - ENDIF (${_NAME}_FIND_REQUIRED) - ELSE("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG") - SET(_FAIL_MESSAGE "${_FAIL_MSG}") - ENDIF("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG") - - STRING(TOUPPER ${_NAME} _NAME_UPPER) - - SET(${_NAME_UPPER}_FOUND TRUE) - IF(NOT ${_VAR1}) - SET(${_NAME_UPPER}_FOUND FALSE) - ENDIF(NOT ${_VAR1}) - - FOREACH(_CURRENT_VAR ${ARGN}) - IF(NOT ${_CURRENT_VAR}) - SET(${_NAME_UPPER}_FOUND FALSE) - ENDIF(NOT ${_CURRENT_VAR}) - ENDFOREACH(_CURRENT_VAR) - - IF (${_NAME_UPPER}_FOUND) - IF (NOT ${_NAME}_FIND_QUIETLY) - MESSAGE(STATUS "Found ${_NAME}: ${${_VAR1}}") - ENDIF (NOT ${_NAME}_FIND_QUIETLY) - ELSE (${_NAME_UPPER}_FOUND) - IF (${_NAME}_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "${_FAIL_MESSAGE}") - ELSE (${_NAME}_FIND_REQUIRED) - IF (NOT ${_NAME}_FIND_QUIETLY) - MESSAGE(STATUS "${_FAIL_MESSAGE}") - ENDIF (NOT ${_NAME}_FIND_QUIETLY) - ENDIF (${_NAME}_FIND_REQUIRED) - ENDIF (${_NAME_UPPER}_FOUND) -ENDMACRO(FIND_PACKAGE_HANDLE_STANDARD_ARGS) diff --git a/eigen/bench/btl/cmake/FindTvmet.cmake b/eigen/bench/btl/cmake/FindTvmet.cmake deleted file mode 100644 index 26a29d9..0000000 --- a/eigen/bench/btl/cmake/FindTvmet.cmake +++ /dev/null @@ -1,32 +0,0 @@ -# - Try to find tvmet headers -# Once done this will define -# -# TVMET_FOUND - system has tvmet lib -# TVMET_INCLUDE_DIR - the tvmet include directory -# -# Copyright (C) 2008 Gael Guennebaud -# Adapted from FindEigen.cmake: -# Copyright (c) 2006, 2007 Montel Laurent, -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - -if (TVMET_INCLUDE_DIR) - - # in cache already - set(TVMET_FOUND TRUE) - -else (TVMET_INCLUDE_DIR) - -find_path(TVMET_INCLUDE_DIR NAMES tvmet/tvmet.h - PATHS - ${TVMETDIR}/ - ${INCLUDE_INSTALL_DIR} - ) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Tvmet DEFAULT_MSG TVMET_INCLUDE_DIR) - -mark_as_advanced(TVMET_INCLUDE_DIR) - -endif(TVMET_INCLUDE_DIR) - diff --git a/eigen/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake b/eigen/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake deleted file mode 100644 index 545048b..0000000 --- a/eigen/bench/btl/cmake/MacroOptionalAddSubdirectory.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# - MACRO_OPTIONAL_ADD_SUBDIRECTORY() combines ADD_SUBDIRECTORY() with an OPTION() -# MACRO_OPTIONAL_ADD_SUBDIRECTORY( ) -# If you use MACRO_OPTIONAL_ADD_SUBDIRECTORY() instead of ADD_SUBDIRECTORY(), -# this will have two effects -# 1 - CMake will not complain if the directory doesn't exist -# This makes sense if you want to distribute just one of the subdirs -# in a source package, e.g. just one of the subdirs in kdeextragear. -# 2 - If the directory exists, it will offer an option to skip the -# subdirectory. -# This is useful if you want to compile only a subset of all -# directories. - -# Copyright (c) 2007, Alexander Neundorf, -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - - -MACRO (MACRO_OPTIONAL_ADD_SUBDIRECTORY _dir ) - GET_FILENAME_COMPONENT(_fullPath ${_dir} ABSOLUTE) - IF(EXISTS ${_fullPath}) - IF(${ARGC} EQUAL 2) - OPTION(BUILD_${_dir} "Build directory ${_dir}" ${ARGV1}) - ELSE(${ARGC} EQUAL 2) - OPTION(BUILD_${_dir} "Build directory ${_dir}" TRUE) - ENDIF(${ARGC} EQUAL 2) - IF(BUILD_${_dir}) - ADD_SUBDIRECTORY(${_dir}) - ENDIF(BUILD_${_dir}) - ENDIF(EXISTS ${_fullPath}) -ENDMACRO (MACRO_OPTIONAL_ADD_SUBDIRECTORY) diff --git a/eigen/bench/btl/data/CMakeLists.txt b/eigen/bench/btl/data/CMakeLists.txt deleted file mode 100644 index 6af2a36..0000000 --- a/eigen/bench/btl/data/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ - -ADD_CUSTOM_TARGET(copy_scripts) - -SET(script_files go_mean mk_mean_script.sh mk_new_gnuplot.sh - perlib_plot_settings.txt action_settings.txt gnuplot_common_settings.hh ) - -FOREACH(script_file ${script_files}) -ADD_CUSTOM_COMMAND( - TARGET copy_scripts - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${script_file} ${CMAKE_CURRENT_BINARY_DIR}/ - ARGS -) -ENDFOREACH(script_file) - -ADD_CUSTOM_COMMAND( - TARGET copy_scripts - POST_BUILD - COMMAND ${CMAKE_CXX_COMPILER} --version | head -n 1 > ${CMAKE_CURRENT_BINARY_DIR}/compiler_version.txt - ARGS -) -ADD_CUSTOM_COMMAND( - TARGET copy_scripts - POST_BUILD - COMMAND echo "${Eigen_SOURCE_DIR}" > ${CMAKE_CURRENT_BINARY_DIR}/eigen_root_dir.txt - ARGS -) - -add_executable(smooth smooth.cxx) -add_executable(regularize regularize.cxx) -add_executable(main mean.cxx) -add_dependencies(main copy_scripts) diff --git a/eigen/bench/btl/data/action_settings.txt b/eigen/bench/btl/data/action_settings.txt deleted file mode 100644 index 39d2b5d..0000000 --- a/eigen/bench/btl/data/action_settings.txt +++ /dev/null @@ -1,19 +0,0 @@ -aat ; "{/*1.5 A x A^T}" ; "matrix size" ; 4:5000 -ata ; "{/*1.5 A^T x A}" ; "matrix size" ; 4:5000 -atv ; "{/*1.5 matrix^T x vector}" ; "matrix size" ; 4:5000 -axpby ; "{/*1.5 Y = alpha X + beta Y}" ; "vector size" ; 5:1000000 -axpy ; "{/*1.5 Y += alpha X}" ; "vector size" ; 5:1000000 -matrix_matrix ; "{/*1.5 matrix matrix product}" ; "matrix size" ; 4:5000 -matrix_vector ; "{/*1.5 matrix vector product}" ; "matrix size" ; 4:5000 -trmm ; "{/*1.5 triangular matrix matrix product}" ; "matrix size" ; 4:5000 -trisolve_vector ; "{/*1.5 triangular solver - vector (X = inv(L) X)}" ; "size" ; 4:5000 -trisolve_matrix ; "{/*1.5 triangular solver - matrix (M = inv(L) M)}" ; "size" ; 4:5000 -cholesky ; "{/*1.5 Cholesky decomposition}" ; "matrix size" ; 4:5000 -complete_lu_decomp ; "{/*1.5 Complete LU decomposition}" ; "matrix size" ; 4:5000 -partial_lu_decomp ; "{/*1.5 Partial LU decomposition}" ; "matrix size" ; 4:5000 -tridiagonalization ; "{/*1.5 Tridiagonalization}" ; "matrix size" ; 4:5000 -hessenberg ; "{/*1.5 Hessenberg decomposition}" ; "matrix size" ; 4:5000 -symv ; "{/*1.5 symmetric matrix vector product}" ; "matrix size" ; 4:5000 -syr2 ; "{/*1.5 symmretric rank-2 update (A += u^T v + u v^T)}" ; "matrix size" ; 4:5000 -ger ; "{/*1.5 general rank-1 update (A += u v^T)}" ; "matrix size" ; 4:5000 -rot ; "{/*1.5 apply rotation in the plane}" ; "vector size" ; 4:1000000 diff --git a/eigen/bench/btl/data/gnuplot_common_settings.hh b/eigen/bench/btl/data/gnuplot_common_settings.hh deleted file mode 100644 index 6f677df..0000000 --- a/eigen/bench/btl/data/gnuplot_common_settings.hh +++ /dev/null @@ -1,87 +0,0 @@ -set noclip points -set clip one -set noclip two -set bar 1.000000 -set border 31 lt -1 lw 1.000 -set xdata -set ydata -set zdata -set x2data -set y2data -set boxwidth -set dummy x,y -set format x "%g" -set format y "%g" -set format x2 "%g" -set format y2 "%g" -set format z "%g" -set angles radians -set nogrid -set key title "" -set key left top Right noreverse box linetype -2 linewidth 1.000 samplen 4 spacing 1 width 0 -set nolabel -set noarrow -# set nolinestyle # deprecated -set nologscale -set logscale x 10 -set offsets 0, 0, 0, 0 -set pointsize 1 -set encoding default -set nopolar -set noparametric -set view 60, 30, 1, 1 -set samples 100, 100 -set isosamples 10, 10 -set surface -set nocontour -set clabel '%8.3g' -set mapping cartesian -set nohidden3d -set cntrparam order 4 -set cntrparam linear -set cntrparam levels auto 5 -set cntrparam points 5 -set size ratio 0 1,1 -set origin 0,0 -# set data style lines -# set function style lines -set xzeroaxis lt -2 lw 1.000 -set x2zeroaxis lt -2 lw 1.000 -set yzeroaxis lt -2 lw 1.000 -set y2zeroaxis lt -2 lw 1.000 -set tics in -set ticslevel 0.5 -set tics scale 1, 0.5 -set mxtics default -set mytics default -set mx2tics default -set my2tics default -set xtics border mirror norotate autofreq -set ytics border mirror norotate autofreq -set ztics border nomirror norotate autofreq -set nox2tics -set noy2tics -set timestamp "" bottom norotate offset 0,0 -set rrange [ * : * ] noreverse nowriteback # (currently [-0:10] ) -set trange [ * : * ] noreverse nowriteback # (currently [-5:5] ) -set urange [ * : * ] noreverse nowriteback # (currently [-5:5] ) -set vrange [ * : * ] noreverse nowriteback # (currently [-5:5] ) -set xlabel "matrix size" offset 0,0 -set x2label "" offset 0,0 -set timefmt "%d/%m/%y\n%H:%M" -set xrange [ 10 : 1000 ] noreverse nowriteback -set x2range [ * : * ] noreverse nowriteback # (currently [-10:10] ) -set ylabel "MFLOPS" offset 0,0 -set y2label "" offset 0,0 -set yrange [ * : * ] noreverse nowriteback # (currently [-10:10] ) -set y2range [ * : * ] noreverse nowriteback # (currently [-10:10] ) -set zlabel "" offset 0,0 -set zrange [ * : * ] noreverse nowriteback # (currently [-10:10] ) -set zero 1e-08 -set lmargin -1 -set bmargin -1 -set rmargin -1 -set tmargin -1 -set locale "C" -set xrange [4:1024] - diff --git a/eigen/bench/btl/data/go_mean b/eigen/bench/btl/data/go_mean deleted file mode 100644 index 42338ca..0000000 --- a/eigen/bench/btl/data/go_mean +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -if [ $# < 1 ]; then - echo "Usage: $0 working_directory [tiny|large [prefix]]" -else - -mkdir -p $1 -##cp ../libs/*/*.dat $1 - -mode=large -if [ $# > 2 ]; then - mode=$2 -fi -if [ $# > 3 ]; then - prefix=$3 -fi - -EIGENDIR=`cat eigen_root_dir.txt` - -webpagefilename=$1/index.html -meanstatsfilename=$1/mean.html - -echo '' > $meanstatsfilename -echo '' > $webpagefilename -echo '

Configuration' >> $webpagefilename -echo '

    '\ - '
  • ' `cat /proc/cpuinfo | grep "model name" | head -n 1`\ - ' (' `uname -m` ')
  • '\ - '
  • compiler: ' `cat compiler_version.txt` '
  • '\ - '
  • eigen3: ' `hg identify -i $EIGENDIR` '
  • '\ - '
' \ - '

' >> $webpagefilename - -source mk_mean_script.sh axpy $1 11 2500 100000 250000 $mode $prefix -source mk_mean_script.sh axpby $1 11 2500 100000 250000 $mode $prefix -source mk_mean_script.sh matrix_vector $1 11 50 300 1000 $mode $prefix -source mk_mean_script.sh atv $1 11 50 300 1000 $mode $prefix -source mk_mean_script.sh matrix_matrix $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh aat $1 11 100 300 1000 $mode $prefix -# source mk_mean_script.sh ata $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh trmm $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh trisolve_vector $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh trisolve_matrix $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh cholesky $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh partial_lu_decomp $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh tridiagonalization $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh hessenberg $1 11 100 300 1000 $mode $prefix -source mk_mean_script.sh symv $1 11 50 300 1000 $mode $prefix -source mk_mean_script.sh syr2 $1 11 50 300 1000 $mode $prefix -source mk_mean_script.sh ger $1 11 50 300 1000 $mode $prefix -source mk_mean_script.sh rot $1 11 2500 100000 250000 $mode $prefix -source mk_mean_script.sh complete_lu_decomp $1 11 100 300 1000 $mode $prefix - -fi - -## compile the web page ## - -#echo `cat footer.html` >> $webpagefilename \ No newline at end of file diff --git a/eigen/bench/btl/data/mean.cxx b/eigen/bench/btl/data/mean.cxx deleted file mode 100644 index c567ef3..0000000 --- a/eigen/bench/btl/data/mean.cxx +++ /dev/null @@ -1,182 +0,0 @@ -//===================================================== -// File : mean.cxx -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:15 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include -#include -#include -#include -#include "bench_parameter.hh" -#include "utils/xy_file.hh" -#include - -using namespace std; - -double mean_calc(const vector & tab_sizes, const vector & tab_mflops, const int size_min, const int size_max); - -class Lib_Mean{ - -public: - Lib_Mean( void ):_lib_name(),_mean_in_cache(),_mean_out_of_cache(){ - MESSAGE("Lib_mean Default Ctor"); - MESSAGE("!!! should not be used"); - exit(0); - } - Lib_Mean(const string & name, const double & mic, const double & moc):_lib_name(name),_mean_in_cache(mic),_mean_out_of_cache(moc){ - MESSAGE("Lib_mean Ctor"); - } - Lib_Mean(const Lib_Mean & lm):_lib_name(lm._lib_name),_mean_in_cache(lm._mean_in_cache),_mean_out_of_cache(lm._mean_out_of_cache){ - MESSAGE("Lib_mean Copy Ctor"); - } - ~Lib_Mean( void ){ - MESSAGE("Lib_mean Dtor"); - } - - double _mean_in_cache; - double _mean_out_of_cache; - string _lib_name; - - bool operator < ( const Lib_Mean &right) const - { - //return ( this->_mean_out_of_cache > right._mean_out_of_cache) ; - return ( this->_mean_in_cache > right._mean_in_cache) ; - } - -}; - - -int main( int argc , char *argv[] ) -{ - - if (argc<6){ - INFOS("!!! Error ... usage : main what mic Mic moc Moc filename1 finename2..."); - exit(0); - } - INFOS(argc); - - int min_in_cache=atoi(argv[2]); - int max_in_cache=atoi(argv[3]); - int min_out_of_cache=atoi(argv[4]); - int max_out_of_cache=atoi(argv[5]); - - - multiset s_lib_mean ; - - for (int i=6;i tab_sizes; - vector tab_mflops; - - read_xy_file(filename,tab_sizes,tab_mflops); - - mic=mean_calc(tab_sizes,tab_mflops,min_in_cache,max_in_cache); - moc=mean_calc(tab_sizes,tab_mflops,min_out_of_cache,max_out_of_cache); - - Lib_Mean cur_lib_mean(filename,mic,moc); - - s_lib_mean.insert(cur_lib_mean); - - } - - } - - - cout << "" << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - - multiset::iterator is = s_lib_mean.begin(); - Lib_Mean best(*is); - - - for (is=s_lib_mean.begin(); is!=s_lib_mean.end() ; is++){ - - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - cout << " " << endl ; - - } - - cout << "
" << argv[1] << " in cache
mean perf
Mflops
in cache
% best
out of cache
mean perf
Mflops
out of cache
% best
details comments
" << is->_lib_name << " " << is->_mean_in_cache << " " << 100*(is->_mean_in_cache/best._mean_in_cache) << " " << is->_mean_out_of_cache << " " << 100*(is->_mean_out_of_cache/best._mean_out_of_cache) << " " << - "_lib_name<<"_"<snippet/" - "_lib_name<<"_flags\">flags " << - "_lib_name<<"_comments\">click here
" << endl ; - - ofstream output_file ("../order_lib",ios::out) ; - - for (is=s_lib_mean.begin(); is!=s_lib_mean.end() ; is++){ - output_file << is->_lib_name << endl ; - } - - output_file.close(); - -} - -double mean_calc(const vector & tab_sizes, const vector & tab_mflops, const int size_min, const int size_max){ - - int size=tab_sizes.size(); - int nb_sample=0; - double mean=0.0; - - for (int i=0;i=size_min)&&(tab_sizes[i]<=size_max)){ - - nb_sample++; - mean+=tab_mflops[i]; - - } - - - } - - if (nb_sample==0){ - INFOS("no data for mean calculation"); - return 0.0; - } - - return mean/nb_sample; -} - - - - diff --git a/eigen/bench/btl/data/mk_gnuplot_script.sh b/eigen/bench/btl/data/mk_gnuplot_script.sh deleted file mode 100644 index 2ca7b5c..0000000 --- a/eigen/bench/btl/data/mk_gnuplot_script.sh +++ /dev/null @@ -1,68 +0,0 @@ -#! /bin/bash -WHAT=$1 -DIR=$2 -echo $WHAT script generation -cat $WHAT.hh > $WHAT.gnuplot - -DATA_FILE=`find $DIR -name "*.dat" | grep $WHAT` - -echo plot \\ >> $WHAT.gnuplot - -for FILE in $DATA_FILE -do - LAST=$FILE -done - -echo LAST=$LAST - -for FILE in $DATA_FILE -do - if [ $FILE != $LAST ] - then - BASE=${FILE##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} - echo "'"$FILE"'" title "'"$TITLE"'" ",\\" >> $WHAT.gnuplot - fi -done -BASE=${LAST##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} -echo "'"$LAST"'" title "'"$TITLE"'" >> $WHAT.gnuplot - -#echo set term postscript color >> $WHAT.gnuplot -#echo set output "'"$WHAT.ps"'" >> $WHAT.gnuplot -echo set term pbm small color >> $WHAT.gnuplot -echo set output "'"$WHAT.ppm"'" >> $WHAT.gnuplot -echo plot \\ >> $WHAT.gnuplot - -for FILE in $DATA_FILE -do - if [ $FILE != $LAST ] - then - BASE=${FILE##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} - echo "'"$FILE"'" title "'"$TITLE"'" ",\\" >> $WHAT.gnuplot - fi -done -BASE=${LAST##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} -echo "'"$LAST"'" title "'"$TITLE"'" >> $WHAT.gnuplot - -echo set term jpeg large >> $WHAT.gnuplot -echo set output "'"$WHAT.jpg"'" >> $WHAT.gnuplot -echo plot \\ >> $WHAT.gnuplot - -for FILE in $DATA_FILE -do - if [ $FILE != $LAST ] - then - BASE=${FILE##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} - echo "'"$FILE"'" title "'"$TITLE"'" ",\\" >> $WHAT.gnuplot - fi -done -BASE=${LAST##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} -echo "'"$LAST"'" title "'"$TITLE"'" >> $WHAT.gnuplot - - -gnuplot -persist < $WHAT.gnuplot - -rm $WHAT.gnuplot - - - - diff --git a/eigen/bench/btl/data/mk_mean_script.sh b/eigen/bench/btl/data/mk_mean_script.sh deleted file mode 100644 index b10df02..0000000 --- a/eigen/bench/btl/data/mk_mean_script.sh +++ /dev/null @@ -1,52 +0,0 @@ -#! /bin/bash -WHAT=$1 -DIR=$2 -MINIC=$3 -MAXIC=$4 -MINOC=$5 -MAXOC=$6 -prefix=$8 - -meanstatsfilename=$2/mean.html - -WORK_DIR=tmp -mkdir $WORK_DIR - -DATA_FILE=`find $DIR -name "*.dat" | grep _${WHAT}` - -if [ -n "$DATA_FILE" ]; then - - echo "" - echo "$1..." - for FILE in $DATA_FILE - do - ##echo hello world - ##echo "mk_mean_script1" ${FILE} - BASE=${FILE##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} - - ##echo "mk_mean_script1" ${TITLE} - cp $FILE ${WORK_DIR}/${TITLE} - - done - - cd $WORK_DIR - ../main $1 $3 $4 $5 $6 * >> ../$meanstatsfilename - ../mk_new_gnuplot.sh $1 $2 $7 - rm -f *.gnuplot - cd .. - - echo '
' >> $meanstatsfilename - - webpagefilename=$2/index.html - # echo '

'${WHAT}'

' >> $webpagefilename - echo '
'${WHAT}'
' >> $webpagefilename - -fi - -rm -R $WORK_DIR - - - - - - diff --git a/eigen/bench/btl/data/mk_new_gnuplot.sh b/eigen/bench/btl/data/mk_new_gnuplot.sh deleted file mode 100644 index fad3b23..0000000 --- a/eigen/bench/btl/data/mk_new_gnuplot.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -WHAT=$1 -DIR=$2 - -cat ../gnuplot_common_settings.hh > ${WHAT}.gnuplot - -echo "set title " `grep ${WHAT} ../action_settings.txt | head -n 1 | cut -d ";" -f 2` >> $WHAT.gnuplot -echo "set xlabel " `grep ${WHAT} ../action_settings.txt | head -n 1 | cut -d ";" -f 3` " offset 0,0" >> $WHAT.gnuplot -echo "set xrange [" `grep ${WHAT} ../action_settings.txt | head -n 1 | cut -d ";" -f 4` "]" >> $WHAT.gnuplot - -if [ $# > 3 ]; then - if [ "$3" == "tiny" ]; then - echo "set xrange [2:16]" >> $WHAT.gnuplot - echo "set nologscale" >> $WHAT.gnuplot - fi -fi - - - -DATA_FILE=`cat ../order_lib` -echo set term postscript color rounded enhanced >> $WHAT.gnuplot -echo set output "'"../${DIR}/$WHAT.ps"'" >> $WHAT.gnuplot - -# echo set term svg color rounded enhanced >> $WHAT.gnuplot -# echo "set terminal svg enhanced size 1000 1000 fname \"Times\" fsize 36" >> $WHAT.gnuplot -# echo set output "'"../${DIR}/$WHAT.svg"'" >> $WHAT.gnuplot - -echo plot \\ >> $WHAT.gnuplot - -for FILE in $DATA_FILE -do - LAST=$FILE -done - -for FILE in $DATA_FILE -do - BASE=${FILE##*/} ; BASE=${FILE##*/} ; AVANT=bench_${WHAT}_ ; REDUC=${BASE##*$AVANT} ; TITLE=${REDUC%.dat} - - echo "'"$FILE"'" `grep $TITLE ../perlib_plot_settings.txt | head -n 1 | cut -d ";" -f 2` "\\" >> $WHAT.gnuplot - if [ $FILE != $LAST ] - then - echo ", \\" >> $WHAT.gnuplot - fi -done -echo " " >> $WHAT.gnuplot - -gnuplot -persist < $WHAT.gnuplot - -rm $WHAT.gnuplot - -ps2pdf ../${DIR}/$WHAT.ps ../${DIR}/$WHAT.pdf -convert -background white -density 120 -rotate 90 -resize 800 +dither -colors 256 -quality 0 ../${DIR}/$WHAT.ps -background white -flatten ../${DIR}/$WHAT.png - -# pstoedit -rotate -90 -xscale 0.8 -yscale 0.8 -centered -yshift -50 -xshift -100 -f plot-svg aat.ps aat2.svg diff --git a/eigen/bench/btl/data/perlib_plot_settings.txt b/eigen/bench/btl/data/perlib_plot_settings.txt deleted file mode 100644 index f023cfe..0000000 --- a/eigen/bench/btl/data/perlib_plot_settings.txt +++ /dev/null @@ -1,16 +0,0 @@ -eigen3 ; with lines lw 4 lt 1 lc rgbcolor "black" -eigen2 ; with lines lw 3 lt 1 lc rgbcolor "#999999" -EigenBLAS ; with lines lw 3 lt 3 lc rgbcolor "#999999" -eigen3_novec ; with lines lw 2 lt 1 lc rgbcolor "#999999" -eigen3_nogccvec ; with lines lw 2 lt 2 lc rgbcolor "#991010" -INTEL_MKL ; with lines lw 3 lt 1 lc rgbcolor "#ff0000" -ATLAS ; with lines lw 3 lt 1 lc rgbcolor "#008000" -gmm ; with lines lw 3 lt 1 lc rgbcolor "#0000ff" -ublas ; with lines lw 3 lt 1 lc rgbcolor "#00b7ff" -mtl4 ; with lines lw 3 lt 1 lc rgbcolor "#d18847" -blitz ; with lines lw 3 lt 1 lc rgbcolor "#ff00ff" -F77 ; with lines lw 3 lt 3 lc rgbcolor "#e6e64c" -OPENBLAS ; with lines lw 3 lt 1 lc rgbcolor "#C05600" -C ; with lines lw 3 lt 3 lc rgbcolor "#e6bd96" -ACML ; with lines lw 2 lt 3 lc rgbcolor "#e6e64c" -blaze ; with lines lw 3 lt 1 lc rgbcolor "#ff00ff" diff --git a/eigen/bench/btl/data/regularize.cxx b/eigen/bench/btl/data/regularize.cxx deleted file mode 100644 index eea2b8b..0000000 --- a/eigen/bench/btl/data/regularize.cxx +++ /dev/null @@ -1,131 +0,0 @@ -//===================================================== -// File : regularize.cxx -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:15 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include -#include -#include -#include -#include "bench_parameter.hh" -#include - -using namespace std; - -void read_xy_file(const string & filename, vector & tab_sizes, vector & tab_mflops); -void regularize_curve(const string & filename, - const vector & tab_mflops, - const vector & tab_sizes, - int start_cut_size, int stop_cut_size); -///////////////////////////////////////////////////////////////////////////////////////////////// - -int main( int argc , char *argv[] ) -{ - - // input data - - if (argc<4){ - INFOS("!!! Error ... usage : main filename start_cut_size stop_cut_size regularize_filename"); - exit(0); - } - INFOS(argc); - - int start_cut_size=atoi(argv[2]); - int stop_cut_size=atoi(argv[3]); - - string filename=argv[1]; - string regularize_filename=argv[4]; - - INFOS(filename); - INFOS("start_cut_size="< tab_sizes; - vector tab_mflops; - - read_xy_file(filename,tab_sizes,tab_mflops); - - // regularizeing - - regularize_curve(regularize_filename,tab_mflops,tab_sizes,start_cut_size,stop_cut_size); - - -} - -////////////////////////////////////////////////////////////////////////////////////// - -void regularize_curve(const string & filename, - const vector & tab_mflops, - const vector & tab_sizes, - int start_cut_size, int stop_cut_size) -{ - int size=tab_mflops.size(); - ofstream output_file (filename.c_str(),ios::out) ; - - int i=0; - - while(tab_sizes[i] & tab_sizes, vector & tab_mflops){ - - ifstream input_file (filename.c_str(),ios::in) ; - - if (!input_file){ - INFOS("!!! Error opening "<> size >> mflops ){ - nb_point++; - tab_sizes.push_back(size); - tab_mflops.push_back(mflops); - } - SCRUTE(nb_point); - - input_file.close(); -} - diff --git a/eigen/bench/btl/data/smooth.cxx b/eigen/bench/btl/data/smooth.cxx deleted file mode 100644 index e5270cc..0000000 --- a/eigen/bench/btl/data/smooth.cxx +++ /dev/null @@ -1,198 +0,0 @@ -//===================================================== -// File : smooth.cxx -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:15 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include -#include -#include -#include -#include -#include "bench_parameter.hh" -#include - -using namespace std; - -void read_xy_file(const string & filename, vector & tab_sizes, vector & tab_mflops); -void write_xy_file(const string & filename, vector & tab_sizes, vector & tab_mflops); -void smooth_curve(const vector & tab_mflops, vector & smooth_tab_mflops,int window_half_width); -void centered_smooth_curve(const vector & tab_mflops, vector & smooth_tab_mflops,int window_half_width); - -///////////////////////////////////////////////////////////////////////////////////////////////// - -int main( int argc , char *argv[] ) -{ - - // input data - - if (argc<3){ - INFOS("!!! Error ... usage : main filename window_half_width smooth_filename"); - exit(0); - } - INFOS(argc); - - int window_half_width=atoi(argv[2]); - - string filename=argv[1]; - string smooth_filename=argv[3]; - - INFOS(filename); - INFOS("window_half_width="< tab_sizes; - vector tab_mflops; - - read_xy_file(filename,tab_sizes,tab_mflops); - - // smoothing - - vector smooth_tab_mflops; - - //smooth_curve(tab_mflops,smooth_tab_mflops,window_half_width); - centered_smooth_curve(tab_mflops,smooth_tab_mflops,window_half_width); - - // output result - - write_xy_file(smooth_filename,tab_sizes,smooth_tab_mflops); - - -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -template -double weighted_mean(const VECTOR & data) -{ - - double mean=0.0; - - for (int i=0 ; i & tab_mflops, vector & smooth_tab_mflops,int window_half_width){ - - int window_width=2*window_half_width+1; - - int size=tab_mflops.size(); - - vector sample(window_width); - - for (int i=0 ; i < size ; i++){ - - for ( int j=0 ; j < window_width ; j++ ){ - - int shifted_index=i+j-window_half_width; - if (shifted_index<0) shifted_index=0; - if (shifted_index>size-1) shifted_index=size-1; - sample[j]=tab_mflops[shifted_index]; - - } - - smooth_tab_mflops.push_back(weighted_mean(sample)); - - } - -} - -void centered_smooth_curve(const vector & tab_mflops, vector & smooth_tab_mflops,int window_half_width){ - - int max_window_width=2*window_half_width+1; - - int size=tab_mflops.size(); - - - for (int i=0 ; i < size ; i++){ - - deque sample; - - - sample.push_back(tab_mflops[i]); - - for ( int j=1 ; j <= window_half_width ; j++ ){ - - int before=i-j; - int after=i+j; - - if ((before>=0)&&(after & tab_sizes, vector & tab_mflops){ - - ofstream output_file (filename.c_str(),ios::out) ; - - for (int i=0 ; i < tab_sizes.size() ; i++) - { - output_file << tab_sizes[i] << " " << tab_mflops[i] << endl ; - } - - output_file.close(); - -} - - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -void read_xy_file(const string & filename, vector & tab_sizes, vector & tab_mflops){ - - ifstream input_file (filename.c_str(),ios::in) ; - - if (!input_file){ - INFOS("!!! Error opening "<> size >> mflops ){ - nb_point++; - tab_sizes.push_back(size); - tab_mflops.push_back(mflops); - } - SCRUTE(nb_point); - - input_file.close(); -} - diff --git a/eigen/bench/btl/data/smooth_all.sh b/eigen/bench/btl/data/smooth_all.sh deleted file mode 100644 index 3e5bfdf..0000000 --- a/eigen/bench/btl/data/smooth_all.sh +++ /dev/null @@ -1,68 +0,0 @@ -#! /bin/bash -ORIG_DIR=$1 -SMOOTH_DIR=${ORIG_DIR}_smooth -mkdir ${SMOOTH_DIR} - -AXPY_FILE=`find ${ORIG_DIR} -name "*.dat" | grep axpy` -for FILE in ${AXPY_FILE} -do - echo $FILE - BASE=${FILE##*/} - ./smooth ${ORIG_DIR}/${BASE} 4 ${SMOOTH_DIR}/${BASE}_tmp - ./regularize ${SMOOTH_DIR}/${BASE}_tmp 2500 15000 ${SMOOTH_DIR}/${BASE} - rm -f ${SMOOTH_DIR}/${BASE}_tmp -done - - -MATRIX_VECTOR_FILE=`find ${ORIG_DIR} -name "*.dat" | grep matrix_vector` -for FILE in ${MATRIX_VECTOR_FILE} -do - echo $FILE - BASE=${FILE##*/} - ./smooth ${ORIG_DIR}/${BASE} 4 ${SMOOTH_DIR}/${BASE}_tmp - ./regularize ${SMOOTH_DIR}/${BASE}_tmp 50 180 ${SMOOTH_DIR}/${BASE} - rm -f ${SMOOTH_DIR}/${BASE}_tmp -done - -MATRIX_MATRIX_FILE=`find ${ORIG_DIR} -name "*.dat" | grep matrix_matrix` -for FILE in ${MATRIX_MATRIX_FILE} -do - echo $FILE - BASE=${FILE##*/} - ./smooth ${ORIG_DIR}/${BASE} 4 ${SMOOTH_DIR}/${BASE} -done - -AAT_FILE=`find ${ORIG_DIR} -name "*.dat" | grep _aat` -for FILE in ${AAT_FILE} -do - echo $FILE - BASE=${FILE##*/} - ./smooth ${ORIG_DIR}/${BASE} 4 ${SMOOTH_DIR}/${BASE} -done - - -ATA_FILE=`find ${ORIG_DIR} -name "*.dat" | grep _ata` -for FILE in ${ATA_FILE} -do - echo $FILE - BASE=${FILE##*/} - ./smooth ${ORIG_DIR}/${BASE} 4 ${SMOOTH_DIR}/${BASE} -done - -### no smoothing for tinyvector and matrices libs - -TINY_BLITZ_FILE=`find ${ORIG_DIR} -name "*.dat" | grep tiny_blitz` -for FILE in ${TINY_BLITZ_FILE} -do - echo $FILE - BASE=${FILE##*/} - cp ${ORIG_DIR}/${BASE} ${SMOOTH_DIR}/${BASE} -done - -TVMET_FILE=`find ${ORIG_DIR} -name "*.dat" | grep tvmet` -for FILE in ${TVMET_FILE} -do - echo $FILE - BASE=${FILE##*/} - cp ${ORIG_DIR}/${BASE} ${SMOOTH_DIR}/${BASE} -done diff --git a/eigen/bench/btl/generic_bench/bench.hh b/eigen/bench/btl/generic_bench/bench.hh deleted file mode 100644 index 7b7b951..0000000 --- a/eigen/bench/btl/generic_bench/bench.hh +++ /dev/null @@ -1,168 +0,0 @@ -//===================================================== -// File : bench.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BENCH_HH -#define BENCH_HH - -#include "btl.hh" -#include "bench_parameter.hh" -#include -#include "utilities.h" -#include "size_lin_log.hh" -#include "xy_file.hh" -#include -#include -#include "timers/portable_perf_analyzer.hh" -// #include "timers/mixed_perf_analyzer.hh" -// #include "timers/x86_perf_analyzer.hh" -// #include "timers/STL_perf_analyzer.hh" -#ifdef HAVE_MKL -extern "C" void cblas_saxpy(const int, const float, const float*, const int, float *, const int); -#endif -using namespace std; - -template class Perf_Analyzer, class Action> -BTL_DONT_INLINE void bench( int size_min, int size_max, int nb_point ) -{ - if (BtlConfig::skipAction(Action::name())) - return; - - string filename="bench_"+Action::name()+".dat"; - - INFOS("starting " < tab_mflops(nb_point); - std::vector tab_sizes(nb_point); - - // matrices and vector size calculations - size_lin_log(nb_point,size_min,size_max,tab_sizes); - - std::vector oldSizes; - std::vector oldFlops; - bool hasOldResults = read_xy_file(filename, oldSizes, oldFlops, true); - int oldi = oldSizes.size() - 1; - - // loop on matrix size - Perf_Analyzer perf_action; - for (int i=nb_point-1;i>=0;i--) - { - //INFOS("size=" <=0 && oldSizes[oldi]>tab_sizes[i]) - --oldi; - if (oldi>=0 && oldSizes[oldi]==tab_sizes[i]) - { - if (oldFlops[oldi] "; - else - std::cout << "\t < "; - std::cout << oldFlops[oldi]; - } - --oldi; - } - std::cout << " MFlops (" << nb_point-i << "/" << nb_point << ")" << std::endl; - } - - if (!BtlConfig::Instance.overwriteResults) - { - if (hasOldResults) - { - // merge the two data - std::vector newSizes; - std::vector newFlops; - unsigned int i=0; - unsigned int j=0; - while (i -BTL_DONT_INLINE void bench( int size_min, int size_max, int nb_point ){ - - // if the rdtsc is not available : - bench(size_min,size_max,nb_point); - // if the rdtsc is available : -// bench(size_min,size_max,nb_point); - - - // Only for small problem size. Otherwize it will be too long -// bench(size_min,size_max,nb_point); -// bench(size_min,size_max,nb_point); - -} - -#endif diff --git a/eigen/bench/btl/generic_bench/bench_parameter.hh b/eigen/bench/btl/generic_bench/bench_parameter.hh deleted file mode 100644 index 2b01149..0000000 --- a/eigen/bench/btl/generic_bench/bench_parameter.hh +++ /dev/null @@ -1,53 +0,0 @@ -//===================================================== -// File : bench_parameter.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BENCH_PARAMETER_HH -#define BENCH_PARAMETER_HH - -// minimal time for each measurement -#define REAL_TYPE float -// minimal time for each measurement -#define MIN_TIME 0.2 -// nb of point on bench curves -#define NB_POINT 100 -// min vector size for axpy bench -#define MIN_AXPY 5 -// max vector size for axpy bench -#define MAX_AXPY 3000000 -// min matrix size for matrix vector product bench -#define MIN_MV 5 -// max matrix size for matrix vector product bench -#define MAX_MV 5000 -// min matrix size for matrix matrix product bench -#define MIN_MM 5 -// max matrix size for matrix matrix product bench -#define MAX_MM MAX_MV -// min matrix size for LU bench -#define MIN_LU 5 -// max matrix size for LU bench -#define MAX_LU 3000 -// max size for tiny vector and matrix -#define TINY_MV_MAX_SIZE 16 -// default nb_sample for x86 timer -#define DEFAULT_NB_SAMPLE 1000 - -// how many times we run a single bench (keep the best perf) -#define DEFAULT_NB_TRIES 3 - -#endif diff --git a/eigen/bench/btl/generic_bench/btl.hh b/eigen/bench/btl/generic_bench/btl.hh deleted file mode 100644 index 706b00f..0000000 --- a/eigen/bench/btl/generic_bench/btl.hh +++ /dev/null @@ -1,242 +0,0 @@ -//===================================================== -// File : btl.hh -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BTL_HH -#define BTL_HH - -#include "bench_parameter.hh" -#include -#include -#include -#include -#include "utilities.h" - -#if (defined __GNUC__) -#define BTL_ALWAYS_INLINE __attribute__((always_inline)) inline -#else -#define BTL_ALWAYS_INLINE inline -#endif - -#if (defined __GNUC__) -#define BTL_DONT_INLINE __attribute__((noinline)) -#else -#define BTL_DONT_INLINE -#endif - -#if (defined __GNUC__) -#define BTL_ASM_COMMENT(X) asm("#" X) -#else -#define BTL_ASM_COMMENT(X) -#endif - -#ifdef __SSE__ -#include "xmmintrin.h" -// This enables flush to zero (FTZ) and denormals are zero (DAZ) modes: -#define BTL_DISABLE_SSE_EXCEPTIONS() { _mm_setcsr(_mm_getcsr() | 0x8040); } -#else -#define BTL_DISABLE_SSE_EXCEPTIONS() -#endif - -/** Enhanced std::string -*/ -class BtlString : public std::string -{ -public: - BtlString() : std::string() {} - BtlString(const BtlString& str) : std::string(static_cast(str)) {} - BtlString(const std::string& str) : std::string(str) {} - BtlString(const char* str) : std::string(str) {} - - operator const char* () const { return c_str(); } - - void trim( bool left = true, bool right = true ) - { - int lspaces, rspaces, len = length(), i; - lspaces = rspaces = 0; - - if ( left ) - for (i=0; i=0 && (at(i)==' '||at(i)=='\t'||at(i)=='\r'||at(i)=='\n'); rspaces++,i--); - - *this = substr(lspaces, len-lspaces-rspaces); - } - - std::vector split( const BtlString& delims = "\t\n ") const - { - std::vector ret; - unsigned int numSplits = 0; - size_t start, pos; - start = 0; - do - { - pos = find_first_of(delims, start); - if (pos == start) - { - ret.push_back(""); - start = pos + 1; - } - else if (pos == npos) - ret.push_back( substr(start) ); - else - { - ret.push_back( substr(start, pos - start) ); - start = pos + 1; - } - //start = find_first_not_of(delims, start); - ++numSplits; - } while (pos != npos); - return ret; - } - - bool endsWith(const BtlString& str) const - { - if(str.size()>this->size()) - return false; - return this->substr(this->size()-str.size(),str.size()) == str; - } - bool contains(const BtlString& str) const - { - return this->find(str)size(); - } - bool beginsWith(const BtlString& str) const - { - if(str.size()>this->size()) - return false; - return this->substr(0,str.size()) == str; - } - - BtlString toLowerCase( void ) - { - std::transform(begin(), end(), begin(), static_cast(::tolower) ); - return *this; - } - BtlString toUpperCase( void ) - { - std::transform(begin(), end(), begin(), static_cast(::toupper) ); - return *this; - } - - /** Case insensitive comparison. - */ - bool isEquiv(const BtlString& str) const - { - BtlString str0 = *this; - str0.toLowerCase(); - BtlString str1 = str; - str1.toLowerCase(); - return str0 == str1; - } - - /** Decompose the current string as a path and a file. - For instance: "dir1/dir2/file.ext" leads to path="dir1/dir2/" and filename="file.ext" - */ - void decomposePathAndFile(BtlString& path, BtlString& filename) const - { - std::vector elements = this->split("/\\"); - path = ""; - filename = elements.back(); - elements.pop_back(); - if (this->at(0)=='/') - path = "/"; - for (unsigned int i=0 ; i config = BtlString(_config).split(" \t\n"); - for (unsigned int i = 0; i m_selectedActionNames; -}; - -#define BTL_MAIN \ - BtlConfig BtlConfig::Instance - -#endif // BTL_HH diff --git a/eigen/bench/btl/generic_bench/init/init_function.hh b/eigen/bench/btl/generic_bench/init/init_function.hh deleted file mode 100644 index e467cb6..0000000 --- a/eigen/bench/btl/generic_bench/init/init_function.hh +++ /dev/null @@ -1,54 +0,0 @@ -//===================================================== -// File : init_function.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:18 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef INIT_FUNCTION_HH -#define INIT_FUNCTION_HH - -double simple_function(int index) -{ - return index; -} - -double simple_function(int index_i, int index_j) -{ - return index_i+index_j; -} - -double pseudo_random(int /*index*/) -{ - return std::rand()/double(RAND_MAX); -} - -double pseudo_random(int /*index_i*/, int /*index_j*/) -{ - return std::rand()/double(RAND_MAX); -} - - -double null_function(int /*index*/) -{ - return 0.0; -} - -double null_function(int /*index_i*/, int /*index_j*/) -{ - return 0.0; -} - -#endif diff --git a/eigen/bench/btl/generic_bench/init/init_matrix.hh b/eigen/bench/btl/generic_bench/init/init_matrix.hh deleted file mode 100644 index 6382d30..0000000 --- a/eigen/bench/btl/generic_bench/init/init_matrix.hh +++ /dev/null @@ -1,64 +0,0 @@ -//===================================================== -// File : init_matrix.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:19 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef INIT_MATRIX_HH -#define INIT_MATRIX_HH - -// The Vector class must satisfy the following part of STL vector concept : -// resize() method -// [] operator for setting element -// value_type defined -template -BTL_DONT_INLINE void init_row(Vector & X, int size, int row){ - - X.resize(size); - - for (unsigned int j=0;j -BTL_DONT_INLINE void init_matrix(Vector & A, int size){ - A.resize(size); - for (unsigned int row=0; row(A[row],size,row); - } -} - -template -BTL_DONT_INLINE void init_matrix_symm(Matrix& A, int size){ - A.resize(size); - for (unsigned int row=0; row -// Copyright (C) EDF R&D, lun sep 30 14:23:18 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef INIT_VECTOR_HH -#define INIT_VECTOR_HH - -// The Vector class must satisfy the following part of STL vector concept : -// resize() method -// [] operator for setting element -// value_type defined -template -void init_vector(Vector & X, int size){ - - X.resize(size); - - for (unsigned int i=0;i -// Copyright (C) EDF R&D, lun sep 30 14:23:16 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BENCH_STATIC_HH -#define BENCH_STATIC_HH - -#include "btl.hh" -#include "bench_parameter.hh" -#include -#include "utilities.h" -#include "xy_file.hh" -#include "static/static_size_generator.hh" -#include "timers/portable_perf_analyzer.hh" -// #include "timers/mixed_perf_analyzer.hh" -// #include "timers/x86_perf_analyzer.hh" - -using namespace std; - - -template class Perf_Analyzer, template class Action, template class Interface> -BTL_DONT_INLINE void bench_static(void) -{ - if (BtlConfig::skipAction(Action >::name())) - return; - - string filename = "bench_" + Action >::name() + ".dat"; - - INFOS("starting " << filename); - - const int max_size = TINY_MV_MAX_SIZE; - - std::vector tab_mflops; - std::vector tab_sizes; - - static_size_generator::go(tab_sizes,tab_mflops); - - dump_xy_file(tab_sizes,tab_mflops,filename); -} - -// default Perf Analyzer -template class Action, template class Interface> -BTL_DONT_INLINE void bench_static(void) -{ - bench_static(); - //bench_static(); - //bench_static(); -} - -#endif - - - - - - - - - - - - - - - diff --git a/eigen/bench/btl/generic_bench/static/intel_bench_fixed_size.hh b/eigen/bench/btl/generic_bench/static/intel_bench_fixed_size.hh deleted file mode 100644 index b4edcbc..0000000 --- a/eigen/bench/btl/generic_bench/static/intel_bench_fixed_size.hh +++ /dev/null @@ -1,66 +0,0 @@ -//===================================================== -// File : intel_bench_fixed_size.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, mar déc 3 18:59:37 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef _BENCH_FIXED_SIZE_HH_ -#define _BENCH_FIXED_SIZE_HH_ - -#include "utilities.h" -#include "function_time.hh" - -template -double bench_fixed_size(int size, unsigned long long & nb_calc,unsigned long long & nb_init) -{ - - Action action(size); - - double time_baseline=time_init(nb_init,action); - - while (time_baseline < MIN_TIME) { - - //INFOS("nb_init="< > > perf_action; - tab_mflops.push_back(perf_action.eval_mflops(SIZE)); - std::cout << tab_mflops.back() << " MFlops" << std::endl; - static_size_generator::go(tab_sizes,tab_mflops); - }; -}; - -//recursion end - -template class Perf_Analyzer, template class Action, template class Interface> -struct static_size_generator<1,Perf_Analyzer,Action,Interface>{ - static void go(vector & tab_sizes, vector & tab_mflops) - { - tab_sizes.push_back(1); - Perf_Analyzer > > perf_action; - tab_mflops.push_back(perf_action.eval_mflops(1)); - }; -}; - -#endif - - - - diff --git a/eigen/bench/btl/generic_bench/timers/STL_perf_analyzer.hh b/eigen/bench/btl/generic_bench/timers/STL_perf_analyzer.hh deleted file mode 100644 index c9f894b..0000000 --- a/eigen/bench/btl/generic_bench/timers/STL_perf_analyzer.hh +++ /dev/null @@ -1,82 +0,0 @@ -//===================================================== -// File : STL_perf_analyzer.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, mar déc 3 18:59:35 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef _STL_PERF_ANALYSER_HH -#define _STL_PERF_ANALYSER_HH - -#include "STL_timer.hh" -#include "bench_parameter.hh" - -template -class STL_Perf_Analyzer{ -public: - STL_Perf_Analyzer(unsigned long long nb_sample=DEFAULT_NB_SAMPLE):_nb_sample(nb_sample),_chronos() - { - MESSAGE("STL_Perf_Analyzer Ctor"); - }; - STL_Perf_Analyzer( const STL_Perf_Analyzer & ){ - INFOS("Copy Ctor not implemented"); - exit(0); - }; - ~STL_Perf_Analyzer( void ){ - MESSAGE("STL_Perf_Analyzer Dtor"); - }; - - - inline double eval_mflops(int size) - { - - ACTION action(size); - - _chronos.start_baseline(_nb_sample); - - do { - - action.initialize(); - } while (_chronos.check()); - - double baseline_time=_chronos.get_time(); - - _chronos.start(_nb_sample); - do { - action.initialize(); - action.calculate(); - } while (_chronos.check()); - - double calculate_time=_chronos.get_time(); - - double corrected_time=calculate_time-baseline_time; - - // cout << size <<" "< -// Copyright (C) EDF R&D, mar déc 3 18:59:35 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -// STL Timer Class. Adapted (L.P.) from the timer class by Musser et Al -// described int the Book : STL Tutorial and reference guide. -// Define a timer class for analyzing algorithm performance. -#include -#include -#include -#include -#include -using namespace std; - -class STL_Timer { -public: - STL_Timer(){ baseline = false; }; // Default constructor - // Start a series of r trials: - void start(unsigned int r){ - reps = r; - count = 0; - iterations.clear(); - iterations.reserve(reps); - initial = time(0); - }; - // Start a series of r trials to determine baseline time: - void start_baseline(unsigned int r) - { - baseline = true; - start(r); - } - // Returns true if the trials have been completed, else false - bool check() - { - ++count; - final = time(0); - if (initial < final) { - iterations.push_back(count); - initial = final; - count = 0; - } - return (iterations.size() < reps); - }; - // Returns the results for external use - double get_time( void ) - { - sort(iterations.begin(), iterations.end()); - return 1.0/iterations[reps/2]; - }; -private: - unsigned int reps; // Number of trials - // For storing loop iterations of a trial - vector iterations; - // For saving initial and final times of a trial - time_t initial, final; - // For counting loop iterations of a trial - unsigned long count; - // true if this is a baseline computation, false otherwise - bool baseline; - // For recording the baseline time - double baseline_time; -}; - diff --git a/eigen/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh b/eigen/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh deleted file mode 100644 index e190236..0000000 --- a/eigen/bench/btl/generic_bench/timers/mixed_perf_analyzer.hh +++ /dev/null @@ -1,73 +0,0 @@ -//===================================================== -// File : mixed_perf_analyzer.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, mar déc 3 18:59:36 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef _MIXED_PERF_ANALYSER_HH -#define _MIXED_PERF_ANALYSER_HH - -#include "x86_perf_analyzer.hh" -#include "portable_perf_analyzer.hh" - -// choose portable perf analyzer for long calculations and x86 analyser for short ones - - -template -class Mixed_Perf_Analyzer{ - -public: - Mixed_Perf_Analyzer( void ):_x86pa(),_ppa(),_use_ppa(true) - { - MESSAGE("Mixed_Perf_Analyzer Ctor"); - }; - Mixed_Perf_Analyzer( const Mixed_Perf_Analyzer & ){ - INFOS("Copy Ctor not implemented"); - exit(0); - }; - ~Mixed_Perf_Analyzer( void ){ - MESSAGE("Mixed_Perf_Analyzer Dtor"); - }; - - - inline double eval_mflops(int size) - { - - double result=0.0; - if (_use_ppa){ - result=_ppa.eval_mflops(size); - if (_ppa.get_nb_calc()>DEFAULT_NB_SAMPLE){_use_ppa=false;} - } - else{ - result=_x86pa.eval_mflops(size); - } - - return result; - } - -private: - - Portable_Perf_Analyzer _ppa; - X86_Perf_Analyzer _x86pa; - bool _use_ppa; - -}; - -#endif - - - - diff --git a/eigen/bench/btl/generic_bench/timers/portable_perf_analyzer.hh b/eigen/bench/btl/generic_bench/timers/portable_perf_analyzer.hh deleted file mode 100644 index 5e579fb..0000000 --- a/eigen/bench/btl/generic_bench/timers/portable_perf_analyzer.hh +++ /dev/null @@ -1,103 +0,0 @@ -//===================================================== -// File : portable_perf_analyzer.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, mar d�c 3 18:59:35 CET 2002 -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef _PORTABLE_PERF_ANALYZER_HH -#define _PORTABLE_PERF_ANALYZER_HH - -#include "utilities.h" -#include "timers/portable_timer.hh" - -template -class Portable_Perf_Analyzer{ -public: - Portable_Perf_Analyzer( ):_nb_calc(0), m_time_action(0), _chronos(){ - MESSAGE("Portable_Perf_Analyzer Ctor"); - }; - Portable_Perf_Analyzer( const Portable_Perf_Analyzer & ){ - INFOS("Copy Ctor not implemented"); - exit(0); - }; - ~Portable_Perf_Analyzer(){ - MESSAGE("Portable_Perf_Analyzer Dtor"); - }; - - BTL_DONT_INLINE double eval_mflops(int size) - { - Action action(size); - -// action.initialize(); -// time_action = time_calculate(action); - while (m_time_action < MIN_TIME) - { - if(_nb_calc==0) _nb_calc = 1; - else _nb_calc *= 2; - action.initialize(); - m_time_action = time_calculate(action); - } - - // optimize - for (int i=1; i -// Copyright (C) EDF R&D, mar d�c 3 18:59:35 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef _PORTABLE_PERF_ANALYZER_HH -#define _PORTABLE_PERF_ANALYZER_HH - -#include "utilities.h" -#include "timers/portable_timer.hh" - -template -class Portable_Perf_Analyzer{ -public: - Portable_Perf_Analyzer( void ):_nb_calc(1),_nb_init(1),_chronos(){ - MESSAGE("Portable_Perf_Analyzer Ctor"); - }; - Portable_Perf_Analyzer( const Portable_Perf_Analyzer & ){ - INFOS("Copy Ctor not implemented"); - exit(0); - }; - ~Portable_Perf_Analyzer( void ){ - MESSAGE("Portable_Perf_Analyzer Dtor"); - }; - - - - inline double eval_mflops(int size) - { - - Action action(size); - -// double time_baseline = time_init(action); -// while (time_baseline < MIN_TIME_INIT) -// { -// _nb_init *= 2; -// time_baseline = time_init(action); -// } -// -// // optimize -// for (int i=1; i -#include - - -class Portable_Timer -{ - public: - - Portable_Timer() - { - } - - void start() - { - m_start_time = double(mach_absolute_time())*1e-9;; - - } - - void stop() - { - m_stop_time = double(mach_absolute_time())*1e-9;; - - } - - double elapsed() - { - return user_time(); - } - - double user_time() - { - return m_stop_time - m_start_time; - } - - -private: - - double m_stop_time, m_start_time; - -}; // Portable_Timer (Apple) - -#else - -#include -#include -#include -#include - -class Portable_Timer -{ - public: - - Portable_Timer() - { - m_clkid = BtlConfig::Instance.realclock ? CLOCK_REALTIME : CLOCK_PROCESS_CPUTIME_ID; - } - - Portable_Timer(int clkid) : m_clkid(clkid) - {} - - void start() - { - timespec ts; - clock_gettime(m_clkid, &ts); - m_start_time = double(ts.tv_sec) + 1e-9 * double(ts.tv_nsec); - - } - - void stop() - { - timespec ts; - clock_gettime(m_clkid, &ts); - m_stop_time = double(ts.tv_sec) + 1e-9 * double(ts.tv_nsec); - - } - - double elapsed() - { - return user_time(); - } - - double user_time() - { - return m_stop_time - m_start_time; - } - - -private: - - int m_clkid; - double m_stop_time, m_start_time; - -}; // Portable_Timer (Linux) - -#endif - -#endif // PORTABLE_TIMER_HPP diff --git a/eigen/bench/btl/generic_bench/timers/x86_perf_analyzer.hh b/eigen/bench/btl/generic_bench/timers/x86_perf_analyzer.hh deleted file mode 100644 index 37ea21d..0000000 --- a/eigen/bench/btl/generic_bench/timers/x86_perf_analyzer.hh +++ /dev/null @@ -1,108 +0,0 @@ -//===================================================== -// File : x86_perf_analyzer.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, mar d�c 3 18:59:35 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef _X86_PERF_ANALYSER_HH -#define _X86_PERF_ANALYSER_HH - -#include "x86_timer.hh" -#include "bench_parameter.hh" - -template -class X86_Perf_Analyzer{ -public: - X86_Perf_Analyzer( unsigned long long nb_sample=DEFAULT_NB_SAMPLE):_nb_sample(nb_sample),_chronos() - { - MESSAGE("X86_Perf_Analyzer Ctor"); - _chronos.find_frequency(); - }; - X86_Perf_Analyzer( const X86_Perf_Analyzer & ){ - INFOS("Copy Ctor not implemented"); - exit(0); - }; - ~X86_Perf_Analyzer( void ){ - MESSAGE("X86_Perf_Analyzer Dtor"); - }; - - - inline double eval_mflops(int size) - { - - ACTION action(size); - - int nb_loop=5; - double calculate_time=0.0; - double baseline_time=0.0; - - for (int j=0 ; j < nb_loop ; j++){ - - _chronos.clear(); - - for(int i=0 ; i < _nb_sample ; i++) - { - _chronos.start(); - action.initialize(); - action.calculate(); - _chronos.stop(); - _chronos.add_get_click(); - } - - calculate_time += double(_chronos.get_shortest_clicks())/_chronos.frequency(); - - if (j==0) action.check_result(); - - _chronos.clear(); - - for(int i=0 ; i < _nb_sample ; i++) - { - _chronos.start(); - action.initialize(); - _chronos.stop(); - _chronos.add_get_click(); - - } - - baseline_time+=double(_chronos.get_shortest_clicks())/_chronos.frequency(); - - } - - double corrected_time = (calculate_time-baseline_time)/double(nb_loop); - - -// INFOS("_nb_sample="<<_nb_sample); -// INFOS("baseline_time="< -// Copyright (C) EDF R&D, mar d�c 3 18:59:35 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef _X86_TIMER_HH -#define _X86_TIMER_HH - -#include -#include -#include -#include -//#include "system_time.h" -#define u32 unsigned int -#include -#include "utilities.h" -#include -#include -#include -#include - -// frequence de la becanne en Hz -//#define FREQUENCY 648000000 -//#define FREQUENCY 1400000000 -#define FREQUENCY 1695000000 - -using namespace std; - - -class X86_Timer { - -public : - - X86_Timer( void ):_frequency(FREQUENCY),_nb_sample(0) - { - MESSAGE("X86_Timer Default Ctor"); - } - - inline void start( void ){ - - rdtsc(_click_start.n32[0],_click_start.n32[1]); - - } - - - inline void stop( void ){ - - rdtsc(_click_stop.n32[0],_click_stop.n32[1]); - - } - - - inline double frequency( void ){ - return _frequency; - } - - double get_elapsed_time_in_second( void ){ - - return (_click_stop.n64-_click_start.n64)/double(FREQUENCY); - - - } - - unsigned long long get_click( void ){ - - return (_click_stop.n64-_click_start.n64); - - } - - inline void find_frequency( void ){ - - time_t initial, final; - int dummy=2; - - initial = time(0); - start(); - do { - dummy+=2; - } - while(time(0)==initial); - // On est au debut d'un cycle d'une seconde !!! - initial = time(0); - start(); - do { - dummy+=2; - } - while(time(0)==initial); - final=time(0); - stop(); - // INFOS("fine grained time : "<< get_elapsed_time_in_second()); - // INFOS("coarse grained time : "<< final-initial); - _frequency=_frequency*get_elapsed_time_in_second()/double(final-initial); - /// INFOS("CPU frequency : "<< _frequency); - - } - - void add_get_click( void ){ - - _nb_sample++; - _counted_clicks[get_click()]++; - fill_history_clicks(); - - } - - void dump_statistics(string filemane){ - - ofstream outfile (filemane.c_str(),ios::out) ; - - std::map::iterator itr; - for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) - { - outfile << (*itr).first << " " << (*itr).second << endl ; - } - - outfile.close(); - - } - - void dump_history(string filemane){ - - ofstream outfile (filemane.c_str(),ios::out) ; - - - - for(int i=0 ; i<_history_mean_clicks.size() ; i++) - { - outfile << i << " " - << _history_mean_clicks[i] << " " - << _history_shortest_clicks[i] << " " - << _history_most_occured_clicks[i] << endl ; - } - - outfile.close(); - - } - - - - double get_mean_clicks( void ){ - - std::map::iterator itr; - - unsigned long long mean_clicks=0; - - for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) - { - - mean_clicks+=(*itr).second*(*itr).first; - } - - return mean_clicks/double(_nb_sample); - - } - - double get_shortest_clicks( void ){ - - return double((*_counted_clicks.begin()).first); - - } - - void fill_history_clicks( void ){ - - _history_mean_clicks.push_back(get_mean_clicks()); - _history_shortest_clicks.push_back(get_shortest_clicks()); - _history_most_occured_clicks.push_back(get_most_occured_clicks()); - - } - - - double get_most_occured_clicks( void ){ - - unsigned long long moc=0; - unsigned long long max_occurence=0; - - std::map::iterator itr; - - for(itr=_counted_clicks.begin() ; itr!=_counted_clicks.end() ; itr++) - { - - if (max_occurence<=(*itr).second){ - max_occurence=(*itr).second; - moc=(*itr).first; - } - } - - return double(moc); - - } - - void clear( void ) - { - _counted_clicks.clear(); - - _history_mean_clicks.clear(); - _history_shortest_clicks.clear(); - _history_most_occured_clicks.clear(); - - _nb_sample=0; - } - - - -private : - - union - { - unsigned long int n32[2] ; - unsigned long long n64 ; - } _click_start; - - union - { - unsigned long int n32[2] ; - unsigned long long n64 ; - } _click_stop; - - double _frequency ; - - map _counted_clicks; - - vector _history_mean_clicks; - vector _history_shortest_clicks; - vector _history_most_occured_clicks; - - unsigned long long _nb_sample; - - - -}; - - -#endif diff --git a/eigen/bench/btl/generic_bench/utils/size_lin_log.hh b/eigen/bench/btl/generic_bench/utils/size_lin_log.hh deleted file mode 100644 index bbc9f54..0000000 --- a/eigen/bench/btl/generic_bench/utils/size_lin_log.hh +++ /dev/null @@ -1,70 +0,0 @@ -//===================================================== -// File : size_lin_log.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, mar déc 3 18:59:37 CET 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef SIZE_LIN_LOG -#define SIZE_LIN_LOG - -#include "size_log.hh" - -template -void size_lin_log(const int nb_point, const int /*size_min*/, const int size_max, Vector & X) -{ - int ten=10; - int nine=9; - - X.resize(nb_point); - - if (nb_point>ten){ - - for (int i=0;i -void size_log(const int nb_point, const int size_min, const int size_max, Vector & X) -{ - X.resize(nb_point); - - float ls_min=log(float(size_min)); - float ls_max=log(float(size_max)); - - float ls=0.0; - - float delta_ls=(ls_max-ls_min)/(float(nb_point-1)); - - int size=0; - - for (int i=0;i -//# include ok for gcc3.01 -# include - -/* --- INFOS is always defined (without _DEBUG_): to be used for warnings, with release version --- */ - -# define HEREWEARE cout< -// Copyright (C) EDF R&D, lun sep 30 14:23:20 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef XY_FILE_HH -#define XY_FILE_HH -#include -#include -#include -#include -using namespace std; - -bool read_xy_file(const std::string & filename, std::vector & tab_sizes, - std::vector & tab_mflops, bool quiet = false) -{ - - std::ifstream input_file (filename.c_str(),std::ios::in); - - if (!input_file){ - if (!quiet) { - INFOS("!!! Error opening "<> size >> mflops ){ - nb_point++; - tab_sizes.push_back(size); - tab_mflops.push_back(mflops); - } - SCRUTE(nb_point); - - input_file.close(); - return true; -} - -// The Vector class must satisfy the following part of STL vector concept : -// resize() method -// [] operator for seting element -// the vector element must have the << operator define - -using namespace std; - -template -void dump_xy_file(const Vector_A & X, const Vector_B & Y, const std::string & filename){ - - ofstream outfile (filename.c_str(),ios::out) ; - int size=X.size(); - - for (int i=0;i BLASFUNC(cdotu) (int *, float *, int *, float *, int *); -std::complex BLASFUNC(cdotc) (int *, float *, int *, float *, int *); -std::complex BLASFUNC(zdotu) (int *, double *, int *, double *, int *); -std::complex BLASFUNC(zdotc) (int *, double *, int *, double *, int *); -double BLASFUNC(xdotu) (int *, double *, int *, double *, int *); -double BLASFUNC(xdotc) (int *, double *, int *, double *, int *); -#endif - -int BLASFUNC(cdotuw) (int *, float *, int *, float *, int *, float*); -int BLASFUNC(cdotcw) (int *, float *, int *, float *, int *, float*); -int BLASFUNC(zdotuw) (int *, double *, int *, double *, int *, double*); -int BLASFUNC(zdotcw) (int *, double *, int *, double *, int *, double*); - -int BLASFUNC(saxpy) (int *, float *, float *, int *, float *, int *); -int BLASFUNC(daxpy) (int *, double *, double *, int *, double *, int *); -int BLASFUNC(qaxpy) (int *, double *, double *, int *, double *, int *); -int BLASFUNC(caxpy) (int *, float *, float *, int *, float *, int *); -int BLASFUNC(zaxpy) (int *, double *, double *, int *, double *, int *); -int BLASFUNC(xaxpy) (int *, double *, double *, int *, double *, int *); -int BLASFUNC(caxpyc)(int *, float *, float *, int *, float *, int *); -int BLASFUNC(zaxpyc)(int *, double *, double *, int *, double *, int *); -int BLASFUNC(xaxpyc)(int *, double *, double *, int *, double *, int *); - -int BLASFUNC(scopy) (int *, float *, int *, float *, int *); -int BLASFUNC(dcopy) (int *, double *, int *, double *, int *); -int BLASFUNC(qcopy) (int *, double *, int *, double *, int *); -int BLASFUNC(ccopy) (int *, float *, int *, float *, int *); -int BLASFUNC(zcopy) (int *, double *, int *, double *, int *); -int BLASFUNC(xcopy) (int *, double *, int *, double *, int *); - -int BLASFUNC(sswap) (int *, float *, int *, float *, int *); -int BLASFUNC(dswap) (int *, double *, int *, double *, int *); -int BLASFUNC(qswap) (int *, double *, int *, double *, int *); -int BLASFUNC(cswap) (int *, float *, int *, float *, int *); -int BLASFUNC(zswap) (int *, double *, int *, double *, int *); -int BLASFUNC(xswap) (int *, double *, int *, double *, int *); - -float BLASFUNC(sasum) (int *, float *, int *); -float BLASFUNC(scasum)(int *, float *, int *); -double BLASFUNC(dasum) (int *, double *, int *); -double BLASFUNC(qasum) (int *, double *, int *); -double BLASFUNC(dzasum)(int *, double *, int *); -double BLASFUNC(qxasum)(int *, double *, int *); - -int BLASFUNC(isamax)(int *, float *, int *); -int BLASFUNC(idamax)(int *, double *, int *); -int BLASFUNC(iqamax)(int *, double *, int *); -int BLASFUNC(icamax)(int *, float *, int *); -int BLASFUNC(izamax)(int *, double *, int *); -int BLASFUNC(ixamax)(int *, double *, int *); - -int BLASFUNC(ismax) (int *, float *, int *); -int BLASFUNC(idmax) (int *, double *, int *); -int BLASFUNC(iqmax) (int *, double *, int *); -int BLASFUNC(icmax) (int *, float *, int *); -int BLASFUNC(izmax) (int *, double *, int *); -int BLASFUNC(ixmax) (int *, double *, int *); - -int BLASFUNC(isamin)(int *, float *, int *); -int BLASFUNC(idamin)(int *, double *, int *); -int BLASFUNC(iqamin)(int *, double *, int *); -int BLASFUNC(icamin)(int *, float *, int *); -int BLASFUNC(izamin)(int *, double *, int *); -int BLASFUNC(ixamin)(int *, double *, int *); - -int BLASFUNC(ismin)(int *, float *, int *); -int BLASFUNC(idmin)(int *, double *, int *); -int BLASFUNC(iqmin)(int *, double *, int *); -int BLASFUNC(icmin)(int *, float *, int *); -int BLASFUNC(izmin)(int *, double *, int *); -int BLASFUNC(ixmin)(int *, double *, int *); - -float BLASFUNC(samax) (int *, float *, int *); -double BLASFUNC(damax) (int *, double *, int *); -double BLASFUNC(qamax) (int *, double *, int *); -float BLASFUNC(scamax)(int *, float *, int *); -double BLASFUNC(dzamax)(int *, double *, int *); -double BLASFUNC(qxamax)(int *, double *, int *); - -float BLASFUNC(samin) (int *, float *, int *); -double BLASFUNC(damin) (int *, double *, int *); -double BLASFUNC(qamin) (int *, double *, int *); -float BLASFUNC(scamin)(int *, float *, int *); -double BLASFUNC(dzamin)(int *, double *, int *); -double BLASFUNC(qxamin)(int *, double *, int *); - -float BLASFUNC(smax) (int *, float *, int *); -double BLASFUNC(dmax) (int *, double *, int *); -double BLASFUNC(qmax) (int *, double *, int *); -float BLASFUNC(scmax) (int *, float *, int *); -double BLASFUNC(dzmax) (int *, double *, int *); -double BLASFUNC(qxmax) (int *, double *, int *); - -float BLASFUNC(smin) (int *, float *, int *); -double BLASFUNC(dmin) (int *, double *, int *); -double BLASFUNC(qmin) (int *, double *, int *); -float BLASFUNC(scmin) (int *, float *, int *); -double BLASFUNC(dzmin) (int *, double *, int *); -double BLASFUNC(qxmin) (int *, double *, int *); - -int BLASFUNC(sscal) (int *, float *, float *, int *); -int BLASFUNC(dscal) (int *, double *, double *, int *); -int BLASFUNC(qscal) (int *, double *, double *, int *); -int BLASFUNC(cscal) (int *, float *, float *, int *); -int BLASFUNC(zscal) (int *, double *, double *, int *); -int BLASFUNC(xscal) (int *, double *, double *, int *); -int BLASFUNC(csscal)(int *, float *, float *, int *); -int BLASFUNC(zdscal)(int *, double *, double *, int *); -int BLASFUNC(xqscal)(int *, double *, double *, int *); - -float BLASFUNC(snrm2) (int *, float *, int *); -float BLASFUNC(scnrm2)(int *, float *, int *); - -double BLASFUNC(dnrm2) (int *, double *, int *); -double BLASFUNC(qnrm2) (int *, double *, int *); -double BLASFUNC(dznrm2)(int *, double *, int *); -double BLASFUNC(qxnrm2)(int *, double *, int *); - -int BLASFUNC(srot) (int *, float *, int *, float *, int *, float *, float *); -int BLASFUNC(drot) (int *, double *, int *, double *, int *, double *, double *); -int BLASFUNC(qrot) (int *, double *, int *, double *, int *, double *, double *); -int BLASFUNC(csrot) (int *, float *, int *, float *, int *, float *, float *); -int BLASFUNC(zdrot) (int *, double *, int *, double *, int *, double *, double *); -int BLASFUNC(xqrot) (int *, double *, int *, double *, int *, double *, double *); - -int BLASFUNC(srotg) (float *, float *, float *, float *); -int BLASFUNC(drotg) (double *, double *, double *, double *); -int BLASFUNC(qrotg) (double *, double *, double *, double *); -int BLASFUNC(crotg) (float *, float *, float *, float *); -int BLASFUNC(zrotg) (double *, double *, double *, double *); -int BLASFUNC(xrotg) (double *, double *, double *, double *); - -int BLASFUNC(srotmg)(float *, float *, float *, float *, float *); -int BLASFUNC(drotmg)(double *, double *, double *, double *, double *); - -int BLASFUNC(srotm) (int *, float *, int *, float *, int *, float *); -int BLASFUNC(drotm) (int *, double *, int *, double *, int *, double *); -int BLASFUNC(qrotm) (int *, double *, int *, double *, int *, double *); - -/* Level 2 routines */ - -int BLASFUNC(sger)(int *, int *, float *, float *, int *, - float *, int *, float *, int *); -int BLASFUNC(dger)(int *, int *, double *, double *, int *, - double *, int *, double *, int *); -int BLASFUNC(qger)(int *, int *, double *, double *, int *, - double *, int *, double *, int *); -int BLASFUNC(cgeru)(int *, int *, float *, float *, int *, - float *, int *, float *, int *); -int BLASFUNC(cgerc)(int *, int *, float *, float *, int *, - float *, int *, float *, int *); -int BLASFUNC(zgeru)(int *, int *, double *, double *, int *, - double *, int *, double *, int *); -int BLASFUNC(zgerc)(int *, int *, double *, double *, int *, - double *, int *, double *, int *); -int BLASFUNC(xgeru)(int *, int *, double *, double *, int *, - double *, int *, double *, int *); -int BLASFUNC(xgerc)(int *, int *, double *, double *, int *, - double *, int *, double *, int *); - -int BLASFUNC(sgemv)(char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(dgemv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(qgemv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(cgemv)(char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zgemv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xgemv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(strsv) (char *, char *, char *, int *, float *, int *, - float *, int *); -int BLASFUNC(dtrsv) (char *, char *, char *, int *, double *, int *, - double *, int *); -int BLASFUNC(qtrsv) (char *, char *, char *, int *, double *, int *, - double *, int *); -int BLASFUNC(ctrsv) (char *, char *, char *, int *, float *, int *, - float *, int *); -int BLASFUNC(ztrsv) (char *, char *, char *, int *, double *, int *, - double *, int *); -int BLASFUNC(xtrsv) (char *, char *, char *, int *, double *, int *, - double *, int *); - -int BLASFUNC(stpsv) (char *, char *, char *, int *, float *, float *, int *); -int BLASFUNC(dtpsv) (char *, char *, char *, int *, double *, double *, int *); -int BLASFUNC(qtpsv) (char *, char *, char *, int *, double *, double *, int *); -int BLASFUNC(ctpsv) (char *, char *, char *, int *, float *, float *, int *); -int BLASFUNC(ztpsv) (char *, char *, char *, int *, double *, double *, int *); -int BLASFUNC(xtpsv) (char *, char *, char *, int *, double *, double *, int *); - -int BLASFUNC(strmv) (char *, char *, char *, int *, float *, int *, - float *, int *); -int BLASFUNC(dtrmv) (char *, char *, char *, int *, double *, int *, - double *, int *); -int BLASFUNC(qtrmv) (char *, char *, char *, int *, double *, int *, - double *, int *); -int BLASFUNC(ctrmv) (char *, char *, char *, int *, float *, int *, - float *, int *); -int BLASFUNC(ztrmv) (char *, char *, char *, int *, double *, int *, - double *, int *); -int BLASFUNC(xtrmv) (char *, char *, char *, int *, double *, int *, - double *, int *); - -int BLASFUNC(stpmv) (char *, char *, char *, int *, float *, float *, int *); -int BLASFUNC(dtpmv) (char *, char *, char *, int *, double *, double *, int *); -int BLASFUNC(qtpmv) (char *, char *, char *, int *, double *, double *, int *); -int BLASFUNC(ctpmv) (char *, char *, char *, int *, float *, float *, int *); -int BLASFUNC(ztpmv) (char *, char *, char *, int *, double *, double *, int *); -int BLASFUNC(xtpmv) (char *, char *, char *, int *, double *, double *, int *); - -int BLASFUNC(stbmv) (char *, char *, char *, int *, int *, float *, int *, float *, int *); -int BLASFUNC(dtbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); -int BLASFUNC(qtbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); -int BLASFUNC(ctbmv) (char *, char *, char *, int *, int *, float *, int *, float *, int *); -int BLASFUNC(ztbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); -int BLASFUNC(xtbmv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); - -int BLASFUNC(stbsv) (char *, char *, char *, int *, int *, float *, int *, float *, int *); -int BLASFUNC(dtbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); -int BLASFUNC(qtbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); -int BLASFUNC(ctbsv) (char *, char *, char *, int *, int *, float *, int *, float *, int *); -int BLASFUNC(ztbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); -int BLASFUNC(xtbsv) (char *, char *, char *, int *, int *, double *, int *, double *, int *); - -int BLASFUNC(ssymv) (char *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(dsymv) (char *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(qsymv) (char *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(csymv) (char *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zsymv) (char *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xsymv) (char *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(sspmv) (char *, int *, float *, float *, - float *, int *, float *, float *, int *); -int BLASFUNC(dspmv) (char *, int *, double *, double *, - double *, int *, double *, double *, int *); -int BLASFUNC(qspmv) (char *, int *, double *, double *, - double *, int *, double *, double *, int *); -int BLASFUNC(cspmv) (char *, int *, float *, float *, - float *, int *, float *, float *, int *); -int BLASFUNC(zspmv) (char *, int *, double *, double *, - double *, int *, double *, double *, int *); -int BLASFUNC(xspmv) (char *, int *, double *, double *, - double *, int *, double *, double *, int *); - -int BLASFUNC(ssyr) (char *, int *, float *, float *, int *, - float *, int *); -int BLASFUNC(dsyr) (char *, int *, double *, double *, int *, - double *, int *); -int BLASFUNC(qsyr) (char *, int *, double *, double *, int *, - double *, int *); -int BLASFUNC(csyr) (char *, int *, float *, float *, int *, - float *, int *); -int BLASFUNC(zsyr) (char *, int *, double *, double *, int *, - double *, int *); -int BLASFUNC(xsyr) (char *, int *, double *, double *, int *, - double *, int *); - -int BLASFUNC(ssyr2) (char *, int *, float *, - float *, int *, float *, int *, float *, int *); -int BLASFUNC(dsyr2) (char *, int *, double *, - double *, int *, double *, int *, double *, int *); -int BLASFUNC(qsyr2) (char *, int *, double *, - double *, int *, double *, int *, double *, int *); -int BLASFUNC(csyr2) (char *, int *, float *, - float *, int *, float *, int *, float *, int *); -int BLASFUNC(zsyr2) (char *, int *, double *, - double *, int *, double *, int *, double *, int *); -int BLASFUNC(xsyr2) (char *, int *, double *, - double *, int *, double *, int *, double *, int *); - -int BLASFUNC(sspr) (char *, int *, float *, float *, int *, - float *); -int BLASFUNC(dspr) (char *, int *, double *, double *, int *, - double *); -int BLASFUNC(qspr) (char *, int *, double *, double *, int *, - double *); -int BLASFUNC(cspr) (char *, int *, float *, float *, int *, - float *); -int BLASFUNC(zspr) (char *, int *, double *, double *, int *, - double *); -int BLASFUNC(xspr) (char *, int *, double *, double *, int *, - double *); - -int BLASFUNC(sspr2) (char *, int *, float *, - float *, int *, float *, int *, float *); -int BLASFUNC(dspr2) (char *, int *, double *, - double *, int *, double *, int *, double *); -int BLASFUNC(qspr2) (char *, int *, double *, - double *, int *, double *, int *, double *); -int BLASFUNC(cspr2) (char *, int *, float *, - float *, int *, float *, int *, float *); -int BLASFUNC(zspr2) (char *, int *, double *, - double *, int *, double *, int *, double *); -int BLASFUNC(xspr2) (char *, int *, double *, - double *, int *, double *, int *, double *); - -int BLASFUNC(cher) (char *, int *, float *, float *, int *, - float *, int *); -int BLASFUNC(zher) (char *, int *, double *, double *, int *, - double *, int *); -int BLASFUNC(xher) (char *, int *, double *, double *, int *, - double *, int *); - -int BLASFUNC(chpr) (char *, int *, float *, float *, int *, float *); -int BLASFUNC(zhpr) (char *, int *, double *, double *, int *, double *); -int BLASFUNC(xhpr) (char *, int *, double *, double *, int *, double *); - -int BLASFUNC(cher2) (char *, int *, float *, - float *, int *, float *, int *, float *, int *); -int BLASFUNC(zher2) (char *, int *, double *, - double *, int *, double *, int *, double *, int *); -int BLASFUNC(xher2) (char *, int *, double *, - double *, int *, double *, int *, double *, int *); - -int BLASFUNC(chpr2) (char *, int *, float *, - float *, int *, float *, int *, float *); -int BLASFUNC(zhpr2) (char *, int *, double *, - double *, int *, double *, int *, double *); -int BLASFUNC(xhpr2) (char *, int *, double *, - double *, int *, double *, int *, double *); - -int BLASFUNC(chemv) (char *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zhemv) (char *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xhemv) (char *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(chpmv) (char *, int *, float *, float *, - float *, int *, float *, float *, int *); -int BLASFUNC(zhpmv) (char *, int *, double *, double *, - double *, int *, double *, double *, int *); -int BLASFUNC(xhpmv) (char *, int *, double *, double *, - double *, int *, double *, double *, int *); - -int BLASFUNC(snorm)(char *, int *, int *, float *, int *); -int BLASFUNC(dnorm)(char *, int *, int *, double *, int *); -int BLASFUNC(cnorm)(char *, int *, int *, float *, int *); -int BLASFUNC(znorm)(char *, int *, int *, double *, int *); - -int BLASFUNC(sgbmv)(char *, int *, int *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(dgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(qgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(cgbmv)(char *, int *, int *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(ssbmv)(char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(dsbmv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(qsbmv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(csbmv)(char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zsbmv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xsbmv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(chbmv)(char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zhbmv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xhbmv)(char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -/* Level 3 routines */ - -int BLASFUNC(sgemm)(char *, char *, int *, int *, int *, float *, - float *, int *, float *, int *, float *, float *, int *); -int BLASFUNC(dgemm)(char *, char *, int *, int *, int *, double *, - double *, int *, double *, int *, double *, double *, int *); -int BLASFUNC(qgemm)(char *, char *, int *, int *, int *, double *, - double *, int *, double *, int *, double *, double *, int *); -int BLASFUNC(cgemm)(char *, char *, int *, int *, int *, float *, - float *, int *, float *, int *, float *, float *, int *); -int BLASFUNC(zgemm)(char *, char *, int *, int *, int *, double *, - double *, int *, double *, int *, double *, double *, int *); -int BLASFUNC(xgemm)(char *, char *, int *, int *, int *, double *, - double *, int *, double *, int *, double *, double *, int *); - -int BLASFUNC(cgemm3m)(char *, char *, int *, int *, int *, float *, - float *, int *, float *, int *, float *, float *, int *); -int BLASFUNC(zgemm3m)(char *, char *, int *, int *, int *, double *, - double *, int *, double *, int *, double *, double *, int *); -int BLASFUNC(xgemm3m)(char *, char *, int *, int *, int *, double *, - double *, int *, double *, int *, double *, double *, int *); - -int BLASFUNC(sge2mm)(char *, char *, char *, int *, int *, - float *, float *, int *, float *, int *, - float *, float *, int *); -int BLASFUNC(dge2mm)(char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *, - double *, double *, int *); -int BLASFUNC(cge2mm)(char *, char *, char *, int *, int *, - float *, float *, int *, float *, int *, - float *, float *, int *); -int BLASFUNC(zge2mm)(char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *, - double *, double *, int *); - -int BLASFUNC(strsm)(char *, char *, char *, char *, int *, int *, - float *, float *, int *, float *, int *); -int BLASFUNC(dtrsm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); -int BLASFUNC(qtrsm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); -int BLASFUNC(ctrsm)(char *, char *, char *, char *, int *, int *, - float *, float *, int *, float *, int *); -int BLASFUNC(ztrsm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); -int BLASFUNC(xtrsm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); - -int BLASFUNC(strmm)(char *, char *, char *, char *, int *, int *, - float *, float *, int *, float *, int *); -int BLASFUNC(dtrmm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); -int BLASFUNC(qtrmm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); -int BLASFUNC(ctrmm)(char *, char *, char *, char *, int *, int *, - float *, float *, int *, float *, int *); -int BLASFUNC(ztrmm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); -int BLASFUNC(xtrmm)(char *, char *, char *, char *, int *, int *, - double *, double *, int *, double *, int *); - -int BLASFUNC(ssymm)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(dsymm)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(qsymm)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(csymm)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zsymm)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xsymm)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(csymm3m)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zsymm3m)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xsymm3m)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(ssyrk)(char *, char *, int *, int *, float *, float *, int *, - float *, float *, int *); -int BLASFUNC(dsyrk)(char *, char *, int *, int *, double *, double *, int *, - double *, double *, int *); -int BLASFUNC(qsyrk)(char *, char *, int *, int *, double *, double *, int *, - double *, double *, int *); -int BLASFUNC(csyrk)(char *, char *, int *, int *, float *, float *, int *, - float *, float *, int *); -int BLASFUNC(zsyrk)(char *, char *, int *, int *, double *, double *, int *, - double *, double *, int *); -int BLASFUNC(xsyrk)(char *, char *, int *, int *, double *, double *, int *, - double *, double *, int *); - -int BLASFUNC(ssyr2k)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(dsyr2k)(char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); -int BLASFUNC(qsyr2k)(char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); -int BLASFUNC(csyr2k)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zsyr2k)(char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); -int BLASFUNC(xsyr2k)(char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); - -int BLASFUNC(chemm)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zhemm)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xhemm)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(chemm3m)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zhemm3m)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); -int BLASFUNC(xhemm3m)(char *, char *, int *, int *, double *, double *, int *, - double *, int *, double *, double *, int *); - -int BLASFUNC(cherk)(char *, char *, int *, int *, float *, float *, int *, - float *, float *, int *); -int BLASFUNC(zherk)(char *, char *, int *, int *, double *, double *, int *, - double *, double *, int *); -int BLASFUNC(xherk)(char *, char *, int *, int *, double *, double *, int *, - double *, double *, int *); - -int BLASFUNC(cher2k)(char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zher2k)(char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); -int BLASFUNC(xher2k)(char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); -int BLASFUNC(cher2m)(char *, char *, char *, int *, int *, float *, float *, int *, - float *, int *, float *, float *, int *); -int BLASFUNC(zher2m)(char *, char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); -int BLASFUNC(xher2m)(char *, char *, char *, int *, int *, double *, double *, int *, - double*, int *, double *, double *, int *); - -int BLASFUNC(sgemt)(char *, int *, int *, float *, float *, int *, - float *, int *); -int BLASFUNC(dgemt)(char *, int *, int *, double *, double *, int *, - double *, int *); -int BLASFUNC(cgemt)(char *, int *, int *, float *, float *, int *, - float *, int *); -int BLASFUNC(zgemt)(char *, int *, int *, double *, double *, int *, - double *, int *); - -int BLASFUNC(sgema)(char *, char *, int *, int *, float *, - float *, int *, float *, float *, int *, float *, int *); -int BLASFUNC(dgema)(char *, char *, int *, int *, double *, - double *, int *, double*, double *, int *, double*, int *); -int BLASFUNC(cgema)(char *, char *, int *, int *, float *, - float *, int *, float *, float *, int *, float *, int *); -int BLASFUNC(zgema)(char *, char *, int *, int *, double *, - double *, int *, double*, double *, int *, double*, int *); - -int BLASFUNC(sgems)(char *, char *, int *, int *, float *, - float *, int *, float *, float *, int *, float *, int *); -int BLASFUNC(dgems)(char *, char *, int *, int *, double *, - double *, int *, double*, double *, int *, double*, int *); -int BLASFUNC(cgems)(char *, char *, int *, int *, float *, - float *, int *, float *, float *, int *, float *, int *); -int BLASFUNC(zgems)(char *, char *, int *, int *, double *, - double *, int *, double*, double *, int *, double*, int *); - -int BLASFUNC(sgetf2)(int *, int *, float *, int *, int *, int *); -int BLASFUNC(dgetf2)(int *, int *, double *, int *, int *, int *); -int BLASFUNC(qgetf2)(int *, int *, double *, int *, int *, int *); -int BLASFUNC(cgetf2)(int *, int *, float *, int *, int *, int *); -int BLASFUNC(zgetf2)(int *, int *, double *, int *, int *, int *); -int BLASFUNC(xgetf2)(int *, int *, double *, int *, int *, int *); - -int BLASFUNC(sgetrf)(int *, int *, float *, int *, int *, int *); -int BLASFUNC(dgetrf)(int *, int *, double *, int *, int *, int *); -int BLASFUNC(qgetrf)(int *, int *, double *, int *, int *, int *); -int BLASFUNC(cgetrf)(int *, int *, float *, int *, int *, int *); -int BLASFUNC(zgetrf)(int *, int *, double *, int *, int *, int *); -int BLASFUNC(xgetrf)(int *, int *, double *, int *, int *, int *); - -int BLASFUNC(slaswp)(int *, float *, int *, int *, int *, int *, int *); -int BLASFUNC(dlaswp)(int *, double *, int *, int *, int *, int *, int *); -int BLASFUNC(qlaswp)(int *, double *, int *, int *, int *, int *, int *); -int BLASFUNC(claswp)(int *, float *, int *, int *, int *, int *, int *); -int BLASFUNC(zlaswp)(int *, double *, int *, int *, int *, int *, int *); -int BLASFUNC(xlaswp)(int *, double *, int *, int *, int *, int *, int *); - -int BLASFUNC(sgetrs)(char *, int *, int *, float *, int *, int *, float *, int *, int *); -int BLASFUNC(dgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *); -int BLASFUNC(qgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *); -int BLASFUNC(cgetrs)(char *, int *, int *, float *, int *, int *, float *, int *, int *); -int BLASFUNC(zgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *); -int BLASFUNC(xgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *); - -int BLASFUNC(sgesv)(int *, int *, float *, int *, int *, float *, int *, int *); -int BLASFUNC(dgesv)(int *, int *, double *, int *, int *, double*, int *, int *); -int BLASFUNC(qgesv)(int *, int *, double *, int *, int *, double*, int *, int *); -int BLASFUNC(cgesv)(int *, int *, float *, int *, int *, float *, int *, int *); -int BLASFUNC(zgesv)(int *, int *, double *, int *, int *, double*, int *, int *); -int BLASFUNC(xgesv)(int *, int *, double *, int *, int *, double*, int *, int *); - -int BLASFUNC(spotf2)(char *, int *, float *, int *, int *); -int BLASFUNC(dpotf2)(char *, int *, double *, int *, int *); -int BLASFUNC(qpotf2)(char *, int *, double *, int *, int *); -int BLASFUNC(cpotf2)(char *, int *, float *, int *, int *); -int BLASFUNC(zpotf2)(char *, int *, double *, int *, int *); -int BLASFUNC(xpotf2)(char *, int *, double *, int *, int *); - -int BLASFUNC(spotrf)(char *, int *, float *, int *, int *); -int BLASFUNC(dpotrf)(char *, int *, double *, int *, int *); -int BLASFUNC(qpotrf)(char *, int *, double *, int *, int *); -int BLASFUNC(cpotrf)(char *, int *, float *, int *, int *); -int BLASFUNC(zpotrf)(char *, int *, double *, int *, int *); -int BLASFUNC(xpotrf)(char *, int *, double *, int *, int *); - -int BLASFUNC(slauu2)(char *, int *, float *, int *, int *); -int BLASFUNC(dlauu2)(char *, int *, double *, int *, int *); -int BLASFUNC(qlauu2)(char *, int *, double *, int *, int *); -int BLASFUNC(clauu2)(char *, int *, float *, int *, int *); -int BLASFUNC(zlauu2)(char *, int *, double *, int *, int *); -int BLASFUNC(xlauu2)(char *, int *, double *, int *, int *); - -int BLASFUNC(slauum)(char *, int *, float *, int *, int *); -int BLASFUNC(dlauum)(char *, int *, double *, int *, int *); -int BLASFUNC(qlauum)(char *, int *, double *, int *, int *); -int BLASFUNC(clauum)(char *, int *, float *, int *, int *); -int BLASFUNC(zlauum)(char *, int *, double *, int *, int *); -int BLASFUNC(xlauum)(char *, int *, double *, int *, int *); - -int BLASFUNC(strti2)(char *, char *, int *, float *, int *, int *); -int BLASFUNC(dtrti2)(char *, char *, int *, double *, int *, int *); -int BLASFUNC(qtrti2)(char *, char *, int *, double *, int *, int *); -int BLASFUNC(ctrti2)(char *, char *, int *, float *, int *, int *); -int BLASFUNC(ztrti2)(char *, char *, int *, double *, int *, int *); -int BLASFUNC(xtrti2)(char *, char *, int *, double *, int *, int *); - -int BLASFUNC(strtri)(char *, char *, int *, float *, int *, int *); -int BLASFUNC(dtrtri)(char *, char *, int *, double *, int *, int *); -int BLASFUNC(qtrtri)(char *, char *, int *, double *, int *, int *); -int BLASFUNC(ctrtri)(char *, char *, int *, float *, int *, int *); -int BLASFUNC(ztrtri)(char *, char *, int *, double *, int *, int *); -int BLASFUNC(xtrtri)(char *, char *, int *, double *, int *, int *); - -int BLASFUNC(spotri)(char *, int *, float *, int *, int *); -int BLASFUNC(dpotri)(char *, int *, double *, int *, int *); -int BLASFUNC(qpotri)(char *, int *, double *, int *, int *); -int BLASFUNC(cpotri)(char *, int *, float *, int *, int *); -int BLASFUNC(zpotri)(char *, int *, double *, int *, int *); -int BLASFUNC(xpotri)(char *, int *, double *, int *, int *); - -#endif diff --git a/eigen/bench/btl/libs/BLAS/blas_interface.hh b/eigen/bench/btl/libs/BLAS/blas_interface.hh deleted file mode 100644 index 6510546..0000000 --- a/eigen/bench/btl/libs/BLAS/blas_interface.hh +++ /dev/null @@ -1,83 +0,0 @@ -//===================================================== -// File : blas_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:28 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef blas_PRODUIT_MATRICE_VECTEUR_HH -#define blas_PRODUIT_MATRICE_VECTEUR_HH - -#include -#include -extern "C" -{ -#include "blas.h" - - // Cholesky Factorization -// void spotrf_(const char* uplo, const int* n, float *a, const int* ld, int* info); -// void dpotrf_(const char* uplo, const int* n, double *a, const int* ld, int* info); - void ssytrd_(char *uplo, const int *n, float *a, const int *lda, float *d, float *e, float *tau, float *work, int *lwork, int *info ); - void dsytrd_(char *uplo, const int *n, double *a, const int *lda, double *d, double *e, double *tau, double *work, int *lwork, int *info ); - void sgehrd_( const int *n, int *ilo, int *ihi, float *a, const int *lda, float *tau, float *work, int *lwork, int *info ); - void dgehrd_( const int *n, int *ilo, int *ihi, double *a, const int *lda, double *tau, double *work, int *lwork, int *info ); - - // LU row pivoting -// void dgetrf_( int *m, int *n, double *a, int *lda, int *ipiv, int *info ); -// void sgetrf_(const int* m, const int* n, float *a, const int* ld, int* ipivot, int* info); - // LU full pivoting - void sgetc2_(const int* n, float *a, const int *lda, int *ipiv, int *jpiv, int*info ); - void dgetc2_(const int* n, double *a, const int *lda, int *ipiv, int *jpiv, int*info ); -#ifdef HAS_LAPACK -#endif -} - -#define MAKE_STRING2(S) #S -#define MAKE_STRING(S) MAKE_STRING2(S) - -#define CAT2(A,B) A##B -#define CAT(A,B) CAT2(A,B) - - -template class blas_interface; - - -static char notrans = 'N'; -static char trans = 'T'; -static char nonunit = 'N'; -static char lower = 'L'; -static char right = 'R'; -static char left = 'L'; -static int intone = 1; - - - -#define SCALAR float -#define SCALAR_PREFIX s -#include "blas_interface_impl.hh" -#undef SCALAR -#undef SCALAR_PREFIX - - -#define SCALAR double -#define SCALAR_PREFIX d -#include "blas_interface_impl.hh" -#undef SCALAR -#undef SCALAR_PREFIX - -#endif - - - diff --git a/eigen/bench/btl/libs/BLAS/blas_interface_impl.hh b/eigen/bench/btl/libs/BLAS/blas_interface_impl.hh deleted file mode 100644 index fc4ba2a..0000000 --- a/eigen/bench/btl/libs/BLAS/blas_interface_impl.hh +++ /dev/null @@ -1,147 +0,0 @@ - -#define BLAS_FUNC(NAME) CAT(CAT(SCALAR_PREFIX,NAME),_) - -template<> class blas_interface : public c_interface_base -{ - -public : - - static SCALAR fone; - static SCALAR fzero; - - static inline std::string name() - { - return MAKE_STRING(CBLASNAME); - } - - static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ - BLAS_FUNC(gemv)(¬rans,&N,&N,&fone,A,&N,B,&intone,&fzero,X,&intone); - } - - static inline void symv(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ - BLAS_FUNC(symv)(&lower, &N,&fone,A,&N,B,&intone,&fzero,X,&intone); - } - - static inline void syr2(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ - BLAS_FUNC(syr2)(&lower,&N,&fone,B,&intone,X,&intone,A,&N); - } - - static inline void ger(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){ - BLAS_FUNC(ger)(&N,&N,&fone,X,&intone,Y,&intone,A,&N); - } - - static inline void rot(gene_vector & A, gene_vector & B, SCALAR c, SCALAR s, int N){ - BLAS_FUNC(rot)(&N,A,&intone,B,&intone,&c,&s); - } - - static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ - BLAS_FUNC(gemv)(&trans,&N,&N,&fone,A,&N,B,&intone,&fzero,X,&intone); - } - - static inline void matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){ - BLAS_FUNC(gemm)(¬rans,¬rans,&N,&N,&N,&fone,A,&N,B,&N,&fzero,X,&N); - } - - static inline void transposed_matrix_matrix_product(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){ - BLAS_FUNC(gemm)(¬rans,¬rans,&N,&N,&N,&fone,A,&N,B,&N,&fzero,X,&N); - } - -// static inline void ata_product(gene_matrix & A, gene_matrix & X, int N){ -// ssyrk_(&lower,&trans,&N,&N,&fone,A,&N,&fzero,X,&N); -// } - - static inline void aat_product(gene_matrix & A, gene_matrix & X, int N){ - BLAS_FUNC(syrk)(&lower,¬rans,&N,&N,&fone,A,&N,&fzero,X,&N); - } - - static inline void axpy(SCALAR coef, const gene_vector & X, gene_vector & Y, int N){ - BLAS_FUNC(axpy)(&N,&coef,X,&intone,Y,&intone); - } - - static inline void axpby(SCALAR a, const gene_vector & X, SCALAR b, gene_vector & Y, int N){ - BLAS_FUNC(scal)(&N,&b,Y,&intone); - BLAS_FUNC(axpy)(&N,&a,X,&intone,Y,&intone); - } - - static inline void cholesky(const gene_matrix & X, gene_matrix & C, int N){ - int N2 = N*N; - BLAS_FUNC(copy)(&N2, X, &intone, C, &intone); - char uplo = 'L'; - int info = 0; - BLAS_FUNC(potrf)(&uplo, &N, C, &N, &info); - if(info!=0) std::cerr << "potrf_ error " << info << "\n"; - } - - static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ - int N2 = N*N; - BLAS_FUNC(copy)(&N2, X, &intone, C, &intone); - int info = 0; - int * ipiv = (int*)alloca(sizeof(int)*N); - BLAS_FUNC(getrf)(&N, &N, C, &N, ipiv, &info); - if(info!=0) std::cerr << "getrf_ error " << info << "\n"; - } - - static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector & X, int N){ - BLAS_FUNC(copy)(&N, B, &intone, X, &intone); - BLAS_FUNC(trsv)(&lower, ¬rans, &nonunit, &N, L, &N, X, &intone); - } - - static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix & X, int N){ - BLAS_FUNC(copy)(&N, B, &intone, X, &intone); - BLAS_FUNC(trsm)(&right, &lower, ¬rans, &nonunit, &N, &N, &fone, L, &N, X, &N); - } - - static inline void trmm(gene_matrix & A, gene_matrix & B, gene_matrix & /*X*/, int N){ - BLAS_FUNC(trmm)(&left, &lower, ¬rans,&nonunit, &N,&N,&fone,A,&N,B,&N); - } - - #ifdef HAS_LAPACK - - static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ - int N2 = N*N; - BLAS_FUNC(copy)(&N2, X, &intone, C, &intone); - int info = 0; - int * ipiv = (int*)alloca(sizeof(int)*N); - int * jpiv = (int*)alloca(sizeof(int)*N); - BLAS_FUNC(getc2)(&N, C, &N, ipiv, jpiv, &info); - } - - - - static inline void hessenberg(const gene_matrix & X, gene_matrix & C, int N){ - { - int N2 = N*N; - int inc = 1; - BLAS_FUNC(copy)(&N2, X, &inc, C, &inc); - } - int info = 0; - int ilo = 1; - int ihi = N; - int bsize = 64; - int worksize = N*bsize; - SCALAR* d = new SCALAR[N+worksize]; - BLAS_FUNC(gehrd)(&N, &ilo, &ihi, C, &N, d, d+N, &worksize, &info); - delete[] d; - } - - static inline void tridiagonalization(const gene_matrix & X, gene_matrix & C, int N){ - { - int N2 = N*N; - int inc = 1; - BLAS_FUNC(copy)(&N2, X, &inc, C, &inc); - } - char uplo = 'U'; - int info = 0; - int bsize = 64; - int worksize = N*bsize; - SCALAR* d = new SCALAR[3*N+worksize]; - BLAS_FUNC(sytrd)(&uplo, &N, C, &N, d, d+N, d+2*N, d+3*N, &worksize, &info); - delete[] d; - } - - #endif // HAS_LAPACK - -}; - -SCALAR blas_interface::fone = SCALAR(1); -SCALAR blas_interface::fzero = SCALAR(0); diff --git a/eigen/bench/btl/libs/BLAS/c_interface_base.h b/eigen/bench/btl/libs/BLAS/c_interface_base.h deleted file mode 100644 index de61380..0000000 --- a/eigen/bench/btl/libs/BLAS/c_interface_base.h +++ /dev/null @@ -1,73 +0,0 @@ - -#ifndef BTL_C_INTERFACE_BASE_H -#define BTL_C_INTERFACE_BASE_H - -#include "utilities.h" -#include - -template class c_interface_base -{ - -public: - - typedef real real_type; - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef real* gene_matrix; - typedef real* gene_vector; - - static void free_matrix(gene_matrix & A, int /*N*/){ - delete[] A; - } - - static void free_vector(gene_vector & B){ - delete[] B; - } - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - int N = A_stl.size(); - A = new real[N*N]; - for (int j=0;j -// Copyright (C) EDF R&D, lun sep 30 14:23:28 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "blas_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -#include "action_cholesky.hh" -#include "action_lu_decomp.hh" -#include "action_partial_lu.hh" -#include "action_trisolve_matrix.hh" - -#ifdef HAS_LAPACK -#include "action_hessenberg.hh" -#endif - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_LU,MAX_LU,NB_POINT); - bench > >(MIN_LU,MAX_LU,NB_POINT); - - #ifdef HAS_LAPACK -// bench > >(MIN_LU,MAX_LU,NB_POINT); - bench > >(MIN_LU,MAX_LU,NB_POINT); - bench > >(MIN_LU,MAX_LU,NB_POINT); - #endif - - //bench > >(MIN_LU,MAX_LU,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/STL/CMakeLists.txt b/eigen/bench/btl/libs/STL/CMakeLists.txt deleted file mode 100644 index 4cfc2dc..0000000 --- a/eigen/bench/btl/libs/STL/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ - -btl_add_bench(btl_STL main.cpp OFF) diff --git a/eigen/bench/btl/libs/STL/STL_interface.hh b/eigen/bench/btl/libs/STL/STL_interface.hh deleted file mode 100644 index ef4cc92..0000000 --- a/eigen/bench/btl/libs/STL/STL_interface.hh +++ /dev/null @@ -1,244 +0,0 @@ -//===================================================== -// File : STL_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:24 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef STL_INTERFACE_HH -#define STL_INTERFACE_HH -#include -#include -#include "utilities.h" - -using namespace std; - -template -class STL_interface{ - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef stl_matrix gene_matrix; - - typedef stl_vector gene_vector; - - static inline std::string name( void ) - { - return "STL"; - } - - static void free_matrix(gene_matrix & /*A*/, int /*N*/){} - - static void free_vector(gene_vector & /*B*/){} - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A = A_stl; - } - - static inline void vector_from_stl(gene_vector & B, stl_vector & B_stl){ - B = B_stl; - } - - static inline void vector_to_stl(gene_vector & B, stl_vector & B_stl){ - B_stl = B ; - } - - - static inline void matrix_to_stl(gene_matrix & A, stl_matrix & A_stl){ - A_stl = A ; - } - - static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N){ - for (int i=0;i=j) - { - for (int k=0;k > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/blaze/CMakeLists.txt b/eigen/bench/btl/libs/blaze/CMakeLists.txt deleted file mode 100644 index e99a085..0000000 --- a/eigen/bench/btl/libs/blaze/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ - -find_package(BLAZE) -find_package(Boost COMPONENTS system) -if (BLAZE_FOUND AND Boost_FOUND) - include_directories(${BLAZE_INCLUDE_DIR} ${Boost_INCLUDE_DIRS}) - btl_add_bench(btl_blaze main.cpp) - # Note: The newest blaze version requires C++14. - # Ideally, we should set this depending on the version of Blaze we found - set_property(TARGET btl_blaze PROPERTY CXX_STANDARD 14) - if(BUILD_btl_blaze) - target_link_libraries(btl_blaze ${Boost_LIBRARIES}) - endif() -endif () diff --git a/eigen/bench/btl/libs/blaze/blaze_interface.hh b/eigen/bench/btl/libs/blaze/blaze_interface.hh deleted file mode 100644 index ee15239..0000000 --- a/eigen/bench/btl/libs/blaze/blaze_interface.hh +++ /dev/null @@ -1,140 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BLAZE_INTERFACE_HH -#define BLAZE_INTERFACE_HH - -#include -#include -// using namespace blaze; - -#include - -template -class blaze_interface { - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef blaze::DynamicMatrix gene_matrix; - typedef blaze::DynamicVector gene_vector; - - static inline std::string name() { return "blaze"; } - - static void free_matrix(gene_matrix & A, int N){ - return ; - } - - static void free_vector(gene_vector & B){ - return ; - } - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(A_stl[0].size(), A_stl.size()); - - for (int j=0; j ipvt(N); -// lu_factor(R, ipvt); -// } - -// static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector & X, int N){ -// X = lower_trisolve(L, B); -// } - - static inline void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){ - cible = source; - } - - static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N){ - cible = source; - } - -}; - -#endif diff --git a/eigen/bench/btl/libs/blaze/main.cpp b/eigen/bench/btl/libs/blaze/main.cpp deleted file mode 100644 index 80e8f4e..0000000 --- a/eigen/bench/btl/libs/blaze/main.cpp +++ /dev/null @@ -1,40 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "blaze_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/blitz/CMakeLists.txt b/eigen/bench/btl/libs/blitz/CMakeLists.txt deleted file mode 100644 index 880ab73..0000000 --- a/eigen/bench/btl/libs/blitz/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ - -find_package(Blitz) - -if (BLITZ_FOUND) - include_directories(${BLITZ_INCLUDES}) - - btl_add_bench(btl_blitz btl_blitz.cpp) - if (BUILD_btl_blitz) - target_link_libraries(btl_blitz ${BLITZ_LIBRARIES}) - endif (BUILD_btl_blitz) - - btl_add_bench(btl_tiny_blitz btl_tiny_blitz.cpp OFF) - if (BUILD_btl_tiny_blitz) - target_link_libraries(btl_tiny_blitz ${BLITZ_LIBRARIES}) - endif (BUILD_btl_tiny_blitz) - -endif (BLITZ_FOUND) diff --git a/eigen/bench/btl/libs/blitz/blitz_LU_solve_interface.hh b/eigen/bench/btl/libs/blitz/blitz_LU_solve_interface.hh deleted file mode 100644 index dcb9f56..0000000 --- a/eigen/bench/btl/libs/blitz/blitz_LU_solve_interface.hh +++ /dev/null @@ -1,192 +0,0 @@ -//===================================================== -// File : blitz_LU_solve_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:31 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BLITZ_LU_SOLVE_INTERFACE_HH -#define BLITZ_LU_SOLVE_INTERFACE_HH - -#include "blitz/array.h" -#include - -BZ_USING_NAMESPACE(blitz) - -template -class blitz_LU_solve_interface : public blitz_interface -{ - -public : - - typedef typename blitz_interface::gene_matrix gene_matrix; - typedef typename blitz_interface::gene_vector gene_vector; - - typedef blitz::Array Pivot_Vector; - - inline static void new_Pivot_Vector(Pivot_Vector & pivot,int N) - { - - pivot.resize(N); - - } - - inline static void free_Pivot_Vector(Pivot_Vector & pivot) - { - - return; - - } - - - static inline real matrix_vector_product_sliced(const gene_matrix & A, gene_vector B, int row, int col_start, int col_end) - { - - real somme=0.; - - for (int j=col_start ; j=big ) big = abs( LU( i, j ) ) ; - } - if( big==0. ) { - INFOS( "blitz_LU_factor::Singular matrix" ) ; - exit( 0 ) ; - } - ImplicitScaling( i ) = 1./big ; - } - // Loop over columns of Crout's method : - for( int j=0; j=big ) { - dum = ImplicitScaling( i )*abs( theSum ) ; - big = dum ; - index_max = i ; - } - } - // Interchanging rows and the scale factor : - if( j!=index_max ) { - for( int k=0; k=0; i-- ) { - theSum = X( i ) ; - // theSum = B( i ) ; - theSum -= matrix_vector_product_sliced(LU, X, i, i+1, N) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*X( Range( i+1, toEnd ) ) ) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*B( Range( i+1, toEnd ) ) ) ; - // Store a component of the solution vector : - X( i ) = theSum/LU( i, i ) ; - // B( i ) = theSum/LU( i, i ) ; - } - - } - -}; - -#endif diff --git a/eigen/bench/btl/libs/blitz/blitz_interface.hh b/eigen/bench/btl/libs/blitz/blitz_interface.hh deleted file mode 100644 index a67c47c..0000000 --- a/eigen/bench/btl/libs/blitz/blitz_interface.hh +++ /dev/null @@ -1,147 +0,0 @@ -//===================================================== -// File : blitz_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BLITZ_INTERFACE_HH -#define BLITZ_INTERFACE_HH - -#include -#include -#include -#include -#include -#include - -BZ_USING_NAMESPACE(blitz) - -template -class blitz_interface{ - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef blitz::Array gene_matrix; - typedef blitz::Array gene_vector; -// typedef blitz::Matrix gene_matrix; -// typedef blitz::Vector gene_vector; - - static inline std::string name() { return "blitz"; } - - static void free_matrix(gene_matrix & A, int N){} - - static void free_vector(gene_vector & B){} - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(A_stl[0].size(),A_stl.size()); - for (int j=0; j(source); -// for (int i=0;i(source); - cible = source; - } - -}; - -#endif diff --git a/eigen/bench/btl/libs/blitz/btl_blitz.cpp b/eigen/bench/btl/libs/blitz/btl_blitz.cpp deleted file mode 100644 index 16d2b59..0000000 --- a/eigen/bench/btl/libs/blitz/btl_blitz.cpp +++ /dev/null @@ -1,51 +0,0 @@ -//===================================================== -// File : main.cpp -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "blitz_interface.hh" -#include "blitz_LU_solve_interface.hh" -#include "bench.hh" -#include "action_matrix_vector_product.hh" -#include "action_matrix_matrix_product.hh" -#include "action_axpy.hh" -#include "action_lu_solve.hh" -#include "action_ata_product.hh" -#include "action_aat_product.hh" -#include "action_atv_product.hh" - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - //bench > >(MIN_LU,MAX_LU,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/blitz/btl_tiny_blitz.cpp b/eigen/bench/btl/libs/blitz/btl_tiny_blitz.cpp deleted file mode 100644 index 9fddde7..0000000 --- a/eigen/bench/btl/libs/blitz/btl_tiny_blitz.cpp +++ /dev/null @@ -1,38 +0,0 @@ -//===================================================== -// File : main.cpp -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "tiny_blitz_interface.hh" -#include "static/bench_static.hh" -#include "action_matrix_vector_product.hh" -#include "action_matrix_matrix_product.hh" -#include "action_axpy.hh" - -BTL_MAIN; - -int main() -{ - bench_static(); - bench_static(); - bench_static(); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/blitz/tiny_blitz_interface.hh b/eigen/bench/btl/libs/blitz/tiny_blitz_interface.hh deleted file mode 100644 index 6b26db7..0000000 --- a/eigen/bench/btl/libs/blitz/tiny_blitz_interface.hh +++ /dev/null @@ -1,106 +0,0 @@ -//===================================================== -// File : tiny_blitz_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef TINY_BLITZ_INTERFACE_HH -#define TINY_BLITZ_INTERFACE_HH - -#include "blitz/array.h" -#include "blitz/tiny.h" -#include "blitz/tinymat.h" -#include "blitz/tinyvec.h" -#include - -#include - -BZ_USING_NAMESPACE(blitz) - -template -class tiny_blitz_interface -{ - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef TinyVector gene_vector; - typedef TinyMatrix gene_matrix; - - static inline std::string name() { return "tiny_blitz"; } - - static void free_matrix(gene_matrix & A, int N){} - - static void free_vector(gene_vector & B){} - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - for (int j=0; j -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen3_interface.hh" -#include "static/bench_static.hh" -#include "action_matrix_vector_product.hh" -#include "action_matrix_matrix_product.hh" -#include "action_axpy.hh" -#include "action_lu_solve.hh" -#include "action_ata_product.hh" -#include "action_aat_product.hh" -#include "action_atv_product.hh" -#include "action_cholesky.hh" -#include "action_trisolve.hh" - -BTL_MAIN; - -int main() -{ - - bench_static(); - bench_static(); - bench_static(); - bench_static(); - bench_static(); - bench_static(); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen2/eigen2_interface.hh b/eigen/bench/btl/libs/eigen2/eigen2_interface.hh deleted file mode 100644 index 1deabda..0000000 --- a/eigen/bench/btl/libs/eigen2/eigen2_interface.hh +++ /dev/null @@ -1,168 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef EIGEN2_INTERFACE_HH -#define EIGEN2_INTERFACE_HH -// #include -#include -#include -#include -#include -#include -#include "btl.hh" - -using namespace Eigen; - -template -class eigen2_interface -{ - -public : - - enum {IsFixedSize = (SIZE!=Dynamic)}; - - typedef real real_type; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef Eigen::Matrix gene_matrix; - typedef Eigen::Matrix gene_vector; - - static inline std::string name( void ) - { - #if defined(EIGEN_VECTORIZE_SSE) - if (SIZE==Dynamic) return "eigen2"; else return "tiny_eigen2"; - #elif defined(EIGEN_VECTORIZE_ALTIVEC) || defined(EIGEN_VECTORIZE_VSX) - if (SIZE==Dynamic) return "eigen2"; else return "tiny_eigen2"; - #else - if (SIZE==Dynamic) return "eigen2_novec"; else return "tiny_eigen2_novec"; - #endif - } - - static void free_matrix(gene_matrix & A, int N) {} - - static void free_vector(gene_vector & B) {} - - static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(A_stl[0].size(), A_stl.size()); - - for (int j=0; j().solveTriangular(B); - } - - static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int N){ - X = L.template marked().solveTriangular(B); - } - - static inline void cholesky(const gene_matrix & X, gene_matrix & C, int N){ - C = X.llt().matrixL(); -// C = X; -// Cholesky::computeInPlace(C); -// Cholesky::computeInPlaceBlock(C); - } - - static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ - C = X.lu().matrixLU(); -// C = X.inverse(); - } - - static inline void tridiagonalization(const gene_matrix & X, gene_matrix & C, int N){ - C = Tridiagonalization(X).packedMatrix(); - } - - static inline void hessenberg(const gene_matrix & X, gene_matrix & C, int N){ - C = HessenbergDecomposition(X).packedMatrix(); - } - - - -}; - -#endif diff --git a/eigen/bench/btl/libs/eigen2/main_adv.cpp b/eigen/bench/btl/libs/eigen2/main_adv.cpp deleted file mode 100644 index fe33689..0000000 --- a/eigen/bench/btl/libs/eigen2/main_adv.cpp +++ /dev/null @@ -1,44 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "action_trisolve.hh" -#include "action_trisolve_matrix.hh" -#include "action_cholesky.hh" -#include "action_hessenberg.hh" -#include "action_lu_decomp.hh" -// #include "action_partial_lu.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen2/main_linear.cpp b/eigen/bench/btl/libs/eigen2/main_linear.cpp deleted file mode 100644 index c17d16c..0000000 --- a/eigen/bench/btl/libs/eigen2/main_linear.cpp +++ /dev/null @@ -1,34 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen2/main_matmat.cpp b/eigen/bench/btl/libs/eigen2/main_matmat.cpp deleted file mode 100644 index cd9dc9c..0000000 --- a/eigen/bench/btl/libs/eigen2/main_matmat.cpp +++ /dev/null @@ -1,35 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen2/main_vecmat.cpp b/eigen/bench/btl/libs/eigen2/main_vecmat.cpp deleted file mode 100644 index 8b66cd2..0000000 --- a/eigen/bench/btl/libs/eigen2/main_vecmat.cpp +++ /dev/null @@ -1,36 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen2_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); -// bench > >(MIN_MV,MAX_MV,NB_POINT); -// bench > >(MIN_MV,MAX_MV,NB_POINT); -// bench > >(MIN_MV,MAX_MV,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen3/CMakeLists.txt b/eigen/bench/btl/libs/eigen3/CMakeLists.txt deleted file mode 100644 index 00cae23..0000000 --- a/eigen/bench/btl/libs/eigen3/CMakeLists.txt +++ /dev/null @@ -1,65 +0,0 @@ - - -if((NOT EIGEN3_INCLUDE_DIR) AND Eigen_SOURCE_DIR) - # unless EIGEN3_INCLUDE_DIR is defined, let's use current Eigen version - set(EIGEN3_INCLUDE_DIR ${Eigen_SOURCE_DIR}) - set(EIGEN3_FOUND TRUE) -else() - find_package(Eigen3) -endif() - -if (EIGEN3_FOUND) - - include_directories(${EIGEN3_INCLUDE_DIR}) - btl_add_bench(btl_eigen3_linear main_linear.cpp) - btl_add_bench(btl_eigen3_vecmat main_vecmat.cpp) - btl_add_bench(btl_eigen3_matmat main_matmat.cpp) - btl_add_bench(btl_eigen3_adv main_adv.cpp ) - - btl_add_target_property(btl_eigen3_linear COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - btl_add_target_property(btl_eigen3_vecmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - btl_add_target_property(btl_eigen3_matmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - btl_add_target_property(btl_eigen3_adv COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=eigen3") - - option(BTL_BENCH_NOGCCVEC "also bench Eigen explicit vec without GCC's auto vec" OFF) - if(CMAKE_COMPILER_IS_GNUCXX AND BTL_BENCH_NOGCCVEC) - btl_add_bench(btl_eigen3_nogccvec_linear main_linear.cpp) - btl_add_bench(btl_eigen3_nogccvec_vecmat main_vecmat.cpp) - btl_add_bench(btl_eigen3_nogccvec_matmat main_matmat.cpp) - btl_add_bench(btl_eigen3_nogccvec_adv main_adv.cpp ) - - btl_add_target_property(btl_eigen3_nogccvec_linear COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - btl_add_target_property(btl_eigen3_nogccvec_vecmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - btl_add_target_property(btl_eigen3_nogccvec_matmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - btl_add_target_property(btl_eigen3_nogccvec_adv COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=eigen3_nogccvec") - endif() - - - if(NOT BTL_NOVEC) - btl_add_bench(btl_eigen3_novec_linear main_linear.cpp OFF) - btl_add_bench(btl_eigen3_novec_vecmat main_vecmat.cpp OFF) - btl_add_bench(btl_eigen3_novec_matmat main_matmat.cpp OFF) - btl_add_bench(btl_eigen3_novec_adv main_adv.cpp OFF) - btl_add_target_property(btl_eigen3_novec_linear COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - btl_add_target_property(btl_eigen3_novec_vecmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - btl_add_target_property(btl_eigen3_novec_matmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - btl_add_target_property(btl_eigen3_novec_adv COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_novec") - -# if(BUILD_btl_eigen3_adv) -# target_link_libraries(btl_eigen3_adv ${MKL_LIBRARIES}) -# endif(BUILD_btl_eigen3_adv) - - endif(NOT BTL_NOVEC) - - btl_add_bench(btl_tiny_eigen3 btl_tiny_eigen3.cpp OFF) - - if(NOT BTL_NOVEC) - btl_add_bench(btl_tiny_eigen3_novec btl_tiny_eigen3.cpp OFF) - btl_add_target_property(btl_tiny_eigen3_novec COMPILE_FLAGS "-DBTL_PREFIX=eigen3_tiny") - - if(BUILD_btl_tiny_eigen3_novec) - btl_add_target_property(btl_tiny_eigen3_novec COMPILE_FLAGS "-DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=eigen3_tiny_novec") - endif(BUILD_btl_tiny_eigen3_novec) - endif(NOT BTL_NOVEC) - -endif (EIGEN3_FOUND) diff --git a/eigen/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp b/eigen/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp deleted file mode 100644 index d1515be..0000000 --- a/eigen/bench/btl/libs/eigen3/btl_tiny_eigen3.cpp +++ /dev/null @@ -1,46 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen3_interface.hh" -#include "static/bench_static.hh" -#include "action_matrix_vector_product.hh" -#include "action_matrix_matrix_product.hh" -#include "action_axpy.hh" -#include "action_lu_solve.hh" -#include "action_ata_product.hh" -#include "action_aat_product.hh" -#include "action_atv_product.hh" -#include "action_cholesky.hh" -#include "action_trisolve.hh" - -BTL_MAIN; - -int main() -{ - - bench_static(); - bench_static(); - bench_static(); - bench_static(); - bench_static(); - bench_static(); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen3/eigen3_interface.hh b/eigen/bench/btl/libs/eigen3/eigen3_interface.hh deleted file mode 100644 index b821fd7..0000000 --- a/eigen/bench/btl/libs/eigen3/eigen3_interface.hh +++ /dev/null @@ -1,240 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef EIGEN3_INTERFACE_HH -#define EIGEN3_INTERFACE_HH - -#include -#include -#include "btl.hh" - -using namespace Eigen; - -template -class eigen3_interface -{ - -public : - - enum {IsFixedSize = (SIZE!=Dynamic)}; - - typedef real real_type; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef Eigen::Matrix gene_matrix; - typedef Eigen::Matrix gene_vector; - - static inline std::string name( void ) - { - return EIGEN_MAKESTRING(BTL_PREFIX); - } - - static void free_matrix(gene_matrix & /*A*/, int /*N*/) {} - - static void free_vector(gene_vector & /*B*/) {} - - static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(A_stl[0].size(), A_stl.size()); - - for (unsigned int j=0; j().setZero(); - X.template selfadjointView().rankUpdate(A); - } - - static inline void matrix_vector_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int /*N*/){ - X.noalias() = A*B; - } - - static inline void symv(const gene_matrix & A, const gene_vector & B, gene_vector & X, int /*N*/){ - X.noalias() = (A.template selfadjointView() * B); -// internal::product_selfadjoint_vector(N,A.data(),N, B.data(), 1, X.data(), 1); - } - - template static void triassign(Dest& dst, const Src& src) - { - typedef typename Dest::Scalar Scalar; - typedef typename internal::packet_traits::type Packet; - const int PacketSize = sizeof(Packet)/sizeof(Scalar); - int size = dst.cols(); - for(int j=0; j(j, index, src); - else - dst.template copyPacket(index, j, src); - } - - // do the non-vectorizable part of the assignment - for (int index = alignedEnd; index(N,A.data(),N, X.data(), 1, Y.data(), 1, -1); - for(int j=0; j(c,s)); - } - - static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int /*N*/){ - X.noalias() = (A.transpose()*B); - } - - static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int /*N*/){ - Y += coef * X; - } - - static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int /*N*/){ - Y = a*X + b*Y; - } - - static EIGEN_DONT_INLINE void copy_matrix(const gene_matrix & source, gene_matrix & cible, int /*N*/){ - cible = source; - } - - static EIGEN_DONT_INLINE void copy_vector(const gene_vector & source, gene_vector & cible, int /*N*/){ - cible = source; - } - - static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector& X, int /*N*/){ - X = L.template triangularView().solve(B); - } - - static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int /*N*/){ - X = L.template triangularView().solve(B); - } - - static inline void trmm(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int /*N*/){ - X.noalias() = L.template triangularView() * B; - } - - static inline void cholesky(const gene_matrix & X, gene_matrix & C, int /*N*/){ - C = X; - internal::llt_inplace::blocked(C); - //C = X.llt().matrixL(); -// C = X; -// Cholesky::computeInPlace(C); -// Cholesky::computeInPlaceBlock(C); - } - - static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int /*N*/){ - C = X.fullPivLu().matrixLU(); - } - - static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){ - Matrix piv(N); - DenseIndex nb; - C = X; - internal::partial_lu_inplace(C,piv,nb); -// C = X.partialPivLu().matrixLU(); - } - - static inline void tridiagonalization(const gene_matrix & X, gene_matrix & C, int N){ - typename Tridiagonalization::CoeffVectorType aux(N-1); - C = X; - internal::tridiagonalization_inplace(C, aux); - } - - static inline void hessenberg(const gene_matrix & X, gene_matrix & C, int /*N*/){ - C = HessenbergDecomposition(X).packedMatrix(); - } - - - -}; - -#endif diff --git a/eigen/bench/btl/libs/eigen3/main_adv.cpp b/eigen/bench/btl/libs/eigen3/main_adv.cpp deleted file mode 100644 index 9586535..0000000 --- a/eigen/bench/btl/libs/eigen3/main_adv.cpp +++ /dev/null @@ -1,44 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen3_interface.hh" -#include "bench.hh" -#include "action_trisolve.hh" -#include "action_trisolve_matrix.hh" -#include "action_cholesky.hh" -#include "action_hessenberg.hh" -#include "action_lu_decomp.hh" -#include "action_partial_lu.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_LU,MAX_LU,NB_POINT); - bench > >(MIN_LU,MAX_LU,NB_POINT); - bench > >(MIN_LU,MAX_LU,NB_POINT); -// bench > >(MIN_LU,MAX_LU,NB_POINT); - bench > >(MIN_LU,MAX_LU,NB_POINT); - -// bench > >(MIN_LU,MAX_LU,NB_POINT); - bench > >(MIN_LU,MAX_LU,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen3/main_linear.cpp b/eigen/bench/btl/libs/eigen3/main_linear.cpp deleted file mode 100644 index e8538b7..0000000 --- a/eigen/bench/btl/libs/eigen3/main_linear.cpp +++ /dev/null @@ -1,35 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen3_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen3/main_matmat.cpp b/eigen/bench/btl/libs/eigen3/main_matmat.cpp deleted file mode 100644 index 926fa2b..0000000 --- a/eigen/bench/btl/libs/eigen3/main_matmat.cpp +++ /dev/null @@ -1,35 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen3_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/eigen3/main_vecmat.cpp b/eigen/bench/btl/libs/eigen3/main_vecmat.cpp deleted file mode 100644 index 0dda444..0000000 --- a/eigen/bench/btl/libs/eigen3/main_vecmat.cpp +++ /dev/null @@ -1,36 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "eigen3_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/gmm/CMakeLists.txt b/eigen/bench/btl/libs/gmm/CMakeLists.txt deleted file mode 100644 index bc25862..0000000 --- a/eigen/bench/btl/libs/gmm/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ - -find_package(GMM) -if (GMM_FOUND) - include_directories(${GMM_INCLUDES}) - btl_add_bench(btl_gmm main.cpp) -endif (GMM_FOUND) diff --git a/eigen/bench/btl/libs/gmm/gmm_LU_solve_interface.hh b/eigen/bench/btl/libs/gmm/gmm_LU_solve_interface.hh deleted file mode 100644 index dcb9f56..0000000 --- a/eigen/bench/btl/libs/gmm/gmm_LU_solve_interface.hh +++ /dev/null @@ -1,192 +0,0 @@ -//===================================================== -// File : blitz_LU_solve_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:31 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BLITZ_LU_SOLVE_INTERFACE_HH -#define BLITZ_LU_SOLVE_INTERFACE_HH - -#include "blitz/array.h" -#include - -BZ_USING_NAMESPACE(blitz) - -template -class blitz_LU_solve_interface : public blitz_interface -{ - -public : - - typedef typename blitz_interface::gene_matrix gene_matrix; - typedef typename blitz_interface::gene_vector gene_vector; - - typedef blitz::Array Pivot_Vector; - - inline static void new_Pivot_Vector(Pivot_Vector & pivot,int N) - { - - pivot.resize(N); - - } - - inline static void free_Pivot_Vector(Pivot_Vector & pivot) - { - - return; - - } - - - static inline real matrix_vector_product_sliced(const gene_matrix & A, gene_vector B, int row, int col_start, int col_end) - { - - real somme=0.; - - for (int j=col_start ; j=big ) big = abs( LU( i, j ) ) ; - } - if( big==0. ) { - INFOS( "blitz_LU_factor::Singular matrix" ) ; - exit( 0 ) ; - } - ImplicitScaling( i ) = 1./big ; - } - // Loop over columns of Crout's method : - for( int j=0; j=big ) { - dum = ImplicitScaling( i )*abs( theSum ) ; - big = dum ; - index_max = i ; - } - } - // Interchanging rows and the scale factor : - if( j!=index_max ) { - for( int k=0; k=0; i-- ) { - theSum = X( i ) ; - // theSum = B( i ) ; - theSum -= matrix_vector_product_sliced(LU, X, i, i+1, N) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*X( Range( i+1, toEnd ) ) ) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*B( Range( i+1, toEnd ) ) ) ; - // Store a component of the solution vector : - X( i ) = theSum/LU( i, i ) ; - // B( i ) = theSum/LU( i, i ) ; - } - - } - -}; - -#endif diff --git a/eigen/bench/btl/libs/gmm/gmm_interface.hh b/eigen/bench/btl/libs/gmm/gmm_interface.hh deleted file mode 100644 index 3ea303c..0000000 --- a/eigen/bench/btl/libs/gmm/gmm_interface.hh +++ /dev/null @@ -1,144 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef GMM_INTERFACE_HH -#define GMM_INTERFACE_HH - -#include -#include - -using namespace gmm; - -template -class gmm_interface { - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef gmm::dense_matrix gene_matrix; - typedef stl_vector gene_vector; - - static inline std::string name( void ) - { - return "gmm"; - } - - static void free_matrix(gene_matrix & A, int N){ - return ; - } - - static void free_vector(gene_vector & B){ - return ; - } - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(A_stl[0].size(),A_stl.size()); - - for (int j=0; j ipvt(N); - gmm::lu_factor(R, ipvt); - } - - static inline void hessenberg(const gene_matrix & X, gene_matrix & R, int N){ - gmm::copy(X,R); - gmm::Hessenberg_reduction(R,X,false); - } - - static inline void tridiagonalization(const gene_matrix & X, gene_matrix & R, int N){ - gmm::copy(X,R); - gmm::Householder_tridiagonalization(R,X,false); - } - -}; - -#endif diff --git a/eigen/bench/btl/libs/gmm/main.cpp b/eigen/bench/btl/libs/gmm/main.cpp deleted file mode 100644 index 1f0c051..0000000 --- a/eigen/bench/btl/libs/gmm/main.cpp +++ /dev/null @@ -1,51 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "gmm_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" -#include "action_hessenberg.hh" -#include "action_partial_lu.hh" - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - //bench > >(MIN_LU,MAX_LU,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/mtl4/.kdbgrc.main b/eigen/bench/btl/libs/mtl4/.kdbgrc.main deleted file mode 100644 index fed082f..0000000 --- a/eigen/bench/btl/libs/mtl4/.kdbgrc.main +++ /dev/null @@ -1,12 +0,0 @@ -[General] -DebuggerCmdStr= -DriverName=GDB -FileVersion=1 -OptionsSelected= -ProgramArgs= -TTYLevel=7 -WorkingDirectory= - -[Memory] -ColumnWidths=80,0 -NumExprs=0 diff --git a/eigen/bench/btl/libs/mtl4/CMakeLists.txt b/eigen/bench/btl/libs/mtl4/CMakeLists.txt deleted file mode 100644 index 14b47a8..0000000 --- a/eigen/bench/btl/libs/mtl4/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ - -find_package(MTL4) -if (MTL4_FOUND) - include_directories(${MTL4_INCLUDE_DIR}) - btl_add_bench(btl_mtl4 main.cpp) -endif (MTL4_FOUND) diff --git a/eigen/bench/btl/libs/mtl4/main.cpp b/eigen/bench/btl/libs/mtl4/main.cpp deleted file mode 100644 index 96fcfb9..0000000 --- a/eigen/bench/btl/libs/mtl4/main.cpp +++ /dev/null @@ -1,46 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "mtl4_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" -#include "action_cholesky.hh" -// #include "action_lu_decomp.hh" - -BTL_MAIN; - -int main() -{ - - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh b/eigen/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh deleted file mode 100644 index dcb9f56..0000000 --- a/eigen/bench/btl/libs/mtl4/mtl4_LU_solve_interface.hh +++ /dev/null @@ -1,192 +0,0 @@ -//===================================================== -// File : blitz_LU_solve_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:31 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef BLITZ_LU_SOLVE_INTERFACE_HH -#define BLITZ_LU_SOLVE_INTERFACE_HH - -#include "blitz/array.h" -#include - -BZ_USING_NAMESPACE(blitz) - -template -class blitz_LU_solve_interface : public blitz_interface -{ - -public : - - typedef typename blitz_interface::gene_matrix gene_matrix; - typedef typename blitz_interface::gene_vector gene_vector; - - typedef blitz::Array Pivot_Vector; - - inline static void new_Pivot_Vector(Pivot_Vector & pivot,int N) - { - - pivot.resize(N); - - } - - inline static void free_Pivot_Vector(Pivot_Vector & pivot) - { - - return; - - } - - - static inline real matrix_vector_product_sliced(const gene_matrix & A, gene_vector B, int row, int col_start, int col_end) - { - - real somme=0.; - - for (int j=col_start ; j=big ) big = abs( LU( i, j ) ) ; - } - if( big==0. ) { - INFOS( "blitz_LU_factor::Singular matrix" ) ; - exit( 0 ) ; - } - ImplicitScaling( i ) = 1./big ; - } - // Loop over columns of Crout's method : - for( int j=0; j=big ) { - dum = ImplicitScaling( i )*abs( theSum ) ; - big = dum ; - index_max = i ; - } - } - // Interchanging rows and the scale factor : - if( j!=index_max ) { - for( int k=0; k=0; i-- ) { - theSum = X( i ) ; - // theSum = B( i ) ; - theSum -= matrix_vector_product_sliced(LU, X, i, i+1, N) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*X( Range( i+1, toEnd ) ) ) ; - // theSum -= sum( LU( i, Range( i+1, toEnd ) )*B( Range( i+1, toEnd ) ) ) ; - // Store a component of the solution vector : - X( i ) = theSum/LU( i, i ) ; - // B( i ) = theSum/LU( i, i ) ; - } - - } - -}; - -#endif diff --git a/eigen/bench/btl/libs/mtl4/mtl4_interface.hh b/eigen/bench/btl/libs/mtl4/mtl4_interface.hh deleted file mode 100644 index 3795ac6..0000000 --- a/eigen/bench/btl/libs/mtl4/mtl4_interface.hh +++ /dev/null @@ -1,144 +0,0 @@ -//===================================================== -// Copyright (C) 2008 Gael Guennebaud -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef MTL4_INTERFACE_HH -#define MTL4_INTERFACE_HH - -#include -#include -// #include -#include - -using namespace mtl; - -template -class mtl4_interface { - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef mtl::dense2D > gene_matrix; - typedef mtl::dense_vector gene_vector; - - static inline std::string name() { return "mtl4"; } - - static void free_matrix(gene_matrix & A, int N){ - return ; - } - - static void free_vector(gene_vector & B){ - return ; - } - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.change_dim(A_stl[0].size(), A_stl.size()); - - for (int j=0; j C(N,N); -// C = B; -// X = (A*C); - } - - static inline void transposed_matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int N){ - X = (trans(A)*trans(B)); - } - -// static inline void ata_product(const gene_matrix & A, gene_matrix & X, int N){ -// X = (trans(A)*A); -// } - - static inline void aat_product(const gene_matrix & A, gene_matrix & X, int N){ - X = (A*trans(A)); - } - - static inline void matrix_vector_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ - X = (A*B); - } - - static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){ - X = (trans(A)*B); - } - - static inline void axpy(const real coef, const gene_vector & X, gene_vector & Y, int N){ - Y += coef * X; - } - - static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int N){ - Y = a*X + b*Y; - } - -// static inline void cholesky(const gene_matrix & X, gene_matrix & C, int N){ -// C = X; -// recursive_cholesky(C); -// } - -// static inline void lu_decomp(const gene_matrix & X, gene_matrix & R, int N){ -// R = X; -// std::vector ipvt(N); -// lu_factor(R, ipvt); -// } - - static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector & X, int N){ - X = lower_trisolve(L, B); - } - - static inline void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){ - cible = source; - } - - static inline void copy_vector(const gene_vector & source, gene_vector & cible, int N){ - cible = source; - } - -}; - -#endif diff --git a/eigen/bench/btl/libs/tensors/CMakeLists.txt b/eigen/bench/btl/libs/tensors/CMakeLists.txt deleted file mode 100644 index 09d6d8e..0000000 --- a/eigen/bench/btl/libs/tensors/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ - - -if((NOT TENSOR_INCLUDE_DIR) AND Eigen_SOURCE_DIR) - # unless TENSOR_INCLUDE_DIR is defined, let's use current Eigen version - set(TENSOR_INCLUDE_DIR ${Eigen_SOURCE_DIR}) - set(TENSOR_FOUND TRUE) -else() - find_package(Tensor) -endif() - -if (TENSOR_FOUND) - - include_directories(${TENSOR_INCLUDE_DIR}) - btl_add_bench(btl_tensor_linear main_linear.cpp) - btl_add_bench(btl_tensor_vecmat main_vecmat.cpp) - btl_add_bench(btl_tensor_matmat main_matmat.cpp) - - btl_add_target_property(btl_tensor_linear COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=tensor") - btl_add_target_property(btl_tensor_vecmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=tensor") - btl_add_target_property(btl_tensor_matmat COMPILE_FLAGS "-fno-exceptions -DBTL_PREFIX=tensor") - - option(BTL_BENCH_NOGCCVEC "also bench Eigen explicit vec without GCC's auto vec" OFF) - if(CMAKE_COMPILER_IS_GNUCXX AND BTL_BENCH_NOGCCVEC) - btl_add_bench(btl_tensor_nogccvec_linear main_linear.cpp) - btl_add_bench(btl_tensor_nogccvec_vecmat main_vecmat.cpp) - btl_add_bench(btl_tensor_nogccvec_matmat main_matmat.cpp) - - btl_add_target_property(btl_tensor_nogccvec_linear COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=tensor_nogccvec") - btl_add_target_property(btl_tensor_nogccvec_vecmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=tensor_nogccvec") - btl_add_target_property(btl_tensor_nogccvec_matmat COMPILE_FLAGS "-fno-exceptions -fno-tree-vectorize -DBTL_PREFIX=tensor_nogccvec") - endif() - - - if(NOT BTL_NOVEC) - btl_add_bench(btl_tensor_novec_linear main_linear.cpp OFF) - btl_add_bench(btl_tensor_novec_vecmat main_vecmat.cpp OFF) - btl_add_bench(btl_tensor_novec_matmat main_matmat.cpp OFF) - btl_add_target_property(btl_tensor_novec_linear COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=tensor_novec") - btl_add_target_property(btl_tensor_novec_vecmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=tensor_novec") - btl_add_target_property(btl_tensor_novec_matmat COMPILE_FLAGS "-fno-exceptions -DEIGEN_DONT_VECTORIZE -DBTL_PREFIX=tensor_novec") - - endif(NOT BTL_NOVEC) - -endif (TENSOR_FOUND) diff --git a/eigen/bench/btl/libs/tensors/main_linear.cpp b/eigen/bench/btl/libs/tensors/main_linear.cpp deleted file mode 100644 index e257f1e..0000000 --- a/eigen/bench/btl/libs/tensors/main_linear.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2014 Benoit Steiner -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -#include "utilities.h" -#include "tensor_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - return 0; -} diff --git a/eigen/bench/btl/libs/tensors/main_matmat.cpp b/eigen/bench/btl/libs/tensors/main_matmat.cpp deleted file mode 100644 index 675fcfc..0000000 --- a/eigen/bench/btl/libs/tensors/main_matmat.cpp +++ /dev/null @@ -1,21 +0,0 @@ -//===================================================== -// Copyright (C) 2014 Benoit Steiner -//===================================================== -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -// -#include "utilities.h" -#include "tensor_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} diff --git a/eigen/bench/btl/libs/tensors/main_vecmat.cpp b/eigen/bench/btl/libs/tensors/main_vecmat.cpp deleted file mode 100644 index 1af00c8..0000000 --- a/eigen/bench/btl/libs/tensors/main_vecmat.cpp +++ /dev/null @@ -1,21 +0,0 @@ -//===================================================== -// Copyright (C) 2014 Benoit Steiner -//===================================================== -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -// -#include "utilities.h" -#include "tensor_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_MV,MAX_MV,NB_POINT); - - return 0; -} diff --git a/eigen/bench/btl/libs/tensors/tensor_interface.hh b/eigen/bench/btl/libs/tensors/tensor_interface.hh deleted file mode 100644 index 97b8e0f..0000000 --- a/eigen/bench/btl/libs/tensors/tensor_interface.hh +++ /dev/null @@ -1,105 +0,0 @@ -//===================================================== -// Copyright (C) 2014 Benoit Steiner -//===================================================== -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -// -#ifndef TENSOR_INTERFACE_HH -#define TENSOR_INTERFACE_HH - -#include -#include -#include "btl.hh" - -using namespace Eigen; - -template -class tensor_interface -{ -public : - typedef real real_type; - typedef typename Eigen::Tensor::Index Index; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef Eigen::Tensor gene_matrix; - typedef Eigen::Tensor gene_vector; - - - static inline std::string name( void ) - { - return EIGEN_MAKESTRING(BTL_PREFIX); - } - - static void free_matrix(gene_matrix & /*A*/, int /*N*/) {} - - static void free_vector(gene_vector & /*B*/) {} - - static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(Eigen::array(A_stl[0].size(), A_stl.size())); - - for (unsigned int j=0; j(i,j)) = A_stl[j][i]; - } - } - } - - static BTL_DONT_INLINE void vector_from_stl(gene_vector & B, stl_vector & B_stl){ - B.resize(B_stl.size()); - - for (unsigned int i=0; i(i,j)); - } - } - } - - static inline void matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int /*N*/){ - typedef typename Eigen::Tensor::DimensionPair DimPair; - const Eigen::array dims(DimPair(1, 0)); - X/*.noalias()*/ = A.contract(B, dims); - } - - static inline void matrix_vector_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int /*N*/){ - typedef typename Eigen::Tensor::DimensionPair DimPair; - const Eigen::array dims(DimPair(1, 0)); - X/*.noalias()*/ = A.contract(B, dims); - } - - static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int /*N*/){ - Y += X.constant(coef) * X; - } - - static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int /*N*/){ - Y = X.constant(a)*X + Y.constant(b)*Y; - } - - static EIGEN_DONT_INLINE void copy_matrix(const gene_matrix & source, gene_matrix & cible, int /*N*/){ - cible = source; - } - - static EIGEN_DONT_INLINE void copy_vector(const gene_vector & source, gene_vector & cible, int /*N*/){ - cible = source; - } -}; - -#endif diff --git a/eigen/bench/btl/libs/tvmet/CMakeLists.txt b/eigen/bench/btl/libs/tvmet/CMakeLists.txt deleted file mode 100644 index 25b565b..0000000 --- a/eigen/bench/btl/libs/tvmet/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ - -find_package(Tvmet) -if (TVMET_FOUND) - include_directories(${TVMET_INCLUDE_DIR}) - btl_add_bench(btl_tvmet main.cpp OFF) -endif (TVMET_FOUND) diff --git a/eigen/bench/btl/libs/tvmet/main.cpp b/eigen/bench/btl/libs/tvmet/main.cpp deleted file mode 100644 index 633215c..0000000 --- a/eigen/bench/btl/libs/tvmet/main.cpp +++ /dev/null @@ -1,40 +0,0 @@ -//===================================================== -// File : main.cpp -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "tvmet_interface.hh" -#include "static/bench_static.hh" -#include "action_matrix_vector_product.hh" -#include "action_matrix_matrix_product.hh" -#include "action_atv_product.hh" -#include "action_axpy.hh" - -BTL_MAIN; - -int main() -{ - bench_static(); - bench_static(); - bench_static(); - bench_static(); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/tvmet/tvmet_interface.hh b/eigen/bench/btl/libs/tvmet/tvmet_interface.hh deleted file mode 100644 index b441ada..0000000 --- a/eigen/bench/btl/libs/tvmet/tvmet_interface.hh +++ /dev/null @@ -1,104 +0,0 @@ -//===================================================== -// File : tvmet_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:30 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef TVMET_INTERFACE_HH -#define TVMET_INTERFACE_HH - -#include -#include -#include - -#include - -using namespace tvmet; - -template -class tvmet_interface{ - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef Vector gene_vector; - typedef Matrix gene_matrix; - - static inline std::string name() { return "tiny_tvmet"; } - - static void free_matrix(gene_matrix & A, int N){} - - static void free_vector(gene_vector & B){} - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - for (int j=0; j -// Copyright (C) EDF R&D, lun sep 30 14:23:27 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#include "utilities.h" -#include "ublas_interface.hh" -#include "bench.hh" -#include "basic_actions.hh" - -BTL_MAIN; - -int main() -{ - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - bench > >(MIN_AXPY,MAX_AXPY,NB_POINT); - - bench > >(MIN_MV,MAX_MV,NB_POINT); - bench > >(MIN_MV,MAX_MV,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); -// bench > >(MIN_MM,MAX_MM,NB_POINT); - - bench > >(MIN_MM,MAX_MM,NB_POINT); - - return 0; -} - - diff --git a/eigen/bench/btl/libs/ublas/ublas_interface.hh b/eigen/bench/btl/libs/ublas/ublas_interface.hh deleted file mode 100644 index 95cad51..0000000 --- a/eigen/bench/btl/libs/ublas/ublas_interface.hh +++ /dev/null @@ -1,141 +0,0 @@ -//===================================================== -// File : ublas_interface.hh -// Author : L. Plagne -// Copyright (C) EDF R&D, lun sep 30 14:23:27 CEST 2002 -//===================================================== -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -#ifndef UBLAS_INTERFACE_HH -#define UBLAS_INTERFACE_HH - -#include -#include -#include -#include - -using namespace boost::numeric; - -template -class ublas_interface{ - -public : - - typedef real real_type ; - - typedef std::vector stl_vector; - typedef std::vector stl_matrix; - - typedef typename boost::numeric::ublas::matrix gene_matrix; - typedef typename boost::numeric::ublas::vector gene_vector; - - static inline std::string name( void ) { return "ublas"; } - - static void free_matrix(gene_matrix & A, int N) {} - - static void free_vector(gene_vector & B) {} - - static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){ - A.resize(A_stl.size(),A_stl[0].size()); - for (int j=0; j -#include "../Eigen/Core" - -using namespace Eigen; -using namespace std; - -#define DUMP_CPUID(CODE) {\ - int abcd[4]; \ - abcd[0] = abcd[1] = abcd[2] = abcd[3] = 0;\ - EIGEN_CPUID(abcd, CODE, 0); \ - std::cout << "The code " << CODE << " gives " \ - << (int*)(abcd[0]) << " " << (int*)(abcd[1]) << " " \ - << (int*)(abcd[2]) << " " << (int*)(abcd[3]) << " " << std::endl; \ - } - -int main() -{ - cout << "Eigen's L1 = " << internal::queryL1CacheSize() << endl; - cout << "Eigen's L2/L3 = " << internal::queryTopLevelCacheSize() << endl; - int l1, l2, l3; - internal::queryCacheSizes(l1, l2, l3); - cout << "Eigen's L1, L2, L3 = " << l1 << " " << l2 << " " << l3 << endl; - - #ifdef EIGEN_CPUID - - int abcd[4]; - int string[8]; - char* string_char = (char*)(string); - - // vendor ID - EIGEN_CPUID(abcd,0x0,0); - string[0] = abcd[1]; - string[1] = abcd[3]; - string[2] = abcd[2]; - string[3] = 0; - cout << endl; - cout << "vendor id = " << string_char << endl; - cout << endl; - int max_funcs = abcd[0]; - - internal::queryCacheSizes_intel_codes(l1, l2, l3); - cout << "Eigen's intel codes L1, L2, L3 = " << l1 << " " << l2 << " " << l3 << endl; - if(max_funcs>=4) - { - internal::queryCacheSizes_intel_direct(l1, l2, l3); - cout << "Eigen's intel direct L1, L2, L3 = " << l1 << " " << l2 << " " << l3 << endl; - } - internal::queryCacheSizes_amd(l1, l2, l3); - cout << "Eigen's amd L1, L2, L3 = " << l1 << " " << l2 << " " << l3 << endl; - cout << endl; - - // dump Intel direct method - if(max_funcs>=4) - { - l1 = l2 = l3 = 0; - int cache_id = 0; - int cache_type = 0; - do { - abcd[0] = abcd[1] = abcd[2] = abcd[3] = 0; - EIGEN_CPUID(abcd,0x4,cache_id); - cache_type = (abcd[0] & 0x0F) >> 0; - int cache_level = (abcd[0] & 0xE0) >> 5; // A[7:5] - int ways = (abcd[1] & 0xFFC00000) >> 22; // B[31:22] - int partitions = (abcd[1] & 0x003FF000) >> 12; // B[21:12] - int line_size = (abcd[1] & 0x00000FFF) >> 0; // B[11:0] - int sets = (abcd[2]); // C[31:0] - int cache_size = (ways+1) * (partitions+1) * (line_size+1) * (sets+1); - - cout << "cache[" << cache_id << "].type = " << cache_type << "\n"; - cout << "cache[" << cache_id << "].level = " << cache_level << "\n"; - cout << "cache[" << cache_id << "].ways = " << ways << "\n"; - cout << "cache[" << cache_id << "].partitions = " << partitions << "\n"; - cout << "cache[" << cache_id << "].line_size = " << line_size << "\n"; - cout << "cache[" << cache_id << "].sets = " << sets << "\n"; - cout << "cache[" << cache_id << "].size = " << cache_size << "\n"; - - cache_id++; - } while(cache_type>0 && cache_id<16); - } - - // dump everything - std::cout << endl <<"Raw dump:" << endl; - for(int i=0; i -#include "BenchTimer.h" -#include -#include -#include -#include -#include -using namespace Eigen; - -std::map > results; -std::vector labels; -std::vector sizes; - -template -EIGEN_DONT_INLINE -void compute_norm_equation(Solver &solver, const MatrixType &A) { - if(A.rows()!=A.cols()) - solver.compute(A.transpose()*A); - else - solver.compute(A); -} - -template -EIGEN_DONT_INLINE -void compute(Solver &solver, const MatrixType &A) { - solver.compute(A); -} - -template -void bench(int id, int rows, int size = Size) -{ - typedef Matrix Mat; - typedef Matrix MatDyn; - typedef Matrix MatSquare; - Mat A(rows,size); - A.setRandom(); - if(rows==size) - A = A*A.adjoint(); - BenchTimer t_llt, t_ldlt, t_lu, t_fplu, t_qr, t_cpqr, t_cod, t_fpqr, t_jsvd, t_bdcsvd; - - int svd_opt = ComputeThinU|ComputeThinV; - - int tries = 5; - int rep = 1000/size; - if(rep==0) rep = 1; -// rep = rep*rep; - - LLT llt(size); - LDLT ldlt(size); - PartialPivLU lu(size); - FullPivLU fplu(size,size); - HouseholderQR qr(A.rows(),A.cols()); - ColPivHouseholderQR cpqr(A.rows(),A.cols()); - CompleteOrthogonalDecomposition cod(A.rows(),A.cols()); - FullPivHouseholderQR fpqr(A.rows(),A.cols()); - JacobiSVD jsvd(A.rows(),A.cols()); - BDCSVD bdcsvd(A.rows(),A.cols()); - - BENCH(t_llt, tries, rep, compute_norm_equation(llt,A)); - BENCH(t_ldlt, tries, rep, compute_norm_equation(ldlt,A)); - BENCH(t_lu, tries, rep, compute_norm_equation(lu,A)); - if(size<=1000) - BENCH(t_fplu, tries, rep, compute_norm_equation(fplu,A)); - BENCH(t_qr, tries, rep, compute(qr,A)); - BENCH(t_cpqr, tries, rep, compute(cpqr,A)); - BENCH(t_cod, tries, rep, compute(cod,A)); - if(size*rows<=10000000) - BENCH(t_fpqr, tries, rep, compute(fpqr,A)); - if(size<500) // JacobiSVD is really too slow for too large matrices - BENCH(t_jsvd, tries, rep, jsvd.compute(A,svd_opt)); -// if(size*rows<=20000000) - BENCH(t_bdcsvd, tries, rep, bdcsvd.compute(A,svd_opt)); - - results["LLT"][id] = t_llt.best(); - results["LDLT"][id] = t_ldlt.best(); - results["PartialPivLU"][id] = t_lu.best(); - results["FullPivLU"][id] = t_fplu.best(); - results["HouseholderQR"][id] = t_qr.best(); - results["ColPivHouseholderQR"][id] = t_cpqr.best(); - results["CompleteOrthogonalDecomposition"][id] = t_cod.best(); - results["FullPivHouseholderQR"][id] = t_fpqr.best(); - results["JacobiSVD"][id] = t_jsvd.best(); - results["BDCSVD"][id] = t_bdcsvd.best(); -} - - -int main() -{ - labels.push_back("LLT"); - labels.push_back("LDLT"); - labels.push_back("PartialPivLU"); - labels.push_back("FullPivLU"); - labels.push_back("HouseholderQR"); - labels.push_back("ColPivHouseholderQR"); - labels.push_back("CompleteOrthogonalDecomposition"); - labels.push_back("FullPivHouseholderQR"); - labels.push_back("JacobiSVD"); - labels.push_back("BDCSVD"); - - for(int i=0; i(k,sizes[k](0),sizes[k](1)); - } - - cout.width(32); - cout << "solver/size"; - cout << " "; - for(int k=0; k=1e6) cout << "-"; - else cout << r(k); - cout << " "; - } - cout << endl; - } - - // HTML output - cout << "" << endl; - cout << "" << endl; - for(int k=0; k" << sizes[k](0) << "x" << sizes[k](1) << ""; - cout << "" << endl; - for(int i=0; i"; - ArrayXf r = (results[labels[i]]*100000.f).floor()/100.f; - for(int k=0; k=1e6) cout << ""; - else - { - cout << ""; - } - } - cout << "" << endl; - } - cout << "
solver/size
" << labels[i] << "-" << r(k); - if(i>0) - cout << " (x" << numext::round(10.f*results[labels[i]](k)/results["LLT"](k))/10.f << ")"; - if(i<4 && sizes[k](0)!=sizes[k](1)) - cout << " *"; - cout << "
" << endl; - -// cout << "LLT (ms) " << (results["LLT"]*1000.).format(fmt) << "\n"; -// cout << "LDLT (%) " << (results["LDLT"]/results["LLT"]).format(fmt) << "\n"; -// cout << "PartialPivLU (%) " << (results["PartialPivLU"]/results["LLT"]).format(fmt) << "\n"; -// cout << "FullPivLU (%) " << (results["FullPivLU"]/results["LLT"]).format(fmt) << "\n"; -// cout << "HouseholderQR (%) " << (results["HouseholderQR"]/results["LLT"]).format(fmt) << "\n"; -// cout << "ColPivHouseholderQR (%) " << (results["ColPivHouseholderQR"]/results["LLT"]).format(fmt) << "\n"; -// cout << "CompleteOrthogonalDecomposition (%) " << (results["CompleteOrthogonalDecomposition"]/results["LLT"]).format(fmt) << "\n"; -// cout << "FullPivHouseholderQR (%) " << (results["FullPivHouseholderQR"]/results["LLT"]).format(fmt) << "\n"; -// cout << "JacobiSVD (%) " << (results["JacobiSVD"]/results["LLT"]).format(fmt) << "\n"; -// cout << "BDCSVD (%) " << (results["BDCSVD"]/results["LLT"]).format(fmt) << "\n"; -} diff --git a/eigen/bench/eig33.cpp b/eigen/bench/eig33.cpp deleted file mode 100644 index 47947a9..0000000 --- a/eigen/bench/eig33.cpp +++ /dev/null @@ -1,195 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2010 Gael Guennebaud -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - -// The computeRoots function included in this is based on materials -// covered by the following copyright and license: -// -// Geometric Tools, LLC -// Copyright (c) 1998-2010 -// Distributed under the Boost Software License, Version 1.0. -// -// Permission is hereby granted, free of charge, to any person or organization -// obtaining a copy of the software and accompanying documentation covered by -// this license (the "Software") to use, reproduce, display, distribute, -// execute, and transmit the Software, and to prepare derivative works of the -// Software, and to permit third-parties to whom the Software is furnished to -// do so, all subject to the following: -// -// The copyright notices in the Software and this entire statement, including -// the above license grant, this restriction and the following disclaimer, -// must be included in all copies of the Software, in whole or in part, and -// all derivative works of the Software, unless such copies or derivative -// works are solely in the form of machine-executable object code generated by -// a source language processor. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -#include -#include -#include -#include -#include - -using namespace Eigen; -using namespace std; - -template -inline void computeRoots(const Matrix& m, Roots& roots) -{ - typedef typename Matrix::Scalar Scalar; - const Scalar s_inv3 = 1.0/3.0; - const Scalar s_sqrt3 = std::sqrt(Scalar(3.0)); - - // The characteristic equation is x^3 - c2*x^2 + c1*x - c0 = 0. The - // eigenvalues are the roots to this equation, all guaranteed to be - // real-valued, because the matrix is symmetric. - Scalar c0 = m(0,0)*m(1,1)*m(2,2) + Scalar(2)*m(0,1)*m(0,2)*m(1,2) - m(0,0)*m(1,2)*m(1,2) - m(1,1)*m(0,2)*m(0,2) - m(2,2)*m(0,1)*m(0,1); - Scalar c1 = m(0,0)*m(1,1) - m(0,1)*m(0,1) + m(0,0)*m(2,2) - m(0,2)*m(0,2) + m(1,1)*m(2,2) - m(1,2)*m(1,2); - Scalar c2 = m(0,0) + m(1,1) + m(2,2); - - // Construct the parameters used in classifying the roots of the equation - // and in solving the equation for the roots in closed form. - Scalar c2_over_3 = c2*s_inv3; - Scalar a_over_3 = (c1 - c2*c2_over_3)*s_inv3; - if (a_over_3 > Scalar(0)) - a_over_3 = Scalar(0); - - Scalar half_b = Scalar(0.5)*(c0 + c2_over_3*(Scalar(2)*c2_over_3*c2_over_3 - c1)); - - Scalar q = half_b*half_b + a_over_3*a_over_3*a_over_3; - if (q > Scalar(0)) - q = Scalar(0); - - // Compute the eigenvalues by solving for the roots of the polynomial. - Scalar rho = std::sqrt(-a_over_3); - Scalar theta = std::atan2(std::sqrt(-q),half_b)*s_inv3; - Scalar cos_theta = std::cos(theta); - Scalar sin_theta = std::sin(theta); - roots(2) = c2_over_3 + Scalar(2)*rho*cos_theta; - roots(0) = c2_over_3 - rho*(cos_theta + s_sqrt3*sin_theta); - roots(1) = c2_over_3 - rho*(cos_theta - s_sqrt3*sin_theta); -} - -template -void eigen33(const Matrix& mat, Matrix& evecs, Vector& evals) -{ - typedef typename Matrix::Scalar Scalar; - // Scale the matrix so its entries are in [-1,1]. The scaling is applied - // only when at least one matrix entry has magnitude larger than 1. - - Scalar shift = mat.trace()/3; - Matrix scaledMat = mat; - scaledMat.diagonal().array() -= shift; - Scalar scale = scaledMat.cwiseAbs()/*.template triangularView()*/.maxCoeff(); - scale = std::max(scale,Scalar(1)); - scaledMat/=scale; - - // Compute the eigenvalues -// scaledMat.setZero(); - computeRoots(scaledMat,evals); - - // compute the eigen vectors - // **here we assume 3 differents eigenvalues** - - // "optimized version" which appears to be slower with gcc! -// Vector base; -// Scalar alpha, beta; -// base << scaledMat(1,0) * scaledMat(2,1), -// scaledMat(1,0) * scaledMat(2,0), -// -scaledMat(1,0) * scaledMat(1,0); -// for(int k=0; k<2; ++k) -// { -// alpha = scaledMat(0,0) - evals(k); -// beta = scaledMat(1,1) - evals(k); -// evecs.col(k) = (base + Vector(-beta*scaledMat(2,0), -alpha*scaledMat(2,1), alpha*beta)).normalized(); -// } -// evecs.col(2) = evecs.col(0).cross(evecs.col(1)).normalized(); - -// // naive version -// Matrix tmp; -// tmp = scaledMat; -// tmp.diagonal().array() -= evals(0); -// evecs.col(0) = tmp.row(0).cross(tmp.row(1)).normalized(); -// -// tmp = scaledMat; -// tmp.diagonal().array() -= evals(1); -// evecs.col(1) = tmp.row(0).cross(tmp.row(1)).normalized(); -// -// tmp = scaledMat; -// tmp.diagonal().array() -= evals(2); -// evecs.col(2) = tmp.row(0).cross(tmp.row(1)).normalized(); - - // a more stable version: - if((evals(2)-evals(0))<=Eigen::NumTraits::epsilon()) - { - evecs.setIdentity(); - } - else - { - Matrix tmp; - tmp = scaledMat; - tmp.diagonal ().array () -= evals (2); - evecs.col (2) = tmp.row (0).cross (tmp.row (1)).normalized (); - - tmp = scaledMat; - tmp.diagonal ().array () -= evals (1); - evecs.col(1) = tmp.row (0).cross(tmp.row (1)); - Scalar n1 = evecs.col(1).norm(); - if(n1<=Eigen::NumTraits::epsilon()) - evecs.col(1) = evecs.col(2).unitOrthogonal(); - else - evecs.col(1) /= n1; - - // make sure that evecs[1] is orthogonal to evecs[2] - evecs.col(1) = evecs.col(2).cross(evecs.col(1).cross(evecs.col(2))).normalized(); - evecs.col(0) = evecs.col(2).cross(evecs.col(1)); - } - - // Rescale back to the original size. - evals *= scale; - evals.array()+=shift; -} - -int main() -{ - BenchTimer t; - int tries = 10; - int rep = 400000; - typedef Matrix3d Mat; - typedef Vector3d Vec; - Mat A = Mat::Random(3,3); - A = A.adjoint() * A; -// Mat Q = A.householderQr().householderQ(); -// A = Q * Vec(2.2424567,2.2424566,7.454353).asDiagonal() * Q.transpose(); - - SelfAdjointEigenSolver eig(A); - BENCH(t, tries, rep, eig.compute(A)); - std::cout << "Eigen iterative: " << t.best() << "s\n"; - - BENCH(t, tries, rep, eig.computeDirect(A)); - std::cout << "Eigen direct : " << t.best() << "s\n"; - - Mat evecs; - Vec evals; - BENCH(t, tries, rep, eigen33(A,evecs,evals)); - std::cout << "Direct: " << t.best() << "s\n\n"; - -// std::cerr << "Eigenvalue/eigenvector diffs:\n"; -// std::cerr << (evals - eig.eigenvalues()).transpose() << "\n"; -// for(int k=0;k<3;++k) -// if(evecs.col(k).dot(eig.eigenvectors().col(k))<0) -// evecs.col(k) = -evecs.col(k); -// std::cerr << evecs - eig.eigenvectors() << "\n\n"; -} diff --git a/eigen/bench/geometry.cpp b/eigen/bench/geometry.cpp deleted file mode 100644 index b187a51..0000000 --- a/eigen/bench/geometry.cpp +++ /dev/null @@ -1,126 +0,0 @@ - -#include -#include -#include - -using namespace std; -using namespace Eigen; - -#ifndef SCALAR -#define SCALAR float -#endif - -#ifndef SIZE -#define SIZE 8 -#endif - -typedef SCALAR Scalar; -typedef NumTraits::Real RealScalar; -typedef Matrix A; -typedef Matrix B; -typedef Matrix C; -typedef Matrix M; - -template -EIGEN_DONT_INLINE void transform(const Transformation& t, Data& data) -{ - EIGEN_ASM_COMMENT("begin"); - data = t * data; - EIGEN_ASM_COMMENT("end"); -} - -template -EIGEN_DONT_INLINE void transform(const Quaternion& t, Data& data) -{ - EIGEN_ASM_COMMENT("begin quat"); - for(int i=0;i struct ToRotationMatrixWrapper -{ - enum {Dim = T::Dim}; - typedef typename T::Scalar Scalar; - ToRotationMatrixWrapper(const T& o) : object(o) {} - T object; -}; - -template -EIGEN_DONT_INLINE void transform(const ToRotationMatrixWrapper& t, Data& data) -{ - EIGEN_ASM_COMMENT("begin quat via mat"); - data = t.object.toRotationMatrix() * data; - EIGEN_ASM_COMMENT("end quat via mat"); -} - -template -EIGEN_DONT_INLINE void transform(const Transform& t, Data& data) -{ - data = (t * data.colwise().homogeneous()).template block(0,0); -} - -template struct get_dim { enum { Dim = T::Dim }; }; -template -struct get_dim > { enum { Dim = R }; }; - -template -struct bench_impl -{ - static EIGEN_DONT_INLINE void run(const Transformation& t) - { - Matrix::Dim,N> data; - data.setRandom(); - bench_impl::run(t); - BenchTimer timer; - BENCH(timer,10,100000,transform(t,data)); - cout.width(9); - cout << timer.best() << " "; - } -}; - - -template -struct bench_impl -{ - static EIGEN_DONT_INLINE void run(const Transformation&) {} -}; - -template -EIGEN_DONT_INLINE void bench(const std::string& msg, const Transformation& t) -{ - cout << msg << " "; - bench_impl::run(t); - std::cout << "\n"; -} - -int main(int argc, char ** argv) -{ - Matrix mat34; mat34.setRandom(); - Transform iso3(mat34); - Transform aff3(mat34); - Transform caff3(mat34); - Transform proj3(mat34); - Quaternion quat;quat.setIdentity(); - ToRotationMatrixWrapper > quatmat(quat); - Matrix mat33; mat33.setRandom(); - - cout.precision(4); - std::cout - << "N "; - for(int i=0;i -#include -#include -#include -#include "../../BenchTimer.h" -using namespace Eigen; - -#ifndef SCALAR -#error SCALAR must be defined -#endif - -typedef SCALAR Scalar; - -typedef Matrix Mat; - -EIGEN_DONT_INLINE -void gemm(const Mat &A, const Mat &B, Mat &C) -{ - C.noalias() += A * B; -} - -EIGEN_DONT_INLINE -double bench(long m, long n, long k) -{ - Mat A(m,k); - Mat B(k,n); - Mat C(m,n); - A.setRandom(); - B.setRandom(); - C.setZero(); - - BenchTimer t; - - double up = 1e8*4/sizeof(Scalar); - double tm0 = 4, tm1 = 10; - if(NumTraits::IsComplex) - { - up /= 4; - tm0 = 2; - tm1 = 4; - } - - double flops = 2. * m * n * k; - long rep = std::max(1., std::min(100., up/flops) ); - long tries = std::max(tm0, std::min(tm1, up/flops) ); - - BENCH(t, tries, rep, gemm(A,B,C)); - - return 1e-9 * rep * flops / t.best(); -} - -int main(int argc, char **argv) -{ - std::vector results; - - std::ifstream settings("gemm_settings.txt"); - long m, n, k; - while(settings >> m >> n >> k) - { - //std::cerr << " Testing " << m << " " << n << " " << k << std::endl; - results.push_back( bench(m, n, k) ); - } - - std::cout << RowVectorXd::Map(results.data(), results.size()); - - return 0; -} diff --git a/eigen/bench/perf_monitoring/gemm/gemm_settings.txt b/eigen/bench/perf_monitoring/gemm/gemm_settings.txt deleted file mode 100644 index 5c43e1c..0000000 --- a/eigen/bench/perf_monitoring/gemm/gemm_settings.txt +++ /dev/null @@ -1,15 +0,0 @@ -8 8 8 -9 9 9 -24 24 24 -239 239 239 -240 240 240 -2400 24 24 -24 2400 24 -24 24 2400 -24 2400 2400 -2400 24 2400 -2400 2400 24 -2400 2400 64 -4800 23 160 -23 4800 160 -2400 2400 2400 diff --git a/eigen/bench/perf_monitoring/gemm/lazy_gemm.cpp b/eigen/bench/perf_monitoring/gemm/lazy_gemm.cpp deleted file mode 100644 index 6dc3701..0000000 --- a/eigen/bench/perf_monitoring/gemm/lazy_gemm.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include -#include -#include -#include -#include "../../BenchTimer.h" -using namespace Eigen; - -#ifndef SCALAR -#error SCALAR must be defined -#endif - -typedef SCALAR Scalar; - -template -EIGEN_DONT_INLINE -void lazy_gemm(const MatA &A, const MatB &B, MatC &C) -{ -// escape((void*)A.data()); -// escape((void*)B.data()); - C.noalias() += A.lazyProduct(B); -// escape((void*)C.data()); -} - -template -EIGEN_DONT_INLINE -double bench() -{ - typedef Matrix MatA; - typedef Matrix MatB; - typedef Matrix MatC; - - MatA A(m,k); - MatB B(k,n); - MatC C(m,n); - A.setRandom(); - B.setRandom(); - C.setZero(); - - BenchTimer t; - - double up = 1e7*4/sizeof(Scalar); - double tm0 = 10, tm1 = 20; - - double flops = 2. * m * n * k; - long rep = std::max(10., std::min(10000., up/flops) ); - long tries = std::max(tm0, std::min(tm1, up/flops) ); - - BENCH(t, tries, rep, lazy_gemm(A,B,C)); - - return 1e-9 * rep * flops / t.best(); -} - -template -double bench_t(int t) -{ - if(t) - return bench(); - else - return bench(); -} - -EIGEN_DONT_INLINE -double bench_mnk(int m, int n, int k, int t) -{ - int id = m*10000 + n*100 + k; - switch(id) { - case 10101 : return bench_t< 1, 1, 1>(t); break; - case 20202 : return bench_t< 2, 2, 2>(t); break; - case 30303 : return bench_t< 3, 3, 3>(t); break; - case 40404 : return bench_t< 4, 4, 4>(t); break; - case 50505 : return bench_t< 5, 5, 5>(t); break; - case 60606 : return bench_t< 6, 6, 6>(t); break; - case 70707 : return bench_t< 7, 7, 7>(t); break; - case 80808 : return bench_t< 8, 8, 8>(t); break; - case 90909 : return bench_t< 9, 9, 9>(t); break; - case 101010 : return bench_t<10,10,10>(t); break; - case 111111 : return bench_t<11,11,11>(t); break; - case 121212 : return bench_t<12,12,12>(t); break; - } - return 0; -} - -int main(int argc, char **argv) -{ - std::vector results; - - std::ifstream settings("lazy_gemm_settings.txt"); - long m, n, k, t; - while(settings >> m >> n >> k >> t) - { - //std::cerr << " Testing " << m << " " << n << " " << k << std::endl; - results.push_back( bench_mnk(m, n, k, t) ); - } - - std::cout << RowVectorXd::Map(results.data(), results.size()); - - return 0; -} diff --git a/eigen/bench/perf_monitoring/gemm/lazy_gemm_settings.txt b/eigen/bench/perf_monitoring/gemm/lazy_gemm_settings.txt deleted file mode 100644 index 407d5d4..0000000 --- a/eigen/bench/perf_monitoring/gemm/lazy_gemm_settings.txt +++ /dev/null @@ -1,15 +0,0 @@ -1 1 1 0 -2 2 2 0 -3 3 3 0 -4 4 4 0 -4 4 4 1 -5 5 5 0 -6 6 6 0 -7 7 7 0 -7 7 7 1 -8 8 8 0 -9 9 9 0 -10 10 10 0 -11 11 11 0 -12 12 12 0 -12 12 12 1 diff --git a/eigen/bench/perf_monitoring/gemm/make_plot.sh b/eigen/bench/perf_monitoring/gemm/make_plot.sh deleted file mode 100644 index cd3214a..0000000 --- a/eigen/bench/perf_monitoring/gemm/make_plot.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# base name of the bench -# it reads $1.out -# and generates $1.pdf -WHAT=$1 -bench=$2 - -header="rev " -while read line -do - if [ ! -z '$line' ]; then - header="$header \"$line\"" - fi -done < $bench"_settings.txt" - -echo $header > $WHAT.out.header -cat $WHAT.out >> $WHAT.out.header - - -echo "set title '$WHAT'" > $WHAT.gnuplot -echo "set key autotitle columnhead outside " >> $WHAT.gnuplot -echo "set xtics rotate 1" >> $WHAT.gnuplot - -echo "set term pdf color rounded enhanced fontscale 0.35 size 7in,5in" >> $WHAT.gnuplot -echo set output "'"$WHAT.pdf"'" >> $WHAT.gnuplot - -col=`cat $bench"_settings.txt" | wc -l` -echo "plot for [col=2:$col+1] '$WHAT.out.header' using 0:col:xticlabels(1) with lines" >> $WHAT.gnuplot -echo " " >> $WHAT.gnuplot - -gnuplot -persist < $WHAT.gnuplot - -# generate a png file -# convert -background white -density 120 -rotate 90 -resize 800 +dither -colors 256 -quality 0 $WHAT.ps -background white -flatten .$WHAT.png - -# clean -rm $WHAT.out.header $WHAT.gnuplot \ No newline at end of file diff --git a/eigen/bench/perf_monitoring/gemm/run.sh b/eigen/bench/perf_monitoring/gemm/run.sh deleted file mode 100644 index 9d6ee40..0000000 --- a/eigen/bench/perf_monitoring/gemm/run.sh +++ /dev/null @@ -1,156 +0,0 @@ -#!/bin/bash - -# ./run.sh gemm -# ./run.sh lazy_gemm - -# Examples of environment variables to be set: -# PREFIX="haswell-fma-" -# CXX_FLAGS="-mfma" - -# Options: -# -up : enforce the recomputation of existing data, and keep best results as a merging strategy -# -s : recompute selected changesets only and keep bests - -bench=$1 - -if echo "$*" | grep '\-up' > /dev/null; then - update=true -else - update=false -fi - -if echo "$*" | grep '\-s' > /dev/null; then - selected=true -else - selected=false -fi - -global_args="$*" - -if [ $selected == true ]; then - echo "Recompute selected changesets only and keep bests" -elif [ $update == true ]; then - echo "(Re-)Compute all changesets and keep bests" -else - echo "Skip previously computed changesets" -fi - - - -if [ ! -d "eigen_src" ]; then - hg clone https://bitbucket.org/eigen/eigen eigen_src -else - cd eigen_src - hg pull -u - cd .. -fi - -if [ ! -z '$CXX' ]; then - CXX=g++ -fi - -function make_backup -{ - if [ -f "$1.out" ]; then - mv "$1.out" "$1.backup" - fi -} - -function merge -{ - count1=`echo $1 | wc -w` - count2=`echo $2 | wc -w` - - if [ $count1 == $count2 ]; then - a=( $1 ); b=( $2 ) - res="" - for (( i=0 ; i<$count1 ; i++ )); do - ai=${a[$i]}; bi=${b[$i]} - tmp=`echo "if ($ai > $bi) $ai else $bi " | bc -l` - res="$res $tmp" - done - echo $res - - else - echo $1 - fi -} - -function test_current -{ - rev=$1 - scalar=$2 - name=$3 - - prev="" - if [ -e "$name.backup" ]; then - prev=`grep $rev "$name.backup" | cut -c 14-` - fi - res=$prev - count_rev=`echo $prev | wc -w` - count_ref=`cat $bench"_settings.txt" | wc -l` - if echo "$global_args" | grep "$rev" > /dev/null; then - rev_found=true - else - rev_found=false - fi -# echo $update et $selected et $rev_found because $rev et "$global_args" -# echo $count_rev et $count_ref - if [ $update == true ] || [ $count_rev != $count_ref ] || ([ $selected == true ] && [ $rev_found == true ]); then - if $CXX -O2 -DNDEBUG -march=native $CXX_FLAGS -I eigen_src $bench.cpp -DSCALAR=$scalar -o $name; then - curr=`./$name` - if [ $count_rev == $count_ref ]; then - echo "merge previous $prev" - echo "with new $curr" - else - echo "got $curr" - fi - res=`merge "$curr" "$prev"` -# echo $res - echo "$rev $res" >> $name.out - else - echo "Compilation failed, skip rev $rev" - fi - else - echo "Skip existing results for $rev / $name" - echo "$rev $res" >> $name.out - fi -} - -make_backup $PREFIX"s"$bench -make_backup $PREFIX"d"$bench -make_backup $PREFIX"c"$bench - -cut -f1 -d"#" < changesets.txt | grep -E '[[:alnum:]]' | while read rev -do - if [ ! -z '$rev' ]; then - echo "Testing rev $rev" - cd eigen_src - hg up -C $rev > /dev/null - actual_rev=`hg identify | cut -f1 -d' '` - cd .. - - test_current $actual_rev float $PREFIX"s"$bench - test_current $actual_rev double $PREFIX"d"$bench - test_current $actual_rev "std::complex" $PREFIX"c"$bench - fi - -done - -echo "Float:" -cat $PREFIX"s""$bench.out" -echo " " - -echo "Double:" -cat $PREFIX"d""$bench.out" -echo "" - -echo "Complex:" -cat $PREFIX"c""$bench.out" -echo "" - -./make_plot.sh $PREFIX"s"$bench $bench -./make_plot.sh $PREFIX"d"$bench $bench -./make_plot.sh $PREFIX"c"$bench $bench - - diff --git a/eigen/bench/product_threshold.cpp b/eigen/bench/product_threshold.cpp deleted file mode 100644 index dd6d15a..0000000 --- a/eigen/bench/product_threshold.cpp +++ /dev/null @@ -1,143 +0,0 @@ - -#include -#include -#include - -using namespace Eigen; -using namespace std; - -#define END 9 - -template struct map_size { enum { ret = S }; }; -template<> struct map_size<10> { enum { ret = 20 }; }; -template<> struct map_size<11> { enum { ret = 50 }; }; -template<> struct map_size<12> { enum { ret = 100 }; }; -template<> struct map_size<13> { enum { ret = 300 }; }; - -template struct alt_prod -{ - enum { - ret = M==1 && N==1 ? InnerProduct - : K==1 ? OuterProduct - : M==1 ? GemvProduct - : N==1 ? GemvProduct - : GemmProduct - }; -}; - -void print_mode(int mode) -{ - if(mode==InnerProduct) std::cout << "i"; - if(mode==OuterProduct) std::cout << "o"; - if(mode==CoeffBasedProductMode) std::cout << "c"; - if(mode==LazyCoeffBasedProductMode) std::cout << "l"; - if(mode==GemvProduct) std::cout << "v"; - if(mode==GemmProduct) std::cout << "m"; -} - -template -EIGEN_DONT_INLINE void prod(const Lhs& a, const Rhs& b, Res& c) -{ - c.noalias() += typename ProductReturnType::Type(a,b); -} - -template -EIGEN_DONT_INLINE void bench_prod() -{ - typedef Matrix Lhs; Lhs a; a.setRandom(); - typedef Matrix Rhs; Rhs b; b.setRandom(); - typedef Matrix Res; Res c; c.setRandom(); - - BenchTimer t; - double n = 2.*double(M)*double(N)*double(K); - int rep = 100000./n; - rep /= 2; - if(rep<1) rep = 1; - do { - rep *= 2; - t.reset(); - BENCH(t,1,rep,prod(a,b,c)); - } while(t.best()<0.1); - - t.reset(); - BENCH(t,5,rep,prod(a,b,c)); - - print_mode(Mode); - std::cout << int(1e-6*n*rep/t.best()) << "\t"; -} - -template struct print_n; -template struct loop_on_m; -template struct loop_on_n; - -template -struct loop_on_k -{ - static void run() - { - std::cout << "K=" << K << "\t"; - print_n::run(); - std::cout << "\n"; - - loop_on_m::run(); - std::cout << "\n\n"; - - loop_on_k::run(); - } -}; - -template -struct loop_on_k { static void run(){} }; - - -template -struct loop_on_m -{ - static void run() - { - std::cout << M << "f\t"; - loop_on_n::run(); - std::cout << "\n"; - - std::cout << M << "f\t"; - loop_on_n::run(); - std::cout << "\n"; - - loop_on_m::run(); - } -}; - -template -struct loop_on_m { static void run(){} }; - -template -struct loop_on_n -{ - static void run() - { - bench_prod::ret : Mode>(); - - loop_on_n::run(); - } -}; - -template -struct loop_on_n { static void run(){} }; - -template struct print_n -{ - static void run() - { - std::cout << map_size::ret << "\t"; - print_n::run(); - } -}; - -template<> struct print_n { static void run(){} }; - -int main() -{ - loop_on_k<1,1,1>::run(); - - return 0; -} diff --git a/eigen/bench/quat_slerp.cpp b/eigen/bench/quat_slerp.cpp deleted file mode 100644 index bffb3bf..0000000 --- a/eigen/bench/quat_slerp.cpp +++ /dev/null @@ -1,247 +0,0 @@ - -#include -#include -#include -using namespace Eigen; -using namespace std; - - - -template -EIGEN_DONT_INLINE Q nlerp(const Q& a, const Q& b, typename Q::Scalar t) -{ - return Q((a.coeffs() * (1.0-t) + b.coeffs() * t).normalized()); -} - -template -EIGEN_DONT_INLINE Q slerp_eigen(const Q& a, const Q& b, typename Q::Scalar t) -{ - return a.slerp(t,b); -} - -template -EIGEN_DONT_INLINE Q slerp_legacy(const Q& a, const Q& b, typename Q::Scalar t) -{ - typedef typename Q::Scalar Scalar; - static const Scalar one = Scalar(1) - dummy_precision(); - Scalar d = a.dot(b); - Scalar absD = internal::abs(d); - if (absD>=one) - return a; - - // theta is the angle between the 2 quaternions - Scalar theta = std::acos(absD); - Scalar sinTheta = internal::sin(theta); - - Scalar scale0 = internal::sin( ( Scalar(1) - t ) * theta) / sinTheta; - Scalar scale1 = internal::sin( ( t * theta) ) / sinTheta; - if (d<0) - scale1 = -scale1; - - return Q(scale0 * a.coeffs() + scale1 * b.coeffs()); -} - -template -EIGEN_DONT_INLINE Q slerp_legacy_nlerp(const Q& a, const Q& b, typename Q::Scalar t) -{ - typedef typename Q::Scalar Scalar; - static const Scalar one = Scalar(1) - epsilon(); - Scalar d = a.dot(b); - Scalar absD = internal::abs(d); - - Scalar scale0; - Scalar scale1; - - if (absD>=one) - { - scale0 = Scalar(1) - t; - scale1 = t; - } - else - { - // theta is the angle between the 2 quaternions - Scalar theta = std::acos(absD); - Scalar sinTheta = internal::sin(theta); - - scale0 = internal::sin( ( Scalar(1) - t ) * theta) / sinTheta; - scale1 = internal::sin( ( t * theta) ) / sinTheta; - if (d<0) - scale1 = -scale1; - } - - return Q(scale0 * a.coeffs() + scale1 * b.coeffs()); -} - -template -inline T sin_over_x(T x) -{ - if (T(1) + x*x == T(1)) - return T(1); - else - return std::sin(x)/x; -} - -template -EIGEN_DONT_INLINE Q slerp_rw(const Q& a, const Q& b, typename Q::Scalar t) -{ - typedef typename Q::Scalar Scalar; - - Scalar d = a.dot(b); - Scalar theta; - if (d<0.0) - theta = /*M_PI -*/ Scalar(2)*std::asin( (a.coeffs()+b.coeffs()).norm()/2 ); - else - theta = Scalar(2)*std::asin( (a.coeffs()-b.coeffs()).norm()/2 ); - - // theta is the angle between the 2 quaternions -// Scalar theta = std::acos(absD); - Scalar sinOverTheta = sin_over_x(theta); - - Scalar scale0 = (Scalar(1)-t)*sin_over_x( ( Scalar(1) - t ) * theta) / sinOverTheta; - Scalar scale1 = t * sin_over_x( ( t * theta) ) / sinOverTheta; - if (d<0) - scale1 = -scale1; - - return Quaternion(scale0 * a.coeffs() + scale1 * b.coeffs()); -} - -template -EIGEN_DONT_INLINE Q slerp_gael(const Q& a, const Q& b, typename Q::Scalar t) -{ - typedef typename Q::Scalar Scalar; - - Scalar d = a.dot(b); - Scalar theta; -// theta = Scalar(2) * atan2((a.coeffs()-b.coeffs()).norm(),(a.coeffs()+b.coeffs()).norm()); -// if (d<0.0) -// theta = M_PI-theta; - - if (d<0.0) - theta = /*M_PI -*/ Scalar(2)*std::asin( (-a.coeffs()-b.coeffs()).norm()/2 ); - else - theta = Scalar(2)*std::asin( (a.coeffs()-b.coeffs()).norm()/2 ); - - - Scalar scale0; - Scalar scale1; - if(theta*theta-Scalar(6)==-Scalar(6)) - { - scale0 = Scalar(1) - t; - scale1 = t; - } - else - { - Scalar sinTheta = std::sin(theta); - scale0 = internal::sin( ( Scalar(1) - t ) * theta) / sinTheta; - scale1 = internal::sin( ( t * theta) ) / sinTheta; - if (d<0) - scale1 = -scale1; - } - - return Quaternion(scale0 * a.coeffs() + scale1 * b.coeffs()); -} - -int main() -{ - typedef double RefScalar; - typedef float TestScalar; - - typedef Quaternion Qd; - typedef Quaternion Qf; - - unsigned int g_seed = (unsigned int) time(NULL); - std::cout << g_seed << "\n"; -// g_seed = 1259932496; - srand(g_seed); - - Matrix maxerr(7); - maxerr.setZero(); - - Matrix avgerr(7); - avgerr.setZero(); - - cout << "double=>float=>double nlerp eigen legacy(snap) legacy(nlerp) rightway gael's criteria\n"; - - int rep = 100; - int iters = 40; - for (int w=0; w()); - Qd br(b.cast()); - Qd cr; - - - - cout.precision(8); - cout << std::scientific; - for (int i=0; i(); - c[0] = nlerp(a,b,t); - c[1] = slerp_eigen(a,b,t); - c[2] = slerp_legacy(a,b,t); - c[3] = slerp_legacy_nlerp(a,b,t); - c[4] = slerp_rw(a,b,t); - c[5] = slerp_gael(a,b,t); - - VectorXd err(7); - err[0] = (cr.coeffs()-refc.cast().coeffs()).norm(); -// std::cout << err[0] << " "; - for (int k=0; k<6; ++k) - { - err[k+1] = (c[k].coeffs()-refc.coeffs()).norm(); -// std::cout << err[k+1] << " "; - } - maxerr = maxerr.cwise().max(err); - avgerr += err; -// std::cout << "\n"; - b = cr.cast(); - br = cr; - } -// std::cout << "\n"; - } - avgerr /= RefScalar(rep*iters); - cout << "\n\nAccuracy:\n" - << " max: " << maxerr.transpose() << "\n"; - cout << " avg: " << avgerr.transpose() << "\n"; - - // perf bench - Quaternionf a,b; - a.coeffs().setRandom(); - a.normalize(); - b.coeffs().setRandom(); - b.normalize(); - //b = a; - float s = 0.65; - - #define BENCH(FUNC) {\ - BenchTimer t; \ - for(int k=0; k<2; ++k) {\ - t.start(); \ - for(int i=0; i<1000000; ++i) \ - FUNC(a,b,s); \ - t.stop(); \ - } \ - cout << " " << #FUNC << " => \t " << t.value() << "s\n"; \ - } - - cout << "\nSpeed:\n" << std::fixed; - BENCH(nlerp); - BENCH(slerp_eigen); - BENCH(slerp_legacy); - BENCH(slerp_legacy_nlerp); - BENCH(slerp_rw); - BENCH(slerp_gael); -} - diff --git a/eigen/bench/quatmul.cpp b/eigen/bench/quatmul.cpp deleted file mode 100644 index 8d9d792..0000000 --- a/eigen/bench/quatmul.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include -#include -#include - -using namespace Eigen; - -template -EIGEN_DONT_INLINE void quatmul_default(const Quat& a, const Quat& b, Quat& c) -{ - c = a * b; -} - -template -EIGEN_DONT_INLINE void quatmul_novec(const Quat& a, const Quat& b, Quat& c) -{ - c = internal::quat_product<0, Quat, Quat, typename Quat::Scalar, Aligned>::run(a,b); -} - -template void bench(const std::string& label) -{ - int tries = 10; - int rep = 1000000; - BenchTimer t; - - Quat a(4, 1, 2, 3); - Quat b(2, 3, 4, 5); - Quat c; - - std::cout.precision(3); - - BENCH(t, tries, rep, quatmul_default(a,b,c)); - std::cout << label << " default " << 1e3*t.best(CPU_TIMER) << "ms \t" << 1e-6*double(rep)/(t.best(CPU_TIMER)) << " M mul/s\n"; - - BENCH(t, tries, rep, quatmul_novec(a,b,c)); - std::cout << label << " novec " << 1e3*t.best(CPU_TIMER) << "ms \t" << 1e-6*double(rep)/(t.best(CPU_TIMER)) << " M mul/s\n"; -} - -int main() -{ - bench("float "); - bench("double"); - - return 0; - -} - diff --git a/eigen/bench/sparse_cholesky.cpp b/eigen/bench/sparse_cholesky.cpp deleted file mode 100644 index ecb2267..0000000 --- a/eigen/bench/sparse_cholesky.cpp +++ /dev/null @@ -1,216 +0,0 @@ -// #define EIGEN_TAUCS_SUPPORT -// #define EIGEN_CHOLMOD_SUPPORT -#include -#include - -// g++ -DSIZE=10000 -DDENSITY=0.001 sparse_cholesky.cpp -I.. -DDENSEMATRI -O3 -g0 -DNDEBUG -DNBTRIES=1 -I /home/gael/Coding/LinearAlgebra/taucs_full/src/ -I/home/gael/Coding/LinearAlgebra/taucs_full/build/linux/ -L/home/gael/Coding/LinearAlgebra/taucs_full/lib/linux/ -ltaucs /home/gael/Coding/LinearAlgebra/GotoBLAS/libgoto.a -lpthread -I /home/gael/Coding/LinearAlgebra/SuiteSparse/CHOLMOD/Include/ $CHOLLIB -I /home/gael/Coding/LinearAlgebra/SuiteSparse/UFconfig/ /home/gael/Coding/LinearAlgebra/SuiteSparse/CCOLAMD/Lib/libccolamd.a /home/gael/Coding/LinearAlgebra/SuiteSparse/CHOLMOD/Lib/libcholmod.a -lmetis /home/gael/Coding/LinearAlgebra/SuiteSparse/AMD/Lib/libamd.a /home/gael/Coding/LinearAlgebra/SuiteSparse/CAMD/Lib/libcamd.a /home/gael/Coding/LinearAlgebra/SuiteSparse/CCOLAMD/Lib/libccolamd.a /home/gael/Coding/LinearAlgebra/SuiteSparse/COLAMD/Lib/libcolamd.a -llapack && ./a.out - -#define NOGMM -#define NOMTL - -#ifndef SIZE -#define SIZE 10 -#endif - -#ifndef DENSITY -#define DENSITY 0.01 -#endif - -#ifndef REPEAT -#define REPEAT 1 -#endif - -#include "BenchSparseUtil.h" - -#ifndef MINDENSITY -#define MINDENSITY 0.0004 -#endif - -#ifndef NBTRIES -#define NBTRIES 10 -#endif - -#define BENCH(X) \ - timer.reset(); \ - for (int _j=0; _j EigenSparseTriMatrix; -typedef SparseMatrix EigenSparseSelfAdjointMatrix; - -void fillSpdMatrix(float density, int rows, int cols, EigenSparseSelfAdjointMatrix& dst) -{ - dst.startFill(rows*cols*density); - for(int j = 0; j < cols; j++) - { - dst.fill(j,j) = internal::random(10,20); - for(int i = j+1; i < rows; i++) - { - Scalar v = (internal::random(0,1) < density) ? internal::random() : 0; - if (v!=0) - dst.fill(i,j) = v; - } - - } - dst.endFill(); -} - -#include - -template -void doEigen(const char* name, const EigenSparseSelfAdjointMatrix& sm1, int flags = 0) -{ - std::cout << name << "..." << std::flush; - BenchTimer timer; - timer.start(); - SparseLLT chol(sm1, flags); - timer.stop(); - std::cout << ":\t" << timer.value() << endl; - - std::cout << " nnz: " << sm1.nonZeros() << " => " << chol.matrixL().nonZeros() << "\n"; -// std::cout << "sparse\n" << chol.matrixL() << "%\n"; -} - -int main(int argc, char *argv[]) -{ - int rows = SIZE; - int cols = SIZE; - float density = DENSITY; - BenchTimer timer; - - VectorXf b = VectorXf::Random(cols); - VectorXf x = VectorXf::Random(cols); - - bool densedone = false; - - //for (float density = DENSITY; density>=MINDENSITY; density*=0.5) -// float density = 0.5; - { - EigenSparseSelfAdjointMatrix sm1(rows, cols); - std::cout << "Generate sparse matrix (might take a while)...\n"; - fillSpdMatrix(density, rows, cols, sm1); - std::cout << "DONE\n\n"; - - // dense matrices - #ifdef DENSEMATRIX - if (!densedone) - { - densedone = true; - std::cout << "Eigen Dense\t" << density*100 << "%\n"; - DenseMatrix m1(rows,cols); - eiToDense(sm1, m1); - m1 = (m1 + m1.transpose()).eval(); - m1.diagonal() *= 0.5; - -// BENCH(LLT chol(m1);) -// std::cout << "dense:\t" << timer.value() << endl; - - BenchTimer timer; - timer.start(); - LLT chol(m1); - timer.stop(); - std::cout << "dense:\t" << timer.value() << endl; - int count = 0; - for (int j=0; j("Eigen/Sparse", sm1, Eigen::IncompleteFactorization); - - #ifdef EIGEN_CHOLMOD_SUPPORT - doEigen("Eigen/Cholmod", sm1, Eigen::IncompleteFactorization); - #endif - - #ifdef EIGEN_TAUCS_SUPPORT - doEigen("Eigen/Taucs", sm1, Eigen::IncompleteFactorization); - #endif - - #if 0 - // TAUCS - { - taucs_ccs_matrix A = sm1.asTaucsMatrix(); - - //BENCH(taucs_ccs_matrix* chol = taucs_ccs_factor_llt(&A, 0, 0);) -// BENCH(taucs_supernodal_factor_to_ccs(taucs_ccs_factor_llt_ll(&A));) -// std::cout << "taucs:\t" << timer.value() << endl; - - taucs_ccs_matrix* chol = taucs_ccs_factor_llt(&A, 0, 0); - - for (int j=0; jcolptr[j]; icolptr[j+1]; ++i) - std::cout << chol->values.d[i] << " "; - } - } - - // CHOLMOD - #ifdef EIGEN_CHOLMOD_SUPPORT - { - cholmod_common c; - cholmod_start (&c); - cholmod_sparse A; - cholmod_factor *L; - - A = sm1.asCholmodMatrix(); - BenchTimer timer; -// timer.reset(); - timer.start(); - std::vector perm(cols); -// std::vector set(ncols); - for (int i=0; icolptr[j]; icolptr[j+1]; ++i) -// std::cout << chol->values.s[i] << " "; -// } - } - #endif - - #endif - - - - } - - - return 0; -} - diff --git a/eigen/bench/sparse_dense_product.cpp b/eigen/bench/sparse_dense_product.cpp deleted file mode 100644 index f3f5194..0000000 --- a/eigen/bench/sparse_dense_product.cpp +++ /dev/null @@ -1,187 +0,0 @@ - -//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.005 -DSIZE=10000 && ./a.out -//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.05 -DSIZE=2000 && ./a.out -// -DNOGMM -DNOMTL -DCSPARSE -// -I /home/gael/Coding/LinearAlgebra/CSparse/Include/ /home/gael/Coding/LinearAlgebra/CSparse/Lib/libcsparse.a -#ifndef SIZE -#define SIZE 650000 -#endif - -#ifndef DENSITY -#define DENSITY 0.01 -#endif - -#ifndef REPEAT -#define REPEAT 1 -#endif - -#include "BenchSparseUtil.h" - -#ifndef MINDENSITY -#define MINDENSITY 0.0004 -#endif - -#ifndef NBTRIES -#define NBTRIES 10 -#endif - -#define BENCH(X) \ - timer.reset(); \ - for (int _j=0; _j=MINDENSITY; density*=0.5) - { - //fillMatrix(density, rows, cols, sm1); - fillMatrix2(7, rows, cols, sm1); - - // dense matrices - #ifdef DENSEMATRIX - { - std::cout << "Eigen Dense\t" << density*100 << "%\n"; - DenseMatrix m1(rows,cols); - eiToDense(sm1, m1); - - timer.reset(); - timer.start(); - for (int k=0; k m1(sm1); -// std::cout << "Eigen dyn-sparse\t" << m1.nonZeros()/float(m1.rows()*m1.cols())*100 << "%\n"; -// -// BENCH(for (int k=0; k gmmV1(cols), gmmV2(cols); - Map >(&gmmV1[0], cols) = v1; - Map >(&gmmV2[0], cols) = v2; - - BENCH( asm("#myx"); gmm::mult(m1, gmmV1, gmmV2); asm("#myy"); ) - std::cout << " a * v:\t" << timer.value() << endl; - - BENCH( gmm::mult(gmm::transposed(m1), gmmV1, gmmV2); ) - std::cout << " a' * v:\t" << timer.value() << endl; - } - #endif - - #ifndef NOUBLAS - { - std::cout << "ublas sparse\t" << density*100 << "%\n"; - UBlasSparse m1(rows,cols); - eiToUblas(sm1, m1); - - boost::numeric::ublas::vector uv1, uv2; - eiToUblasVec(v1,uv1); - eiToUblasVec(v2,uv2); - -// std::vector gmmV1(cols), gmmV2(cols); -// Map >(&gmmV1[0], cols) = v1; -// Map >(&gmmV2[0], cols) = v2; - - BENCH( uv2 = boost::numeric::ublas::prod(m1, uv1); ) - std::cout << " a * v:\t" << timer.value() << endl; - -// BENCH( boost::ublas::prod(gmm::transposed(m1), gmmV1, gmmV2); ) -// std::cout << " a' * v:\t" << timer.value() << endl; - } - #endif - - // MTL4 - #ifndef NOMTL - { - std::cout << "MTL4\t" << density*100 << "%\n"; - MtlSparse m1(rows,cols); - eiToMtl(sm1, m1); - mtl::dense_vector mtlV1(cols, 1.0); - mtl::dense_vector mtlV2(cols, 1.0); - - timer.reset(); - timer.start(); - for (int k=0; k - -#define NOGMM -#define NOMTL - -#ifndef SIZE -#define SIZE 10 -#endif - -#ifndef DENSITY -#define DENSITY 0.01 -#endif - -#ifndef REPEAT -#define REPEAT 1 -#endif - -#include "BenchSparseUtil.h" - -#ifndef MINDENSITY -#define MINDENSITY 0.0004 -#endif - -#ifndef NBTRIES -#define NBTRIES 10 -#endif - -#define BENCH(X) \ - timer.reset(); \ - for (int _j=0; _j VectorX; - -#include - -template -void doEigen(const char* name, const EigenSparseMatrix& sm1, const VectorX& b, VectorX& x, int flags = 0) -{ - std::cout << name << "..." << std::flush; - BenchTimer timer; timer.start(); - SparseLU lu(sm1, flags); - timer.stop(); - if (lu.succeeded()) - std::cout << ":\t" << timer.value() << endl; - else - { - std::cout << ":\t FAILED" << endl; - return; - } - - bool ok; - timer.reset(); timer.start(); - ok = lu.solve(b,&x); - timer.stop(); - if (ok) - std::cout << " solve:\t" << timer.value() << endl; - else - std::cout << " solve:\t" << " FAILED" << endl; - - //std::cout << x.transpose() << "\n"; -} - -int main(int argc, char *argv[]) -{ - int rows = SIZE; - int cols = SIZE; - float density = DENSITY; - BenchTimer timer; - - VectorX b = VectorX::Random(cols); - VectorX x = VectorX::Random(cols); - - bool densedone = false; - - //for (float density = DENSITY; density>=MINDENSITY; density*=0.5) -// float density = 0.5; - { - EigenSparseMatrix sm1(rows, cols); - fillMatrix(density, rows, cols, sm1); - - // dense matrices - #ifdef DENSEMATRIX - if (!densedone) - { - densedone = true; - std::cout << "Eigen Dense\t" << density*100 << "%\n"; - DenseMatrix m1(rows,cols); - eiToDense(sm1, m1); - - BenchTimer timer; - timer.start(); - FullPivLU lu(m1); - timer.stop(); - std::cout << "Eigen/dense:\t" << timer.value() << endl; - - timer.reset(); - timer.start(); - lu.solve(b,&x); - timer.stop(); - std::cout << " solve:\t" << timer.value() << endl; -// std::cout << b.transpose() << "\n"; -// std::cout << x.transpose() << "\n"; - } - #endif - - #ifdef EIGEN_UMFPACK_SUPPORT - x.setZero(); - doEigen("Eigen/UmfPack (auto)", sm1, b, x, 0); - #endif - - #ifdef EIGEN_SUPERLU_SUPPORT - x.setZero(); - doEigen("Eigen/SuperLU (nat)", sm1, b, x, Eigen::NaturalOrdering); -// doEigen("Eigen/SuperLU (MD AT+A)", sm1, b, x, Eigen::MinimumDegree_AT_PLUS_A); -// doEigen("Eigen/SuperLU (MD ATA)", sm1, b, x, Eigen::MinimumDegree_ATA); - doEigen("Eigen/SuperLU (COLAMD)", sm1, b, x, Eigen::ColApproxMinimumDegree); - #endif - - } - - return 0; -} - diff --git a/eigen/bench/sparse_product.cpp b/eigen/bench/sparse_product.cpp deleted file mode 100644 index d2fc44f..0000000 --- a/eigen/bench/sparse_product.cpp +++ /dev/null @@ -1,323 +0,0 @@ - -//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.005 -DSIZE=10000 && ./a.out -//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.05 -DSIZE=2000 && ./a.out -// -DNOGMM -DNOMTL -DCSPARSE -// -I /home/gael/Coding/LinearAlgebra/CSparse/Include/ /home/gael/Coding/LinearAlgebra/CSparse/Lib/libcsparse.a - -#include - -#ifndef SIZE -#define SIZE 1000000 -#endif - -#ifndef NNZPERCOL -#define NNZPERCOL 6 -#endif - -#ifndef REPEAT -#define REPEAT 1 -#endif - -#include -#include "BenchTimer.h" -#include "BenchUtil.h" -#include "BenchSparseUtil.h" - -#ifndef NBTRIES -#define NBTRIES 1 -#endif - -#define BENCH(X) \ - timer.reset(); \ - for (int _j=0; _j -// void mkl_multiply(const Lhs& lhs, const Rhs& rhs, Res& res) -// { -// char n = 'N'; -// float alpha = 1; -// char matdescra[6]; -// matdescra[0] = 'G'; -// matdescra[1] = 0; -// matdescra[2] = 0; -// matdescra[3] = 'C'; -// mkl_scscmm(&n, lhs.rows(), rhs.cols(), lhs.cols(), &alpha, matdescra, -// lhs._valuePtr(), lhs._innerIndexPtr(), lhs.outerIndexPtr(), -// pntre, b, &ldb, &beta, c, &ldc); -// // mkl_somatcopy('C', 'T', lhs.rows(), lhs.cols(), 1, -// // lhs._valuePtr(), lhs.rows(), DST, dst_stride); -// } -// -// #endif - - -#ifdef CSPARSE -cs* cs_sorted_multiply(const cs* a, const cs* b) -{ -// return cs_multiply(a,b); - - cs* A = cs_transpose(a, 1); - cs* B = cs_transpose(b, 1); - cs* D = cs_multiply(B,A); /* D = B'*A' */ - cs_spfree (A) ; - cs_spfree (B) ; - cs_dropzeros (D) ; /* drop zeros from D */ - cs* C = cs_transpose (D, 1) ; /* C = D', so that C is sorted */ - cs_spfree (D) ; - return C; - -// cs* A = cs_transpose(a, 1); -// cs* C = cs_transpose(A, 1); -// return C; -} - -cs* cs_sorted_multiply2(const cs* a, const cs* b) -{ - cs* D = cs_multiply(a,b); - cs* E = cs_transpose(D,1); - cs_spfree(D); - cs* C = cs_transpose(E,1); - cs_spfree(E); - return C; -} -#endif - -void bench_sort(); - -int main(int argc, char *argv[]) -{ -// bench_sort(); - - int rows = SIZE; - int cols = SIZE; - float density = DENSITY; - - EigenSparseMatrix sm1(rows,cols), sm2(rows,cols), sm3(rows,cols), sm4(rows,cols); - - BenchTimer timer; - for (int nnzPerCol = NNZPERCOL; nnzPerCol>1; nnzPerCol/=1.1) - { - sm1.setZero(); - sm2.setZero(); - fillMatrix2(nnzPerCol, rows, cols, sm1); - fillMatrix2(nnzPerCol, rows, cols, sm2); -// std::cerr << "filling OK\n"; - - // dense matrices - #ifdef DENSEMATRIX - { - std::cout << "Eigen Dense\t" << nnzPerCol << "%\n"; - DenseMatrix m1(rows,cols), m2(rows,cols), m3(rows,cols); - eiToDense(sm1, m1); - eiToDense(sm2, m2); - - timer.reset(); - timer.start(); - for (int k=0; k m1(sm1), m2(sm2), m3(sm3); - std::cout << "Eigen dyn-sparse\t" << m1.nonZeros()/(float(m1.rows())*float(m1.cols()))*100 << "% * " - << m2.nonZeros()/(float(m2.rows())*float(m2.cols()))*100 << "%\n"; - -// timer.reset(); -// timer.start(); - BENCH(for (int k=0; k -#include -#include -#include - -#ifndef SIZE -#define SIZE 10000 -#endif - -#ifndef DENSITY -#define DENSITY 0.01 -#endif - -#ifndef REPEAT -#define REPEAT 1 -#endif - -#include "BenchSparseUtil.h" - -#ifndef MINDENSITY -#define MINDENSITY 0.0004 -#endif - -#ifndef NBTRIES -#define NBTRIES 10 -#endif - -#define BENCH(X) \ - timer.reset(); \ - for (int _j=0; _j -void dostuff(const char* name, EigenSparseMatrix& sm1) -{ - int rows = sm1.rows(); - int cols = sm1.cols(); - sm1.setZero(); - BenchTimer t; - SetterType* set1 = new SetterType(sm1); - t.reset(); t.start(); - for (int k=0; k(0,rows-1),internal::random(0,cols-1)) += 1; - t.stop(); - std::cout << "std::map => \t" << t.value()-rtime - << " nnz=" << set1->nonZeros() << std::flush; - - // getchar(); - - t.reset(); t.start(); delete set1; t.stop(); - std::cout << " back: \t" << t.value() << "\n"; -} - -int main(int argc, char *argv[]) -{ - int rows = SIZE; - int cols = SIZE; - float density = DENSITY; - - EigenSparseMatrix sm1(rows,cols), sm2(rows,cols); - - - nentries = rows*cols*density; - std::cout << "n = " << nentries << "\n"; - int dummy; - BenchTimer t; - - t.reset(); t.start(); - for (int k=0; k(0,rows-1) + internal::random(0,cols-1); - t.stop(); - rtime = t.value(); - std::cout << "rtime = " << rtime << " (" << dummy << ")\n\n"; - const int Bits = 6; - for (;;) - { - dostuff >("std::map ", sm1); - dostuff >("gnu::hash_map", sm1); - dostuff >("google::dense", sm1); - dostuff >("google::sparse", sm1); - -// { -// RandomSetter set1(sm1); -// t.reset(); t.start(); -// for (int k=0; k(0,rows-1),internal::random(0,cols-1)) += 1; -// t.stop(); -// std::cout << "gnu::hash_map => \t" << t.value()-rtime -// << " nnz=" << set1.nonZeros() << "\n";getchar(); -// } -// { -// RandomSetter set1(sm1); -// t.reset(); t.start(); -// for (int k=0; k(0,rows-1),internal::random(0,cols-1)) += 1; -// t.stop(); -// std::cout << "google::dense => \t" << t.value()-rtime -// << " nnz=" << set1.nonZeros() << "\n";getchar(); -// } -// { -// RandomSetter set1(sm1); -// t.reset(); t.start(); -// for (int k=0; k(0,rows-1),internal::random(0,cols-1)) += 1; -// t.stop(); -// std::cout << "google::sparse => \t" << t.value()-rtime -// << " nnz=" << set1.nonZeros() << "\n";getchar(); -// } - std::cout << "\n\n"; - } - - return 0; -} - diff --git a/eigen/bench/sparse_setter.cpp b/eigen/bench/sparse_setter.cpp deleted file mode 100644 index a9f0b11..0000000 --- a/eigen/bench/sparse_setter.cpp +++ /dev/null @@ -1,485 +0,0 @@ - -//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.005 -DSIZE=10000 && ./a.out -//g++ -O3 -g0 -DNDEBUG sparse_product.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.05 -DSIZE=2000 && ./a.out -// -DNOGMM -DNOMTL -DCSPARSE -// -I /home/gael/Coding/LinearAlgebra/CSparse/Include/ /home/gael/Coding/LinearAlgebra/CSparse/Lib/libcsparse.a -#ifndef SIZE -#define SIZE 100000 -#endif - -#ifndef NBPERROW -#define NBPERROW 24 -#endif - -#ifndef REPEAT -#define REPEAT 2 -#endif - -#ifndef NBTRIES -#define NBTRIES 2 -#endif - -#ifndef KK -#define KK 10 -#endif - -#ifndef NOGOOGLE -#define EIGEN_GOOGLEHASH_SUPPORT -#include -#endif - -#include "BenchSparseUtil.h" - -#define CHECK_MEM -// #define CHECK_MEM std/**/::cout << "check mem\n"; getchar(); - -#define BENCH(X) \ - timer.reset(); \ - for (int _j=0; _j Coordinates; -typedef std::vector Values; - -EIGEN_DONT_INLINE Scalar* setinnerrand_eigen(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_eigen_dynamic(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_eigen_compact(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_eigen_sumeq(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_eigen_gnu_hash(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_eigen_google_dense(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_eigen_google_sparse(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_scipy(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_ublas_mapped(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_ublas_coord(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_ublas_compressed(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_ublas_genvec(const Coordinates& coords, const Values& vals); -EIGEN_DONT_INLINE Scalar* setrand_mtl(const Coordinates& coords, const Values& vals); - -int main(int argc, char *argv[]) -{ - int rows = SIZE; - int cols = SIZE; - bool fullyrand = true; - - BenchTimer timer; - Coordinates coords; - Values values; - if(fullyrand) - { - Coordinates pool; - pool.reserve(cols*NBPERROW); - std::cerr << "fill pool" << "\n"; - for (int i=0; i stencil(SIZE,SIZE); - Vector2i ij(internal::random(0,rows-1),internal::random(0,cols-1)); -// if(stencil.coeffRef(ij.x(), ij.y())==0) - { -// stencil.coeffRef(ij.x(), ij.y()) = 1; - pool.push_back(ij); - - } - ++i; - } - std::cerr << "pool ok" << "\n"; - int n = cols*NBPERROW*KK; - coords.reserve(n); - values.reserve(n); - for (int i=0; i(0,pool.size()); - coords.push_back(pool[i]); - values.push_back(internal::random()); - } - } - else - { - for (int j=0; j(0,rows-1),j)); - values.push_back(internal::random()); - } - } - std::cout << "nnz = " << coords.size() << "\n"; - CHECK_MEM - - // dense matrices - #ifdef DENSEMATRIX - { - BENCH(setrand_eigen_dense(coords,values);) - std::cout << "Eigen Dense\t" << timer.value() << "\n"; - } - #endif - - // eigen sparse matrices -// if (!fullyrand) -// { -// BENCH(setinnerrand_eigen(coords,values);) -// std::cout << "Eigen fillrand\t" << timer.value() << "\n"; -// } - { - BENCH(setrand_eigen_dynamic(coords,values);) - std::cout << "Eigen dynamic\t" << timer.value() << "\n"; - } -// { -// BENCH(setrand_eigen_compact(coords,values);) -// std::cout << "Eigen compact\t" << timer.value() << "\n"; -// } - { - BENCH(setrand_eigen_sumeq(coords,values);) - std::cout << "Eigen sumeq\t" << timer.value() << "\n"; - } - { -// BENCH(setrand_eigen_gnu_hash(coords,values);) -// std::cout << "Eigen std::map\t" << timer.value() << "\n"; - } - { - BENCH(setrand_scipy(coords,values);) - std::cout << "scipy\t" << timer.value() << "\n"; - } - #ifndef NOGOOGLE - { - BENCH(setrand_eigen_google_dense(coords,values);) - std::cout << "Eigen google dense\t" << timer.value() << "\n"; - } - { - BENCH(setrand_eigen_google_sparse(coords,values);) - std::cout << "Eigen google sparse\t" << timer.value() << "\n"; - } - #endif - - #ifndef NOUBLAS - { -// BENCH(setrand_ublas_mapped(coords,values);) -// std::cout << "ublas mapped\t" << timer.value() << "\n"; - } - { - BENCH(setrand_ublas_genvec(coords,values);) - std::cout << "ublas vecofvec\t" << timer.value() << "\n"; - } - /*{ - timer.reset(); - timer.start(); - for (int k=0; k mat(SIZE,SIZE); - //mat.startFill(2000000/*coords.size()*/); - for (int i=0; i mat(SIZE,SIZE); - mat.reserve(coords.size()/10); - for (int i=0; i mat(SIZE,SIZE); - for (int j=0; j aux(SIZE,SIZE); - mat.reserve(n); - for (int i=j*n; i<(j+1)*n; ++i) - { - aux.insert(coords[i].x(), coords[i].y()) += vals[i]; - } - aux.finalize(); - mat += aux; - } - return &mat.coeffRef(coords[0].x(), coords[0].y()); -} - -EIGEN_DONT_INLINE Scalar* setrand_eigen_compact(const Coordinates& coords, const Values& vals) -{ - using namespace Eigen; - DynamicSparseMatrix setter(SIZE,SIZE); - setter.reserve(coords.size()/10); - for (int i=0; i mat = setter; - CHECK_MEM; - return &mat.coeffRef(coords[0].x(), coords[0].y()); -} - -EIGEN_DONT_INLINE Scalar* setrand_eigen_gnu_hash(const Coordinates& coords, const Values& vals) -{ - using namespace Eigen; - SparseMatrix mat(SIZE,SIZE); - { - RandomSetter, StdMapTraits > setter(mat); - for (int i=0; i mat(SIZE,SIZE); - { - RandomSetter, GoogleDenseHashMapTraits> setter(mat); - for (int i=0; i mat(SIZE,SIZE); - { - RandomSetter, GoogleSparseHashMapTraits> setter(mat); - for (int i=0; i -void coo_tocsr(const int n_row, - const int n_col, - const int nnz, - const Coordinates Aij, - const Values Ax, - int Bp[], - int Bj[], - T Bx[]) -{ - //compute number of non-zero entries per row of A coo_tocsr - std::fill(Bp, Bp + n_row, 0); - - for (int n = 0; n < nnz; n++){ - Bp[Aij[n].x()]++; - } - - //cumsum the nnz per row to get Bp[] - for(int i = 0, cumsum = 0; i < n_row; i++){ - int temp = Bp[i]; - Bp[i] = cumsum; - cumsum += temp; - } - Bp[n_row] = nnz; - - //write Aj,Ax into Bj,Bx - for(int n = 0; n < nnz; n++){ - int row = Aij[n].x(); - int dest = Bp[row]; - - Bj[dest] = Aij[n].y(); - Bx[dest] = Ax[n]; - - Bp[row]++; - } - - for(int i = 0, last = 0; i <= n_row; i++){ - int temp = Bp[i]; - Bp[i] = last; - last = temp; - } - - //now Bp,Bj,Bx form a CSR representation (with possible duplicates) -} - -template< class T1, class T2 > -bool kv_pair_less(const std::pair& x, const std::pair& y){ - return x.first < y.first; -} - - -template -void csr_sort_indices(const I n_row, - const I Ap[], - I Aj[], - T Ax[]) -{ - std::vector< std::pair > temp; - - for(I i = 0; i < n_row; i++){ - I row_start = Ap[i]; - I row_end = Ap[i+1]; - - temp.clear(); - - for(I jj = row_start; jj < row_end; jj++){ - temp.push_back(std::make_pair(Aj[jj],Ax[jj])); - } - - std::sort(temp.begin(),temp.end(),kv_pair_less); - - for(I jj = row_start, n = 0; jj < row_end; jj++, n++){ - Aj[jj] = temp[n].first; - Ax[jj] = temp[n].second; - } - } -} - -template -void csr_sum_duplicates(const I n_row, - const I n_col, - I Ap[], - I Aj[], - T Ax[]) -{ - I nnz = 0; - I row_end = 0; - for(I i = 0; i < n_row; i++){ - I jj = row_end; - row_end = Ap[i+1]; - while( jj < row_end ){ - I j = Aj[jj]; - T x = Ax[jj]; - jj++; - while( jj < row_end && Aj[jj] == j ){ - x += Ax[jj]; - jj++; - } - Aj[nnz] = j; - Ax[nnz] = x; - nnz++; - } - Ap[i+1] = nnz; - } -} - -EIGEN_DONT_INLINE Scalar* setrand_scipy(const Coordinates& coords, const Values& vals) -{ - using namespace Eigen; - SparseMatrix mat(SIZE,SIZE); - mat.resizeNonZeros(coords.size()); -// std::cerr << "setrand_scipy...\n"; - coo_tocsr(SIZE,SIZE, coords.size(), coords, vals, mat._outerIndexPtr(), mat._innerIndexPtr(), mat._valuePtr()); -// std::cerr << "coo_tocsr ok\n"; - - csr_sort_indices(SIZE, mat._outerIndexPtr(), mat._innerIndexPtr(), mat._valuePtr()); - - csr_sum_duplicates(SIZE, SIZE, mat._outerIndexPtr(), mat._innerIndexPtr(), mat._valuePtr()); - - mat.resizeNonZeros(mat._outerIndexPtr()[SIZE]); - - return &mat.coeffRef(coords[0].x(), coords[0].y()); -} - - -#ifndef NOUBLAS -EIGEN_DONT_INLINE Scalar* setrand_ublas_mapped(const Coordinates& coords, const Values& vals) -{ - using namespace boost; - using namespace boost::numeric; - using namespace boost::numeric::ublas; - mapped_matrix aux(SIZE,SIZE); - for (int i=0; i mat(aux); - return 0;// &mat(coords[0].x(), coords[0].y()); -} -/*EIGEN_DONT_INLINE Scalar* setrand_ublas_coord(const Coordinates& coords, const Values& vals) -{ - using namespace boost; - using namespace boost::numeric; - using namespace boost::numeric::ublas; - coordinate_matrix aux(SIZE,SIZE); - for (int i=0; i mat(aux); - return 0;//&mat(coords[0].x(), coords[0].y()); -} -EIGEN_DONT_INLINE Scalar* setrand_ublas_compressed(const Coordinates& coords, const Values& vals) -{ - using namespace boost; - using namespace boost::numeric; - using namespace boost::numeric::ublas; - compressed_matrix mat(SIZE,SIZE); - for (int i=0; i > foo; - generalized_vector_of_vector > > aux(SIZE,SIZE); - for (int i=0; i mat(aux); - return 0;//&mat(coords[0].x(), coords[0].y()); -} -#endif - -#ifndef NOMTL -EIGEN_DONT_INLINE void setrand_mtl(const Coordinates& coords, const Values& vals); -#endif - diff --git a/eigen/bench/sparse_transpose.cpp b/eigen/bench/sparse_transpose.cpp deleted file mode 100644 index c9aacf5..0000000 --- a/eigen/bench/sparse_transpose.cpp +++ /dev/null @@ -1,104 +0,0 @@ - -//g++ -O3 -g0 -DNDEBUG sparse_transpose.cpp -I.. -I/home/gael/Coding/LinearAlgebra/mtl4/ -DDENSITY=0.005 -DSIZE=10000 && ./a.out -// -DNOGMM -DNOMTL -// -DCSPARSE -I /home/gael/Coding/LinearAlgebra/CSparse/Include/ /home/gael/Coding/LinearAlgebra/CSparse/Lib/libcsparse.a - -#ifndef SIZE -#define SIZE 10000 -#endif - -#ifndef DENSITY -#define DENSITY 0.01 -#endif - -#ifndef REPEAT -#define REPEAT 1 -#endif - -#include "BenchSparseUtil.h" - -#ifndef MINDENSITY -#define MINDENSITY 0.0004 -#endif - -#ifndef NBTRIES -#define NBTRIES 10 -#endif - -#define BENCH(X) \ - timer.reset(); \ - for (int _j=0; _j=MINDENSITY; density*=0.5) - { - fillMatrix(density, rows, cols, sm1); - - // dense matrices - #ifdef DENSEMATRIX - { - DenseMatrix m1(rows,cols), m3(rows,cols); - eiToDense(sm1, m1); - BENCH(for (int k=0; k EigenSparseTriMatrix; -typedef SparseMatrix EigenSparseTriMatrixRow; - -void fillMatrix(float density, int rows, int cols, EigenSparseTriMatrix& dst) -{ - dst.startFill(rows*cols*density); - for(int j = 0; j < cols; j++) - { - for(int i = 0; i < j; i++) - { - Scalar v = (internal::random(0,1) < density) ? internal::random() : 0; - if (v!=0) - dst.fill(i,j) = v; - } - dst.fill(j,j) = internal::random(); - } - dst.endFill(); -} - -int main(int argc, char *argv[]) -{ - int rows = SIZE; - int cols = SIZE; - float density = DENSITY; - BenchTimer timer; - #if 1 - EigenSparseTriMatrix sm1(rows,cols); - typedef Matrix DenseVector; - DenseVector b = DenseVector::Random(cols); - DenseVector x = DenseVector::Random(cols); - - bool densedone = false; - - for (float density = DENSITY; density>=MINDENSITY; density*=0.5) - { - EigenSparseTriMatrix sm1(rows, cols); - fillMatrix(density, rows, cols, sm1); - - // dense matrices - #ifdef DENSEMATRIX - if (!densedone) - { - densedone = true; - std::cout << "Eigen Dense\t" << density*100 << "%\n"; - DenseMatrix m1(rows,cols); - Matrix m2(rows,cols); - eiToDense(sm1, m1); - m2 = m1; - - BENCH(x = m1.marked().solveTriangular(b);) - std::cout << " colmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << x.transpose() << "\n"; - - BENCH(x = m2.marked().solveTriangular(b);) - std::cout << " rowmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << x.transpose() << "\n"; - } - #endif - - // eigen sparse matrices - { - std::cout << "Eigen sparse\t" << density*100 << "%\n"; - EigenSparseTriMatrixRow sm2 = sm1; - - BENCH(x = sm1.solveTriangular(b);) - std::cout << " colmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << x.transpose() << "\n"; - - BENCH(x = sm2.solveTriangular(b);) - std::cout << " rowmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << x.transpose() << "\n"; - -// x = b; -// BENCH(sm1.inverseProductInPlace(x);) -// std::cout << " colmajor^-1 * b:\t" << timer.value() << " (inplace)" << endl; -// std::cerr << x.transpose() << "\n"; -// -// x = b; -// BENCH(sm2.inverseProductInPlace(x);) -// std::cout << " rowmajor^-1 * b:\t" << timer.value() << " (inplace)" << endl; -// std::cerr << x.transpose() << "\n"; - } - - - - // CSparse - #ifdef CSPARSE - { - std::cout << "CSparse \t" << density*100 << "%\n"; - cs *m1; - eiToCSparse(sm1, m1); - - BENCH(x = b; if (!cs_lsolve (m1, x.data())){std::cerr << "cs_lsolve failed\n"; break;}; ) - std::cout << " colmajor^-1 * b:\t" << timer.value() << endl; - } - #endif - - // GMM++ - #ifndef NOGMM - { - std::cout << "GMM++ sparse\t" << density*100 << "%\n"; - GmmSparse m1(rows,cols); - gmm::csr_matrix m2; - eiToGmm(sm1, m1); - gmm::copy(m1,m2); - std::vector gmmX(cols), gmmB(cols); - Map >(&gmmX[0], cols) = x; - Map >(&gmmB[0], cols) = b; - - gmmX = gmmB; - BENCH(gmm::upper_tri_solve(m1, gmmX, false);) - std::cout << " colmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << Map >(&gmmX[0], cols).transpose() << "\n"; - - gmmX = gmmB; - BENCH(gmm::upper_tri_solve(m2, gmmX, false);) - timer.stop(); - std::cout << " rowmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << Map >(&gmmX[0], cols).transpose() << "\n"; - } - #endif - - // MTL4 - #ifndef NOMTL - { - std::cout << "MTL4\t" << density*100 << "%\n"; - MtlSparse m1(rows,cols); - MtlSparseRowMajor m2(rows,cols); - eiToMtl(sm1, m1); - m2 = m1; - mtl::dense_vector x(rows, 1.0); - mtl::dense_vector b(rows, 1.0); - - BENCH(x = mtl::upper_trisolve(m1,b);) - std::cout << " colmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << x << "\n"; - - BENCH(x = mtl::upper_trisolve(m2,b);) - std::cout << " rowmajor^-1 * b:\t" << timer.value() << endl; -// std::cerr << x << "\n"; - } - #endif - - - std::cout << "\n\n"; - } - #endif - - #if 0 - // bench small matrices (in-place versus return bye value) - { - timer.reset(); - for (int _j=0; _j<10; ++_j) { - Matrix4f m = Matrix4f::Random(); - Vector4f b = Vector4f::Random(); - Vector4f x = Vector4f::Random(); - timer.start(); - for (int _k=0; _k<1000000; ++_k) { - b = m.inverseProduct(b); - } - timer.stop(); - } - std::cout << "4x4 :\t" << timer.value() << endl; - } - - { - timer.reset(); - for (int _j=0; _j<10; ++_j) { - Matrix4f m = Matrix4f::Random(); - Vector4f b = Vector4f::Random(); - Vector4f x = Vector4f::Random(); - timer.start(); - for (int _k=0; _k<1000000; ++_k) { - m.inverseProductInPlace(x); - } - timer.stop(); - } - std::cout << "4x4 IP :\t" << timer.value() << endl; - } - #endif - - return 0; -} - diff --git a/eigen/bench/spbench/CMakeLists.txt b/eigen/bench/spbench/CMakeLists.txt deleted file mode 100644 index 029ba6d..0000000 --- a/eigen/bench/spbench/CMakeLists.txt +++ /dev/null @@ -1,85 +0,0 @@ - - -set(BLAS_FOUND TRUE) -set(LAPACK_FOUND TRUE) -set(BLAS_LIBRARIES eigen_blas_static) -set(LAPACK_LIBRARIES eigen_lapack_static) - -set(SPARSE_LIBS "") - -# find_library(PARDISO_LIBRARIES pardiso412-GNU450-X86-64) -# if(PARDISO_LIBRARIES) -# add_definitions("-DEIGEN_PARDISO_SUPPORT") -# set(SPARSE_LIBS ${SPARSE_LIBS} ${PARDISO_LIBRARIES}) -# endif(PARDISO_LIBRARIES) - -find_package(Cholmod) -if(CHOLMOD_FOUND AND BLAS_FOUND AND LAPACK_FOUND) - add_definitions("-DEIGEN_CHOLMOD_SUPPORT") - include_directories(${CHOLMOD_INCLUDES}) - set(SPARSE_LIBS ${SPARSE_LIBS} ${CHOLMOD_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) - set(CHOLMOD_ALL_LIBS ${CHOLMOD_LIBRARIES} ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}) -endif() - -find_package(Umfpack) -if(UMFPACK_FOUND AND BLAS_FOUND) - add_definitions("-DEIGEN_UMFPACK_SUPPORT") - include_directories(${UMFPACK_INCLUDES}) - set(SPARSE_LIBS ${SPARSE_LIBS} ${UMFPACK_LIBRARIES} ${BLAS_LIBRARIES}) - set(UMFPACK_ALL_LIBS ${UMFPACK_LIBRARIES} ${BLAS_LIBRARIES}) -endif() - -find_package(SuperLU 4.0) -if(SUPERLU_FOUND AND BLAS_FOUND) - add_definitions("-DEIGEN_SUPERLU_SUPPORT") - include_directories(${SUPERLU_INCLUDES}) - set(SPARSE_LIBS ${SPARSE_LIBS} ${SUPERLU_LIBRARIES} ${BLAS_LIBRARIES}) - set(SUPERLU_ALL_LIBS ${SUPERLU_LIBRARIES} ${BLAS_LIBRARIES}) -endif() - - -find_package(PASTIX QUIET COMPONENTS METIS SCOTCH) -# check that the PASTIX found is a version without MPI -find_path(PASTIX_pastix_nompi.h_INCLUDE_DIRS - NAMES pastix_nompi.h - HINTS ${PASTIX_INCLUDE_DIRS} -) -if (NOT PASTIX_pastix_nompi.h_INCLUDE_DIRS) - message(STATUS "A version of Pastix has been found but pastix_nompi.h does not exist in the include directory." - " Because Eigen tests require a version without MPI, we disable the Pastix backend.") -endif() -if(PASTIX_FOUND AND PASTIX_pastix_nompi.h_INCLUDE_DIRS AND BLAS_FOUND) - add_definitions("-DEIGEN_PASTIX_SUPPORT") - include_directories(${PASTIX_INCLUDE_DIRS_DEP}) - if(SCOTCH_FOUND) - include_directories(${SCOTCH_INCLUDE_DIRS}) - set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${SCOTCH_LIBRARIES}) - elseif(METIS_FOUND) - include_directories(${METIS_INCLUDE_DIRS}) - set(PASTIX_LIBRARIES ${PASTIX_LIBRARIES} ${METIS_LIBRARIES}) - endif(SCOTCH_FOUND) - set(SPARSE_LIBS ${SPARSE_LIBS} ${PASTIX_LIBRARIES_DEP} ${ORDERING_LIBRARIES}) - set(PASTIX_ALL_LIBS ${PASTIX_LIBRARIES_DEP}) -endif() - -if(METIS_FOUND) - include_directories(${METIS_INCLUDE_DIRS}) - set (SPARSE_LIBS ${SPARSE_LIBS} ${METIS_LIBRARIES}) - add_definitions("-DEIGEN_METIS_SUPPORT") -endif(METIS_FOUND) - -find_library(RT_LIBRARY rt) -if(RT_LIBRARY) - set(SPARSE_LIBS ${SPARSE_LIBS} ${RT_LIBRARY}) -endif(RT_LIBRARY) - -add_executable(spbenchsolver spbenchsolver.cpp) -target_link_libraries (spbenchsolver ${SPARSE_LIBS}) - -add_executable(spsolver sp_solver.cpp) -target_link_libraries (spsolver ${SPARSE_LIBS}) - - -add_executable(test_sparseLU test_sparseLU.cpp) -target_link_libraries (test_sparseLU ${SPARSE_LIBS}) - diff --git a/eigen/bench/spbench/sp_solver.cpp b/eigen/bench/spbench/sp_solver.cpp deleted file mode 100644 index a1f4bac..0000000 --- a/eigen/bench/spbench/sp_solver.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// Small bench routine for Eigen available in Eigen -// (C) Desire NUENTSA WAKAM, INRIA - -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -// #include -#include -#include -using namespace std; -using namespace Eigen; - -int main(int argc, char **args) -{ - SparseMatrix A; - typedef SparseMatrix::Index Index; - typedef Matrix DenseMatrix; - typedef Matrix DenseRhs; - VectorXd b, x, tmp; - BenchTimer timer,totaltime; - //SparseLU > solver; -// SuperLU > solver; - ConjugateGradient, Lower,IncompleteCholesky > solver; - ifstream matrix_file; - string line; - int n; - // Set parameters -// solver.iparm(IPARM_THREAD_NBR) = 4; - /* Fill the matrix with sparse matrix stored in Matrix-Market coordinate column-oriented format */ - if (argc < 2) assert(false && "please, give the matrix market file "); - - timer.start(); - totaltime.start(); - loadMarket(A, args[1]); - cout << "End charging matrix " << endl; - bool iscomplex=false, isvector=false; - int sym; - getMarketHeader(args[1], sym, iscomplex, isvector); - if (iscomplex) { cout<< " Not for complex matrices \n"; return -1; } - if (isvector) { cout << "The provided file is not a matrix file\n"; return -1;} - if (sym != 0) { // symmetric matrices, only the lower part is stored - SparseMatrix temp; - temp = A; - A = temp.selfadjointView(); - } - timer.stop(); - - n = A.cols(); - // ====== TESTS FOR SPARSE TUTORIAL ====== -// cout<< "OuterSize " << A.outerSize() << " inner " << A.innerSize() << endl; -// SparseMatrix mat1(A); -// SparseMatrix mat2; -// cout << " norm of A " << mat1.norm() << endl; ; -// PermutationMatrix perm(n); -// perm.resize(n,1); -// perm.indices().setLinSpaced(n, 0, n-1); -// mat2 = perm * mat1; -// mat.subrows(); -// mat2.resize(n,n); -// mat2.reserve(10); -// mat2.setConstant(); -// std::cout<< "NORM " << mat1.squaredNorm()<< endl; - - cout<< "Time to load the matrix " << timer.value() < 2) - loadMarketVector(b, args[2]); - else - { - b.resize(n); - tmp.resize(n); -// tmp.setRandom(); - for (int i = 0; i < n; i++) tmp(i) = i; - b = A * tmp ; - } -// Scaling > scal; -// scal.computeRef(A); -// b = scal.LeftScaling().cwiseProduct(b); - - /* Compute the factorization */ - cout<< "Starting the factorization "<< endl; - timer.reset(); - timer.start(); - cout<< "Size of Input Matrix "<< b.size()<<"\n\n"; - cout<< "Rows and columns "<< A.rows() <<" " < - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/eigen/bench/spbench/spbenchsolver.cpp b/eigen/bench/spbench/spbenchsolver.cpp deleted file mode 100644 index 4acd003..0000000 --- a/eigen/bench/spbench/spbenchsolver.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include - -void bench_printhelp() -{ - cout<< " \nbenchsolver : performs a benchmark of all the solvers available in Eigen \n\n"; - cout<< " MATRIX FOLDER : \n"; - cout<< " The matrices for the benchmark should be collected in a folder specified with an environment variable EIGEN_MATRIXDIR \n"; - cout<< " The matrices are stored using the matrix market coordinate format \n"; - cout<< " The matrix and associated right-hand side (rhs) files are named respectively \n"; - cout<< " as MatrixName.mtx and MatrixName_b.mtx. If the rhs does not exist, a random one is generated. \n"; - cout<< " If a matrix is SPD, the matrix should be named as MatrixName_SPD.mtx \n"; - cout<< " If a true solution exists, it should be named as MatrixName_x.mtx; \n" ; - cout<< " it will be used to compute the norm of the error relative to the computed solutions\n\n"; - cout<< " OPTIONS : \n"; - cout<< " -h or --help \n print this help and return\n\n"; - cout<< " -d matrixdir \n Use matrixdir as the matrix folder instead of the one specified in the environment variable EIGEN_MATRIXDIR\n\n"; - cout<< " -o outputfile.xml \n Output the statistics to a xml file \n\n"; - cout<< " --eps Sets the relative tolerance for iterative solvers (default 1e-08) \n\n"; - cout<< " --maxits Sets the maximum number of iterations (default 1000) \n\n"; - -} -int main(int argc, char ** args) -{ - - bool help = ( get_options(argc, args, "-h") || get_options(argc, args, "--help") ); - if(help) { - bench_printhelp(); - return 0; - } - - // Get the location of the test matrices - string matrix_dir; - if (!get_options(argc, args, "-d", &matrix_dir)) - { - if(getenv("EIGEN_MATRIXDIR") == NULL){ - std::cerr << "Please, specify the location of the matrices with -d mat_folder or the environment variable EIGEN_MATRIXDIR \n"; - std::cerr << " Run with --help to see the list of all the available options \n"; - return -1; - } - matrix_dir = getenv("EIGEN_MATRIXDIR"); - } - - std::ofstream statbuf; - string statFile ; - - // Get the file to write the statistics - bool statFileExists = get_options(argc, args, "-o", &statFile); - if(statFileExists) - { - statbuf.open(statFile.c_str(), std::ios::out); - if(statbuf.good()){ - statFileExists = true; - printStatheader(statbuf); - statbuf.close(); - } - else - std::cerr << "Unable to open the provided file for writting... \n"; - } - - // Get the maximum number of iterations and the tolerance - int maxiters = 1000; - double tol = 1e-08; - string inval; - if (get_options(argc, args, "--eps", &inval)) - tol = atof(inval.c_str()); - if(get_options(argc, args, "--maxits", &inval)) - maxiters = atoi(inval.c_str()); - - string current_dir; - // Test the real-arithmetics matrices - Browse_Matrices(matrix_dir, statFileExists, statFile,maxiters, tol); - - // Test the complex-arithmetics matrices - Browse_Matrices >(matrix_dir, statFileExists, statFile, maxiters, tol); - - if(statFileExists) - { - statbuf.open(statFile.c_str(), std::ios::app); - statbuf << " \n"; - cout << "\n Output written in " << statFile << " ...\n"; - statbuf.close(); - } - - return 0; -} - - diff --git a/eigen/bench/spbench/spbenchsolver.h b/eigen/bench/spbench/spbenchsolver.h deleted file mode 100644 index 19c719c..0000000 --- a/eigen/bench/spbench/spbenchsolver.h +++ /dev/null @@ -1,554 +0,0 @@ -// This file is part of Eigen, a lightweight C++ template library -// for linear algebra. -// -// Copyright (C) 2012 Désiré Nuentsa-Wakam -// -// This Source Code Form is subject to the terms of the Mozilla -// Public License v. 2.0. If a copy of the MPL was not distributed -// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "spbenchstyle.h" - -#ifdef EIGEN_METIS_SUPPORT -#include -#endif - -#ifdef EIGEN_CHOLMOD_SUPPORT -#include -#endif - -#ifdef EIGEN_UMFPACK_SUPPORT -#include -#endif - -#ifdef EIGEN_PARDISO_SUPPORT -#include -#endif - -#ifdef EIGEN_SUPERLU_SUPPORT -#include -#endif - -#ifdef EIGEN_PASTIX_SUPPORT -#include -#endif - -// CONSTANTS -#define EIGEN_UMFPACK 10 -#define EIGEN_SUPERLU 20 -#define EIGEN_PASTIX 30 -#define EIGEN_PARDISO 40 -#define EIGEN_SPARSELU_COLAMD 50 -#define EIGEN_SPARSELU_METIS 51 -#define EIGEN_BICGSTAB 60 -#define EIGEN_BICGSTAB_ILUT 61 -#define EIGEN_GMRES 70 -#define EIGEN_GMRES_ILUT 71 -#define EIGEN_SIMPLICIAL_LDLT 80 -#define EIGEN_CHOLMOD_LDLT 90 -#define EIGEN_PASTIX_LDLT 100 -#define EIGEN_PARDISO_LDLT 110 -#define EIGEN_SIMPLICIAL_LLT 120 -#define EIGEN_CHOLMOD_SUPERNODAL_LLT 130 -#define EIGEN_CHOLMOD_SIMPLICIAL_LLT 140 -#define EIGEN_PASTIX_LLT 150 -#define EIGEN_PARDISO_LLT 160 -#define EIGEN_CG 170 -#define EIGEN_CG_PRECOND 180 - -using namespace Eigen; -using namespace std; - - -// Global variables for input parameters -int MaximumIters; // Maximum number of iterations -double RelErr; // Relative error of the computed solution -double best_time_val; // Current best time overall solvers -int best_time_id; // id of the best solver for the current system - -template inline typename NumTraits::Real test_precision() { return NumTraits::dummy_precision(); } -template<> inline float test_precision() { return 1e-3f; } -template<> inline double test_precision() { return 1e-6; } -template<> inline float test_precision >() { return test_precision(); } -template<> inline double test_precision >() { return test_precision(); } - -void printStatheader(std::ofstream& out) -{ - // Print XML header - // NOTE It would have been much easier to write these XML documents using external libraries like tinyXML or Xerces-C++. - - out << " \n"; - out << " \n"; - out << "\n]>"; - out << "\n\n\n"; - - out << "\n \n" ; //root XML element - // Print the xsl style section - printBenchStyle(out); - // List all available solvers - out << " \n"; -#ifdef EIGEN_UMFPACK_SUPPORT - out <<" \n"; - out << " LU \n"; - out << " UMFPACK \n"; - out << " \n"; -#endif -#ifdef EIGEN_SUPERLU_SUPPORT - out <<" \n"; - out << " LU \n"; - out << " SUPERLU \n"; - out << " \n"; -#endif -#ifdef EIGEN_CHOLMOD_SUPPORT - out <<" \n"; - out << " LLT SP \n"; - out << " CHOLMOD \n"; - out << " \n"; - - out <<" \n"; - out << " LLT \n"; - out << " CHOLMOD \n"; - out << " \n"; - - out <<" \n"; - out << " LDLT \n"; - out << " CHOLMOD \n"; - out << " \n"; -#endif -#ifdef EIGEN_PARDISO_SUPPORT - out <<" \n"; - out << " LU \n"; - out << " PARDISO \n"; - out << " \n"; - - out <<" \n"; - out << " LLT \n"; - out << " PARDISO \n"; - out << " \n"; - - out <<" \n"; - out << " LDLT \n"; - out << " PARDISO \n"; - out << " \n"; -#endif -#ifdef EIGEN_PASTIX_SUPPORT - out <<" \n"; - out << " LU \n"; - out << " PASTIX \n"; - out << " \n"; - - out <<" \n"; - out << " LLT \n"; - out << " PASTIX \n"; - out << " \n"; - - out <<" \n"; - out << " LDLT \n"; - out << " PASTIX \n"; - out << " \n"; -#endif - - out <<" \n"; - out << " BICGSTAB \n"; - out << " EIGEN \n"; - out << " \n"; - - out <<" \n"; - out << " BICGSTAB_ILUT \n"; - out << " EIGEN \n"; - out << " \n"; - - out <<" \n"; - out << " GMRES_ILUT \n"; - out << " EIGEN \n"; - out << " \n"; - - out <<" \n"; - out << " LDLT \n"; - out << " EIGEN \n"; - out << " \n"; - - out <<" \n"; - out << " LLT \n"; - out << " EIGEN \n"; - out << " \n"; - - out <<" \n"; - out << " CG \n"; - out << " EIGEN \n"; - out << " \n"; - - out <<" \n"; - out << " LU_COLAMD \n"; - out << " EIGEN \n"; - out << " \n"; - -#ifdef EIGEN_METIS_SUPPORT - out <<" \n"; - out << " LU_METIS \n"; - out << " EIGEN \n"; - out << " \n"; -#endif - out << " \n"; - -} - - -template -void call_solver(Solver &solver, const int solver_id, const typename Solver::MatrixType& A, const Matrix& b, const Matrix& refX,std::ofstream& statbuf) -{ - - double total_time; - double compute_time; - double solve_time; - double rel_error; - Matrix x; - BenchTimer timer; - timer.reset(); - timer.start(); - solver.compute(A); - if (solver.info() != Success) - { - std::cerr << "Solver failed ... \n"; - return; - } - timer.stop(); - compute_time = timer.value(); - statbuf << "