前提・実現したいこと
openblas 特にcblas についての質問です。ベクトルの要素の合計をcblasで実現しようとすると,?asum系の関数があり,要素の絶対値の合計を求められるようになっています。絶対値ではなく,負数も負の値として合計値を算出できないかを考えていたところ,ヘッダファイルに cblas_dsum と cblas_ssum という関数を見つけました。sumの先頭にaがつかないので,絶対値の合計ではないと思い,やってみたところ,cblas_ssumは期待通りの計算になりますが,cblas_dsumは期待した結果が出ません。公式のマニュアルが見つからないので,公式のコードではないと思いますが,どなたこの挙動についてご存知の方がおられましたら,ご教示いただければと思います。
発生している問題・エラーメッセージ
sum(-1.0,cblas_dsum)のときに,12になる。
該当のソースコード
C++
1#include <cblas.h> 2#include <algorithm> 3#include <iostream> 4int main (){ 5 using namespace std; 6 7 const int N=16; 8 auto sum=[](auto val,auto f){ 9 using T = decltype(val); 10 T a[N]{}; 11 fill(a,a+N,1); 12 a[0]=val; 13 for(auto i:a)cout << i <<' '; 14 cout <<'\n'; 15 return f(N,a,1); 16 }; 17 18 cout << "dasum:"<<sum(-1.0, cblas_dasum) <<'\n'; 19 cout << "sasum:"<<sum(-1.0f,cblas_sasum) <<'\n'; 20 cout << " dsum:"<<sum(-1.0, cblas_dsum) <<'\n'; 21 cout << " ssum:"<<sum(-1.0f,cblas_ssum) <<'\n'; 22}
試したこと
N>15にすると計算が不正になるようです。
補足情報(FW/ツールのバージョンなど)
clang
c++17
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。