gpt4 book ai didi

c++ - 在 C++ 中模板化一个 'for' 循环?

转载 作者:IT老高 更新时间:2023-10-28 21:34:00 36 4
gpt4 key购买 nike

我在下面有一个 C++ 片段,运行时 for循环,

for(int i = 0; i < I; i++)
for (int j = 0; j < J; j++)
A( row(i,j), column(i,j) ) = f(i,j);

片段被重复调用。循环边界“I”和“J”在编译时是已知的(I/J 是 2 到 10 的数量级)。我想以某种方式使用模板展开循环。主要瓶颈是 row() 和 column() 以及 f() 函数。我想用在编译时评估的等效元程序替换它们,使用 row<i,j>::enum技巧。

我真正喜欢的是最终将循环解析为一系列语句,例如:

A(12,37) = 0.5;
A(15,23) = 0.25;
A(14,45) = 0.25;

但我想这样做而不破坏 for - for结构太多。本着以下精神的东西:

TEMPLATE_FOR<i,0,I>
TEMPLATE_FOR<j,0,J>
A( row<i,j>::value, column<i,j>::value ) = f<i,j>::value

boost::lambda(或其他东西)可以帮我创建这个吗?

最佳答案

一个好的编译器应该为你做展开。例如,在 gcc 中使用 -O2 选项进行编译会打开循环展开。

如果您尝试自己手动完成,除非您仔细衡量并真正知道自己在做什么,否则您最终可能会得到较慢的代码。例如,在您手动展开的情况下,您可能会阻止编译器进行循环交换或剥离优化(在 the gcc docs 中查找 --floop-interchange 和 -floop-strip-mine )

关于c++ - 在 C++ 中模板化一个 'for' 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1032602/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com