web-dev-qa-db-ja.com

ソフトウェアの最適化とハードウェアの最適化-大きな影響は何ですか?

ソフトウェアの最適化とハードウェアの最適化が、コンピューターの速度とパフォーマンスの向上に与える影響について、どう比較するのかと思っていました。

長年にわたってソフトウェアの効率とアルゴリズムを改善することで、パフォーマンスが大幅に向上したと聞いています。どちらも非常に重要であることは明らかですが、過去10年間、20年間、または30年間で大きな影響を与えたものは何ですか。

また、ハードウェアの変更はソフトウェアの変更にどのように影響しますか?ソフトウェアの最適化のうちどれだけがハードウェアの改善の直接の結果であり、どれだけがハードウェアから独立していますか?

明確にするために、コンパイラとオペレーティングシステムのレベルでのソフトウェアの最適化について質問しています。明らかに、より優れた高レベルのアルゴリズムを使用すると、速度が最大になります(クイックソートとバブルソートを比較してください)。

8
domvoyt

パフォーマンスの大幅な向上は間違いなくハードウェアによるものです。

ソフトウェアに関しては、過去30年間の最大の変更点の1つは、以前ほど低レベルのコードをほとんど作成していないことです。たとえば、ソフトウェアは、手書きのアセンブリではなく、自動コンパイラ最適化に依存しており、過去数十年で成熟した既存のフレームワークとパターンを広範囲に使用しています。一方、ソフトウェアはますます複雑になっており、それに対応するパフォーマンスヒットがあります。

