実際には、そのLennard Jones潜在性の派生物です。その理由は、私が分子動力学プログラムを書いていることであり、最も積極的なコンパイラオプション(gcc * * -O3)でさえ、少なくとも80%の時間が次の関数に費やされているからです。lennard jonesの潜在的な機能を最適化する良い方法はありますか?
double ljd(double r) /* Derivative of Lennard Jones Potential for Argon with
respect to distance (r) */
{
double temp;
temp = Si/r;
temp = temp*temp;
temp = temp*temp*temp;
return ((24*Ep/r)*(temp-(2 * pow(temp,2))));
}
このコードは、私のメインファイルにインポートするファイル "functs.h"からのものです。私はこのように一時変数を使うと機能が速くなると思っていましたが、作成するのは無駄です。私は静的を使うべきですか?また、コードはopenmpを使って並列に書かれているので、tempをグローバル変数として宣言することはできません。
変数EpとSiは(#defineを使用して)定義されています。私はC言語を約1ヶ月使っています。私は、GCCによって生成されたアセンブラコードを見てみましたが、私は完全に失われた\
異なるプロセッサが異なる方法で浮動小数点を扱うので、使用しているプロセッサも指定する必要があります。おそらくあなたが使っているIntelのものでしょう。 – Skizz
無駄な一時変数が導入されると、パフォーマンスが向上せず、読みやすさが損なわれるだけです - まともなコンパイラがそれ自身の値の繰り返し使用を検出する必要があります... – Christoph
Intel Core 2 Duoプロセッサを使用しています – sn6uv