嵌套循环展开

用户名

鉴于我有一个功能

double doSomething(int const a, int const b, int const c) { /*...*/}

我想针对不同的输入a,b和c测试此功能。然后,我可以列出可能的参数,并通过三个循环测试所有组合:

int aTest[] = {1,2,3,4}
int bTest[] = {-5,-3,0}
int cTest[] = {2,65,8,0,-100}
for (unsigned int i = 0; i < 4; ++i) {
    for (unsigned int j = 0; j < 3; ++j) {
        for (unsinged int k = 0; k < 5; ++k) {
            double val = doSomething(aTest[i], bTest[j], cTest[k]);
            //Compare results etc.
        }
    }
}

希望编译器足够聪明,可以在编译时展开这些循环,以便生成如下所示的内容:

doSomething(1,-5,2);
doSomething(1,-5,65);
doSomething(1,-5,8);
//...

但是,鉴于我的编译器不够智能,无法展开,该如何处理模板?

安东·托杜(Anton Todua)

您可以尝试执行以下操作:

double TestData[] = { 1.5, 2.7, 3.6, 4.5, 7.9 };

template<int K>
class Super {
public:
    inline static void Do()
    {
        Super<K - 1>::Do();
        double val = doSomething( TestData[K] );
    }
};

template<>
class Super<0> {
public:
    inline static void Do()
    {
        double val = doSomething( TestData[0] );
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CUDA循环展开

来自分类Dev

XNA优化-循环展开?

来自分类Dev

C循环展开限制?

来自分类Dev

GCC 5.1循环展开

来自分类Dev

SSE内部和循环展开

来自分类Dev

C ++:循环优化和循环展开(循环或不循环)

来自分类Dev

根据CUDA 6.5在循环展开时输出错误

来自分类Dev

使用Scala设计过滤器-用于循环展开

来自分类Dev

根据CUDA 6.5在循环展开时输出错误

来自分类Dev

循环展开?在Julia中进行元编程

来自分类Dev

GCC循环展开标志真的有效吗?

来自分类Dev

使用Ivy Bridge和Haswell循环展开以实现最大吞吐量

来自分类Dev

为什么Hotspot JIT不对长计数器执行循环展开?

来自分类Dev

如何在运行时实现基于2的循环展开以进行优化

来自分类Dev

为什么循环展开会在ARM Cortex-a53上带来如此大的提速?

来自分类Dev

C++ Introsort 中的手动循环展开运行不正确

来自分类Dev

除了使用循环展开之外,还有没有其他方法可以优化向量矩阵乘法?

来自分类Dev

在C中展开嵌套嵌套循环

来自分类Dev

使用元编程展开嵌套循环

来自分类Dev

嵌套或展开数组

来自分类Dev

嵌套展开为空白

来自分类Dev

嵌套或展开数组

来自分类Dev

展开嵌套的 Obsevable

来自分类Dev

展开/折叠嵌套的 RecyclerView

来自分类Dev

静态数组的展开循环

来自分类Dev

展开循环,何时使用

来自分类Dev

Cython自动展开循环

来自分类Dev

在C中展开循环

来自分类Dev

静态数组的展开循环