低水準言語について少し学んでいますが、gccで-marchおよび-mtuneパラメーターを指定して、特定のCPUファミリー用にソフトウェアを最適化できることに気付きました。
しかし、ソースからプログラムをビルドしても、バイナリをダウンロードするよりも目立って速くなることはないと言う人もいます。確かに、システムのCPU用にソフトウェアを最適化できると、特にffmpeg
AVXなどのマイクロアーキテクチャにかなり依存する機能を使用するようなソフトウェアで、顕著な速度の向上が得られますか?
私が疑問に思っているのは、パッケージマネージャーのバイナリが複数のマイクロアーキテクチャ用に何らかの形で最適化されているかどうかです。パッケージマネージャーは、システムのマイクロアーキテクチャに固有のバイナリをダウンロードしますか?
配布パッケージは、事前に決定されたベースラインを参照して構築されます(たとえば、Debianのアーキテクチャベースラインを参照してください)。したがって、Debianでは、amd64
パッケージはSSE2を備えた汎用x86-64 CPUをターゲットにしますが、SSE3以降はターゲットにしません。i386
パッケージは、MMXまたはSSEを使用せずに汎用i686CPUを対象としています。一般に、コンパイラのデフォルトが使用されるため、コンパイラ自体が進化するにつれてチューニングが進化する可能性があります。
ただし、CPU固有の最適化が大きなメリットをもたらすパッケージは、新しいCPUを活用するために構築できます。パッケージソフトが起動してCPUを検出し、それを活用するために使用するコード・パスを(参照調整:これは、複数の実装を提供するのではなく、コンパイラの最適化に頼って、実行時にそれらの間で選択することによって行われているffmpeg
「Slibswscale/x86/swscale.c
など)。一部のアーキテクチャでは、ld.so
それ自体がこれに役立ちます。たとえばi386
、SSE対応CPUで実行されているアーキテクチャシステムで利用可能な場合は、最適化されたライブラリを自動的にロードできます。
すべてではないにしてもほとんどのパッケージマネージャーは、これらすべてに気づいていません。システムを実行しているCPUに関係なく、特定のアーキテクチャのパッケージをダウンロードしてインストールします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加