jacobian

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 12e0a6fff7be7c5916ae861fe2b303fdb16870df
parent eb279d71b41c4b784abb25f49f33de62b5801ee0
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Wed,  1 Jul 2020 12:03:41 -0700

Compiles, but both are so slow test is not done

Diffstat:
Mtests/strassen.cpp | 28+++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/tests/strassen.cpp b/tests/strassen.cpp @@ -16,6 +16,8 @@ Eigen::MatrixXd strassen_mul(Eigen::MatrixXd a, Eigen::MatrixXd b) int block_len = 1250; Eigen::MatrixXd result (a.rows(), a.cols()); // Nigh unreadable code follows. + std::cout << "STRASSEN END INIT\n"; + Eigen::MatrixXd m1 = (a.block(0,0, block_len, block_len) + a.block(a.rows()-block_len,a.cols()-block_len, block_len, block_len)) * (b.block(0,0, block_len, block_len) + b.block(b.rows()-block_len,b.cols()-block_len, block_len, block_len)); Eigen::MatrixXd m2 = (a.block(a.rows()-block_len, 0, block_len, block_len) + a.block(a.rows()-block_len,a.cols()-block_len, block_len, block_len)) * (b.block(0,0, block_len, block_len)); Eigen::MatrixXd m3 = a.block(0,0, block_len, block_len) * (b.block(0,b.cols()-block_len, block_len, block_len) - b.block(b.rows()-block_len,b.cols()-block_len, block_len, block_len)); @@ -24,25 +26,33 @@ Eigen::MatrixXd strassen_mul(Eigen::MatrixXd a, Eigen::MatrixXd b) Eigen::MatrixXd m6 = (a.block(a.rows()-block_len,0, block_len, block_len) - a.block(0,0, block_len, block_len)) * (b.block(0,0, block_len, block_len) + b.block(0,b.cols()-block_len, block_len, block_len)); Eigen::MatrixXd m7 = (a.block(0,a.cols()-block_len, block_len, block_len) - a.block(a.rows()-block_len,a.cols()-block_len, block_len, block_len)) * (b.block(a.rows()-block_len,0, block_len, block_len) + b.block(b.rows()-block_len,b.cols()-block_len, block_len, block_len)); + std::cout << "STRASSEN END m\n"; + result.block(0,0, block_len, block_len) = m1 + m4 - m5 + m7; result.block(0,result.cols()-block_len, block_len, block_len) = m3 + m5; result.block(result.rows()-block_len,0, block_len, block_len) = m2 + m4; result.block(result.rows()-block_len,result.cols()-block_len, block_len, block_len) = m1 - m2 + m3 + m6; + + std::cout << "STRASSEN END CALC\n"; return result; } int main() { Eigen::MatrixXd a = Eigen::MatrixXd::Random(5000, 5000); - Eigen::MatrixXd b = Eigen::MatrixXd::Random(5000, 5000); + Eigen::MatrixXd b = Eigen::MatrixXd::Random(5000, 5000); - auto eigen_begin = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXd product = a * b; - auto eigen_end = std::chrono::high_resolution_clock::now(); + std::cout << "END INIT\n"; + + auto eigen_begin = std::chrono::high_resolution_clock::now(); + Eigen::MatrixXd product = a * b; + auto eigen_end = std::chrono::high_resolution_clock::now(); + + std::cout << "END EIGEN\n"; - auto strassen_begin = std::chrono::high_resolution_clock::now(); - Eigen::MatrixXd sproduct = strassen_mul(a, b); - auto strassen_end = std::chrono::high_resolution_clock::now(); - - std::cout << "EIGEN: " << std::chrono::duration_cast<std::chrono::nanoseconds>(eigen_end - eigen_begin) << " STRASSEN: " << std::chrono::duration_cast<std::chrono::nanoseconds>(strassen_end - strassen_begin); + auto strassen_begin = std::chrono::high_resolution_clock::now(); + Eigen::MatrixXd sproduct = strassen_mul(a, b); + auto strassen_end = std::chrono::high_resolution_clock::now(); + + std::cout << "EIGEN: " << std::chrono::duration_cast<std::chrono::nanoseconds>(eigen_end - eigen_begin).count() / pow(10,9) << " STRASSEN: " << std::chrono::duration_cast<std::chrono::nanoseconds>(strassen_end - strassen_begin).count() / pow(10,9); }