update
This commit is contained in:
35
2025.10.11_time_test_of_openblas_eigen_numpy/a.cpp
Normal file
35
2025.10.11_time_test_of_openblas_eigen_numpy/a.cpp
Normal file
@@ -0,0 +1,35 @@
|
||||
#define EIGEN_USE_BLAS // 注释或取消注释来测试
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
#include <vector>
|
||||
#include <iomanip>
|
||||
#include <Eigen/Dense>
|
||||
|
||||
int main() {
|
||||
std::vector<int> sizes = {100, 200, 300, 500, 1000, 2000, 3000, 5000}; // 要测试的不同矩阵大小
|
||||
const int trials = 3; // 每个尺寸的测试次数
|
||||
|
||||
for (int size : sizes) {
|
||||
std::cout << "Testing size: " << size << "x" << size << std::endl;
|
||||
|
||||
Eigen::MatrixXd A = Eigen::MatrixXd::Random(size, size);
|
||||
A = A.transpose() * A + Eigen::MatrixXd::Identity(size, size); // 确保矩阵可逆
|
||||
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
|
||||
for (int i = 0; i < trials; ++i) {
|
||||
Eigen::MatrixXd A_inv = A.inverse();
|
||||
}
|
||||
|
||||
auto end = std::chrono::high_resolution_clock::now();
|
||||
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
|
||||
|
||||
std::cout << "Average time per inversion: "
|
||||
<< std::fixed << std::setprecision(3)
|
||||
<< (static_cast<double>(duration.count()) / 1000 / trials)
|
||||
<< " s" << std::endl;
|
||||
std::cout << "----------------------------------" << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
22
2025.10.11_time_test_of_openblas_eigen_numpy/a.py
Normal file
22
2025.10.11_time_test_of_openblas_eigen_numpy/a.py
Normal file
@@ -0,0 +1,22 @@
|
||||
import numpy as np
|
||||
import time
|
||||
|
||||
sizes = [100, 200, 300, 500, 1000, 2000, 3000, 5000]
|
||||
trials = 3
|
||||
|
||||
for size in sizes:
|
||||
print(f"Testing size: {size}x{size}")
|
||||
|
||||
A = np.random.rand(size, size)
|
||||
A = A.T @ A + np.eye(size)
|
||||
|
||||
start = time.time()
|
||||
|
||||
for _ in range(trials):
|
||||
A_inv = np.linalg.inv(A)
|
||||
|
||||
end = time.time()
|
||||
duration = end - start
|
||||
|
||||
print(f"Average time per inversion: {duration/trials:.3f} s")
|
||||
print("----------------------------------")
|
||||
Reference in New Issue
Block a user