ただし、ハードウェア機能は主にムーアの法則に従って改善されており、CPU速度とメモリ帯域幅は過去30年間で数百倍に増加しています。製造プロセスが改善され、より多くのトランジスタをまとめてパックできるため、コンポーネントをより小さく、より速くすることができます。コンピュータを高速化した最大の要因の1つは、メモリアクセスとキャッシュの使用です。現在、CPUキャッシュサイズは合計よりも大きくなっていますRAM以前は使用されていました。また、低レベルプログラムはこれをより有効に利用するためにシフトしました。また、64ビットCPUが一般的になると、対応する命令セット(つまりこれを適切に利用するには、x86-64を使用する必要がありますが、これは「ソフトウェア」として機能する必要があります。このように、ハードウェアの改善を組み合わせたものであり、ソフトウェア設計のシフトによってより効果的に活用されます。

つまり、パフォーマンスの最大の増分はハードウェアによるものですが、新しいハードウェアを最適に使用するには、ソフトウェアの変更が必要になることがよくあります。どちらか一方がなければ、実際には機能しません。

7
AerandiR

長年にわたってソフトウェアの効率とアルゴリズムを改善することで、パフォーマンスが大幅に向上したと聞いています

ここで聞いたことは、より優れたアルゴリズムに関連していると思いますが、それはあなたが質問から明示的に除外したものです。

オペレーティングシステムのレベルでは、OSが改善されたため、多くのアプリケーションが10年前よりも速く実行されるとは思いません(ほとんどの場合、その逆です。ほとんどのOSは年々大きくなり、オーバーヘッドが増えます)。唯一の例外は、複数のプロセッサと並列計算のサポートの改善ですが、ハードウェアの改善とは無関係に見ることはできません。

コンパイラについては、数十年の間にいくつかの改善がありましたが、パフォーマンスに最も影響を与えたのは、新しいハードウェアの機能をサポートするための改善でした。ここで言及する最も重要なことは、IMHO並列計算機能(マルチコア、SIMDなど)と64ビット処理です。編集:コンパイラソフトウェアの改善により、過去10〜20年間でアプリケーションのパフォーマンスが約1桁向上した1つの側面があります。ジャストインタイムコンパイラ、特にJava (〜1999以降)、およびそれ以降のJavaScript。

したがって、主にハードウェアに起因します。 20年または30年前の点では、それは主にプロセッサのクロック速度であり、増加は多くのアプリケーションのアプリケーションパフォーマンスでおおよそ1:1に相関しました(完全にそうではありません。アプリケーションのパフォーマンスは、メモリアクセス速度、ハードドライブ速度、GPU速度などの他のハードウェアコンポーネント)。過去10年間について考えると、プロセッサベンダーは実際的な製造上の限界に達していたため、プロセッサのクロック速度はそれほど増加しませんでした。代わりに、並列計算へのパラダイムシフトがありました。マルチコアプロセッサ、GPUコンピューティング(これも並列コンピューティングの1つの形式です)、主流のSIMDなどがこの10年間で優勢でした。

6
Doc Brown

ハードウェアが2倍のスピードアップ比を提供する場合、それによりすべてが以前より2倍速くなります。

新しいコンパイラの最適化により2倍のスピードアップ比が得られた場合、それによってすべてが以前よりも2倍速くなります。

これらを組み合わせると、以前より4倍速くなります。

それがあなたを元気づける前に、非常に古いルールがあります: Nature Abhors a Vacuum 。 RAMに空きがある場合、誰かがそれを埋めます。ディスクに空き容量がある場合、誰かがそれを埋めます。 CPUに予備のサイクルがある場合、誰かがそれらを使い果たします。

そう思いませんか? 500MHzのプロセッサと3GBのディスクを搭載した古い廃棄されたラップトップを見つけ、新しいソフトウェアをインストールしてみてください。

プログラマー(私を含む)は、勤勉なエンジニアの数に関係なく、常により多くの機能を提供できるとは限らず、利用可能なサイクルを使い果たすコードを書く傾向があります。

5
Mike Dunlavey

30年前、PCコンピューターでは1 M程度のZ80 Microが実行されていました。運が良ければ、別のZ80でディスプレイが実行されていました。
今日、一般的なPCコンピュータには、2〜4コアで2〜3ギガヘルツで動作するCPUがあります。また、GhZレンジで測定された、数百の並列プロセスを備えたGPUもあります。
次に、8ビットと64ビットのバス幅があります。

それでも、なぜ30万台のコンピュータよりも1万倍も高速に実行されていないコンピュータがあるのでしょうか。ハードウェアです。コンピュータソフトウェアの最適化は、あなたの質問が推測するほど良くないと主張します。

3
mattnz

全体的なソフトウェアアルゴリズムの非効率性がないと仮定しても、最大の利益がどこにあるかは依然として不明である可能性があります。最近のハードウェアの改善のほとんどは、とにかくソフトウェアの最適化の側面がないと役に立たない。タスクの並列化とベクトル化はソフトウェアまたはハードウェアの最適化ですか?両方です。

さらに、ハードウェアの機能とソフトウェアの哲学が大きく変わることにより、速度が実現することもあります。たとえば、メモリ容量とディスクシーケンシャルスループットの両方が爆発的に増加したため、多くのソフトウェアエンジニアは、すべてのデータをメモリに詰め込むことを優先して、シークヘビーリレーショナルデータベースの概念を捨てています。

一般的なポイントは、対応するソフトウェアの最適化なしのハードウェアの最適化では、増分の利益しか得られないことが多いということです。同じ逆。

3
Kevin Hsu

シリコンコンパイル を使用すると、任意のソフトウェアをハードウェアに実装できます。

パフォーマンスの向上は基本的に、シーケンシャルフォンノイマンアーキテクチャからパラレルデータフローアーキテクチャへの変換にあります。

したがって、同じレバレッジのハードウェアでソフトウェアの最適化が可能です。

今日では、ソフトウェアは主にデータをある場所から別の場所に移動するために使用されますが、ハードウェアはそれを処理します:FPU、DSP、GPU ...

AVCHDカムとYouTubeは、ハードウェア実装のビデオエンコーダーとデコーダーがないと存在しません(スマートフォンと同じように制約されたデバイスに存在します!)。

これらのハードウェア最適化は、グラフィックス、オーディオ、およびビデオ処理がOSおよびその提供されたライブラリーに属するという意味で、コンパイラーおよびOSに影響を与えます。

1
mouviciel