0

素数を総当たり攻撃するなど、CPU バウンドの簡単なプログラムを考えてみましょう。素数は、おそらく時折 SD カードに保存されます。

今日のプログラムの非効率性には、解釈や仮想マシンなどが含まれます。したがって、速度のためにそれらを捨てて、コンパイルされた言語を使用しましょう。

プロセッサ上で直接実行できるコードができましたが、オペレーティング システムがまだあります。オペレーティング システムは、異なるプロセス間で多重化し、独自のコードを実行し、メモリを管理し、プログラムの実行を遅くする他のことを行います。

私たちのプログラムだけを実行する独自のオペレーティング システムを作成するとしたら、どのような速度向上の要因が期待できるでしょうか?
色々あると思いますので、よろしければ詳しく教えてください。

4

3 に答える 3

5

Return Infinity http://www.returninfinity.com/ (私は何の関係もありません) の製品を見て、試してみてください。

私自身のスーパーコンピューティングの経験は、TLB を (ほぼ完全に) スキップし、フラット メモリ モデルを実行することと、カーネルとユーザーランド間のコンテキスト切り替えの欠如を組み合わせることで、一部のタスクを高速化できることを示しています。レベル、TCP でさえ、なぜわざわざ)、およびブルート フォース計算 (メモリ管理の欠如による)。

TLB またはキャッシュ サイズを超えるブルート フォース計算では、RAM ベースの変換テーブル ルックアップを実行する必要がある場合と比較して、約 5 ~ 15% のパフォーマンスの向上が期待できます。モノリシックリンクを使用して静的にページを作成します)。

高帯域幅の作業では、特に小さなメッセージ パッシングが多い場合、(マルチタスク) OS を完全に削除するか、アプリケーションをカーネルとしてロードすることにより、カーネル スペースに移行することで 500% の高速化を簡単に実現できます。ドライバーであり、抽象化全体も回避します。MAC 層の ping のネットワーク遅延を 18us から 1.3us に下げることができました。

L1 キャッシュ内に収まる計算では、最小限の改善 (約 1%) が予想されます。

それはすべて問題ですか?はいといいえ。ハードウェアのコストがエンジニアリングのコストを大幅に上回っており、考えられるすべてのアルゴリズムの改善を行った場合 (さらに良いことに、実行された計算が結果に必要な計算とまったく同じであることが証明されました!) - これにより、意味のあるパフォーマンス上の利点が得られます。ハードウェアの償却費を含まない年間約 800 万ドルの電気代がかかるスーパーコンピューターの 3% (全体的な平均成功) は、年間 24,000 ドルの価値があります。実行する最も一般的なタスクを最適化するために、エンジニアに 1 か月分の料金を支払うのに十分です :)。

于 2013-05-05T18:52:29.230 に答える
1

まともなマシンを実行していて、OS が他に何もしていないと仮定すると、大きな要因ではありませんが、10% 未満の改善が期待できます。

OS の「アイドリング」だけでは、CPU の処理能力の多くを占有することはありません (すべきではありません)。そうであれば、より良いマシン、より良い OS、フォーマット、またはこれらの組み合わせが必要です。

一方、他のリソースを集中的に使用するものを多数実行している場合は、他のものを実行しないだけで、これが大幅に高速化されることを期待してください。

あなたがスーパーユーザーではない場合、バックグラウンドで大量の (OS 以外の) プロセスが実行されていることに驚くかもしれません。これらのプロセスは、OS よりも CPU 処理能力を消費する可能性が高くなります。

トピックから少し外れますが関連しますが、8 コアを実行している場合、完璧な世界では、マルチスレッドによってプロセスを 8 倍高速化できることを覚えておいてください。

問題に対する既知の解決策から大幅な改善を期待し、データ構造とアルゴリズムをより有効に活用し、程度は低いものの、言語の選択とマイクロ最適化を行います。

私の経験から:

最も科学的または信頼できる結果ではありませんが、ほとんどの場合、Windows でタスク マネージャーを開くと、すべての OS プロセスが CPU の 1% を下回っています。

于 2013-05-05T18:37:47.193 に答える