0
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]...,程序会在堆栈溢出时死掉。

有没有更好的加速解决方案?

4

2 回答 2

0

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

于 2013-07-08T15:19:19.673 回答
0

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

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

2.在调用func()之前,检查是否已经缓存了需要的值

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

于 2013-07-08T15:07:08.317 回答