#include "mylib.h" #include // assert() #include #include #ifdef __INTEL_CLANG_COMPILER #pragma message(" ########## Use of MKL ###############") #include #else #pragma message(" ########## Use of CBLAS ###############") //extern "C" //{ #include // cBLAS Library #include // Lapack //} #endif using namespace std; double scalar(vector const &x, vector const &y) { assert(x.size() == y.size()); // switch off via compile flag: -DNDEBUG size_t const N = x.size(); double sum = 0.0; for (size_t i = 0; i < N; ++i) { sum += x[i] * y[i]; //sum += exp(x[i])*log(y[i]); } return sum; } double scalar_cblas(vector const &x, vector const &y) { int const asize = static_cast(size(x)); int const bsize = static_cast(size(y)); assert(asize == bsize); // switch off via compile flag: -DNDEBUG return cblas_ddot(asize,x.data(),1,y.data(),1); //assert(x.size() == y.size()); // switch off via compile flag: -DNDEBUG //return cblas_ddot(x.size(),x.data(),1,y.data(),1); } float scalar_cblas(vector const &x, vector const &y) { int const asize = static_cast(size(x)); int const bsize = static_cast(size(y)); assert(asize == bsize); // switch off via compile flag: -DNDEBUG return cblas_sdot(asize,x.data(),1,y.data(),1); //assert(x.size() == y.size()); // switch off via compile flag: -DNDEBUG //return cblas_ddot(x.size(),x.data(),1,y.data(),1); } double norm(vector const &x) { size_t const N = x.size(); double sum = 0.0; for (size_t i = 0; i < N; ++i) { sum += x[i] * x[i]; } return std::sqrt(sum); }