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

func() が特定の入力セットに対して常に同じ値を返す場合 (時間に依存しない、シーケンスに依存しないなど)、次のようにすることができます。

1. func() を呼び出すたびに、結果をキャッシュに保存します [k1 から k8 までの値をキャッシュ エントリのキーとして使用]

2. func() を呼び出す前に、必要な値が既にキャッシュされているかどうかを確認します

キャッシュ自体は、データ型に適した方法で k1... から ... k8 を連結してキーを構築する Map である可能性があります。

于 2013-07-08T15:07:08.317 に答える