commit 420ad001a1a9953d0a382603759d30b2bffd02f1
parent aa4909edda563601024eeb6fe0cef6ca0a0bfba6
Author: David Freifeld <freifeld.david@gmail.com>
Date: Wed, 5 Aug 2020 18:27:41 -0700
Mystery memory leak isnt in AVX
Diffstat:
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/utils.cpp b/src/utils.cpp
@@ -8,6 +8,7 @@
#include <iostream>
#include <fstream>
+#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cmath>
@@ -94,10 +95,13 @@ Eigen::MatrixXf avx_product(Eigen::MatrixXf a, Eigen::MatrixXf b)
#ifndef RECKLESS
assert(a.rows() == b.rows() && a.cols() == b.rows());
#endif
- float arr1[(((a.rows() * a.cols()) % 8) * 8) + 8];
- memcpy(arr1, a.data(), sizeof(float)*a.cols()*a.rows());
- float arr2[(((b.rows() * b.cols()) % 8) * 8) + 8];
- memcpy(arr1, b.data(), sizeof(float)*b.cols()*a.rows());
+ int size = ((a.rows() * a.cols()) + 7) & (-8);
+ float arr1[size];
+ //memcpy(arr1, a.data(), sizeof(float)*a.cols()*a.rows());
+ std::copy(a.data(), a.data()+(a.rows()*a.cols()), arr1);
+ float arr2[size];
+ std::copy(b.data(), b.data()+(b.rows()*b.cols()), arr2);
+ //memcpy(arr1, b.data(), sizeof(float)*b.cols()*a.rows());
for (int i = 0; i < (((a.rows() * a.cols()) % 8) * 8) + 8; i++) {
_mm256_store_ps(arr1, _mm256_mul_ps(_mm256_load_ps(arr1+i*8), _mm256_load_ps(arr2+i*8)));
}