7

私はシミュレーション ソフトウェアで作業していますが、配列に対して行われる多くの操作の 1 つは、ベクトルを数値でスケーリングすることです。

次のようなコードがあります。

//Just some initialization code, don't bother about this part
int n = 10000;
std::vector<double> input(n, 42.0);
std::vector<double> output(input.size());

double alpha = 69.0;

//the actual calculation:
for (size_t i = 0; i < n; ++i) {
    output[i] = input[i] * alpha;
}

MKL ライブラリを利用できるので、計算が「その場で」行われる場合、次のように記述できます。

cblas_dscal(n, alpha, &input[0], 1);

ただし、これによりinput変数が変更されますが、これは私が望むものではありません。

を使用してみましたmkl_domatcopy()が、この操作は非常に遅いです。

4

3 に答える 3

1

私が思いついた解決策は、cblas_dcopy()thenを呼び出すことでしcblas_dscal()た。

これはすべての世界で最高というわけではありませんが、生のループよりも高速です。

于 2014-01-14T11:44:37.890 に答える