namespace std::linalg {
template<class Scalar,
inout-object InOutObj>
void scale(Scalar alpha,
InOutObj x); // (1)
template<class ExecutionPolicy,
class Scalar,
inout-object InOutObj>
void scale(ExecutionPolicy&& exec,
Scalar alpha,
InOutObj x); // (2)
}
概要
以下のように、ベクトルx
をalpha
倍したものをx
に代入する。
$$ \mathbf{x}\leftarrow\alpha\mathbf{x} $$
適格要件
- (2):
is_execution_policy<ExecutionPolicy>::value
がtrue
効果
ベクトルx
をalpha
倍する。
- (1): 逐次実行する。
- (2): 指定された実行ポリシーに応じて実行する。
戻り値
なし
例
[注意] 処理系にあるコンパイラで確認していないため、間違っているかもしれません。
#include <cmath>
#include <execution>
#include <iostream>
#include <linalg>
#include <mdspan>
#include <vector>
template <class Vector>
void print(Vector v) {
for (int i = 0; i < v.extent(0) - 1; ++i) {
std::cout << v[i] << ", ";
}
std::cout << v[v.extent(0) - 1] << std::endl;
}
int main()
{
constexpr size_t N = 3;
std::vector<double> a_vec({1, 2, 3});
std::mdspan a(a_vec.data(), N);
double alpha = 2.0;
// (1)
std::linalg::scale(alpha, a);
print(a);
// (2)
std::linalg::scale(std::execution::par, alpha, a);
print(a);
return 0;
}
出力
2, 4, 6
4, 8, 12
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??