加速循环内部的函数调用

时间:2013-07-08 14:54:30

标签: c++ performance

loop over a very long container (millions elements)
{
   each element compute 8 integers:  k1,k2,k3,...,k8

   call function    func(k1,k2,k3,...,k8)
}

container is a std::vector, element is a long integer
each k can only take {0,1,2,..5} six values.
func is a simple expression of complex number calculation, 
  involves std::conj and std::exp

为了加快速度,我将'func'的所有可能结果缓存到数组中,然后调用func_array [k1] [k2] [k3] .... 但是如果只是将func_array定义为:       std :: complex func_array [6] [6] [6] ..., 程序在堆栈溢出时死亡。

任何更好的加速解决方案?

2 个答案:

答案 0 :(得分:0)

如果func()总是为给定的一组输入返回相同的值(例如,不依赖于时间,依赖于序列等),那么您可以执行以下操作:

1。每当调用func()时,将结果保存到缓存中[使用k1 ...至k8的值作为缓存条目的键]

2。在调用func()之前,请检查您是否已经缓存了所需的值

缓存本身可以是一个Map,您可以通过以某种适合其数据类型的方式连接k1 ... thru ... k8来构建密钥。

答案 1 :(得分:0)

您正在创建一个std::complex[6][6]...[6]数组 堆?首先,这很容易导致堆栈溢出:那就是 许多堆栈的相当大的数组。第二:如果你创造 它在堆栈中,每次调用时都会重新初始化 功能。你可能想要的是一个本地静态数组,它 将被初始化一次(第一次遇到它),和 然后在函数调用之间保留其值。