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] ..., 程序在堆栈溢出时死亡。
任何更好的加速解决方案?
答案 0 :(得分:0)
如果func()总是为给定的一组输入返回相同的值(例如,不依赖于时间,依赖于序列等),那么您可以执行以下操作:
1。每当调用func()时,将结果保存到缓存中[使用k1 ...至k8的值作为缓存条目的键]
2。在调用func()之前,请检查您是否已经缓存了所需的值
缓存本身可以是一个Map,您可以通过以某种适合其数据类型的方式连接k1 ... thru ... k8来构建密钥。
答案 1 :(得分:0)
您正在创建一个std::complex[6][6]...[6]
数组
堆?首先,这很容易导致堆栈溢出:那就是
许多堆栈的相当大的数组。第二:如果你创造
它在堆栈中,每次调用时都会重新初始化
功能。你可能想要的是一个本地静态数组,它
将被初始化一次(第一次遇到它),和
然后在函数调用之间保留其值。