为了加快库中的计算速度,我决定使用std::valarray该类。该文件说:
std :: valarray和helper类被定义为不包含某些形式的别名,因此可以优化对这些类的操作,类似于C编程语言中关键字limit的效果。此外,允许使用valarray参数的函数和运算符返回代理对象,以使编译器可以优化表达式,例如v1 = a * v2 + v3; 作为执行v1 [i] = a * v2 [i] + v3 [i]的单个循环;避免任何临时或多次通过。
这正是我所需要的。当我使用g ++编译器时,它的工作方式如文档中所述。我开发了一个简单的示例来测试std::valarray性能:
void check(std::valarray<float>& a)
{
for (int i = 0; i < a.size(); i++)
if (a[i] != 7)
std::cout << "Error" << std::endl;
}
int main()
{
const int N = 100000000;
std::valarray<float> a(1, N);
std::valarray<float> c(2, N);
std::valarray<float> b(3, N);
std::valarray<float> d(N);
auto start = std::chrono::system_clock::now();
d = a + b * …Run Code Online (Sandbox Code Playgroud)