jacobian

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

commit 41eda53cdca66a7b7bc4fe607ceaf583a7813bd9
parent dd3ccf38152399b70af47457e51730f14dfe1d73
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Thu,  6 Aug 2020 19:53:34 -0700

Broken AVX functions are broken

Diffstat:
Msrc/bpnn.cpp | 2+-
Msrc/utils.cpp | 56+++++++++++++++++++-------------------------------------
2 files changed, 20 insertions(+), 38 deletions(-)

diff --git a/src/bpnn.cpp b/src/bpnn.cpp @@ -544,7 +544,7 @@ void Network::train() epoch_acc = 1.0/((float) instances/batch_size) * acc_sum; epoch_cost = 1.0/((float) instances/batch_size) * cost_sum; validate(VAL_PATH); - // printf("Epoch %i complete - cost %f - acc %f - val_cost %f - val_acc %f\n", epochs, epoch_cost, epoch_acc, val_cost, val_acc); + printf("Epoch %i complete - cost %f - acc %f - val_cost %f - val_acc %f\n", epochs, epoch_cost, epoch_acc, val_cost, val_acc); batches=1; rewind(data); decay(); diff --git a/src/utils.cpp b/src/utils.cpp @@ -104,75 +104,57 @@ Eigen::MatrixXf avx_product(Eigen::MatrixXf a, Eigen::MatrixXf b) Eigen::MatrixXf avx_exp(Eigen::MatrixXf m) { int size = ((m.rows() * m.cols()) + 7) & (-8); - float arr1[size]; - memcpy(arr1, m.data(), sizeof(float)*m.cols()*m.rows()); - for (int i = 0; i < size/8; i++) { - _mm256_store_ps(arr1+i*8, _mm256_exp_ps(_mm256_load_ps(arr1+i*8))); + for (int i = 0; i < (size-8)/8; i++) { + _mm256_store_ps(m.data()+i*8, _mm256_exp_ps(_mm256_load_ps(m.data()+i*8))); } - Eigen::Map<Eigen::MatrixXf> dst (arr1, m.rows(), m.cols()); - return dst; + return m; } Eigen::MatrixXf avx_cdiv(Eigen::MatrixXf m, float denom) { int size = ((m.rows() * m.cols()) + 7) & (-8); - float arr1[size]; - memcpy(arr1, m.data(), sizeof(float)*m.cols()*m.rows()); - for (int i = 0; i < size/8; i++) { + for (int i = 0; i < (size-8)/8; i++) { __m256 denom_vec = _mm256_broadcast_ss(&denom); - _mm256_store_ps(arr1+i*8, _mm256_div_ps(_mm256_load_ps(arr1+i*8), denom_vec)); + _mm256_store_ps(m.data()+i*8, _mm256_div_ps(_mm256_load_ps(m.data()+i*8), denom_vec)); } - Eigen::Map<Eigen::MatrixXf> dst (arr1, m.rows(), m.cols()); - return dst; + return m; } Eigen::MatrixXf avx_log(Eigen::MatrixXf m) { int size = ((m.rows() * m.cols()) + 7) & (-8); - float arr1[size]; - memcpy(arr1, m.data(), sizeof(float)*m.cols()*m.rows()); - for (int i = 0; i < size/8; i++) { - _mm256_store_ps(arr1+i*8, _mm256_log_ps(_mm256_load_ps(arr1+i*8))); + for (int i = 0; i < (size-8)/8; i++) { + _mm256_store_ps(m.data()+i*8, _mm256_log_ps(_mm256_load_ps(m.data()+i*8))); } - Eigen::Map<Eigen::MatrixXf> dst (arr1, m.rows(), m.cols()); - return dst; + return m; } Eigen::MatrixXf avx_pow(Eigen::MatrixXf m, float exponent) { - int size = ((m.rows() * m.cols()) + 7) & (-8); - float arr1[size]; - memcpy(arr1, m.data(), sizeof(float)*m.cols()*m.rows()); - for (int i = 0; i < size/8; i++) { + int size = ((m.rows() * m.cols()) + 7) & (-8); + for (int i = 0; i < (size-8)/8; i++) { __m256 exponent_vec = _mm256_broadcast_ss(&exponent); - _mm256_store_ps(arr1+i*8, _mm256_pow_ps(_mm256_load_ps(arr1+i*8), exponent_vec)); + _mm256_store_ps(m.data()+i*8, _mm256_pow_ps(_mm256_load_ps(m.data()+i*8), exponent_vec)); } - Eigen::Map<Eigen::MatrixXf> dst (arr1, m.rows(), m.cols()); - return dst; + return m; } Eigen::MatrixXf avx_tanh(Eigen::MatrixXf m) { int size = ((m.rows() * m.cols()) + 7) & (-8); - float arr1[size]; - memcpy(arr1, m.data(), sizeof(float)*m.cols()*m.rows()); - for (int i = 0; i < size/8; i++) { - _mm256_store_ps(arr1+i*8, _mm256_tanh_ps(_mm256_load_ps(arr1+i*8))); + for (int i = 0; i < (size-8)/8; i++) { + _mm256_store_ps(m.data()+i*8, _mm256_tanh_ps(_mm256_load_ps(m.data()+i*8))); } - Eigen::Map<Eigen::MatrixXf> dst (arr1, m.rows(), m.cols()); - return dst; + return m; } Eigen::MatrixXf avx_cosh(Eigen::MatrixXf m) { int size = ((m.rows() * m.cols()) + 7) & (-8); - float arr1[size]; - memcpy(arr1, m.data(), sizeof(float)*m.cols()*m.rows()); - for (int i = 0; i < size/8; i++) { - _mm256_store_ps(arr1+i*8, _mm256_cosh_ps(_mm256_load_ps(arr1+i*8))); + for (int i = 0; i < (size-8)/8; i++) { + _mm256_store_ps(m.data()+i*8, _mm256_cosh_ps(_mm256_load_ps(m.data()+i*8))); } - Eigen::Map<Eigen::MatrixXf> dst (arr1, m.rows(), m.cols()); - return dst; + return m; }