プロジェクト用に実行しているコードがあります。これはO(N ^ 2)です。私の場合、Nは200です。このO(N ^ 2)をO(N logN)に変えるアルゴリズムがあります。これは、この新しいアルゴリズムを使用すると、約100倍高速になるはずであることを意味します。ただし、2倍の増加(別名2倍高速)しか得られていません。
私は物事を絞り込んで、何かを台無しにしたのか、それともこのプログラムのコーディング方法に固有のものなのかを確認しようとしています。手始めに、ネストされたクラス内に多くの関数オーバーヘッドがあります。たとえば、私はこれをたくさん持っています(多くのループ内に):
energy = globals->pair_style->LJ->energy();
実際のデータに関しては正しい結果が得られているので、速度の増加が間違っているので、関数のオーバーヘッドによって実際に速度が50分の1に低下する可能性があるのではないかと思います。
ありがとう!