SIMD:素人の言語コンピューター組成原理的にはどのように行列の乗算をスピードアップするには?(セイ27)

まず、プライマー

その最後の講義は、私はさらにあなたがスーパースカラ(スーパースカラ)技術と超長命令語(VLIW)技術であるため、「黒の技術」でCPUを説明しました。

コンパイル時には、超長命令語(VLIW)技術は、命令は、1つのコマンドパケットを撮影することができます依存関係を持って扱うことができ、スーパースカラ(スーパースカラ)技術は、命令フェッチ、命令デコードにも並行して行われることができます。

終了からしかし、魔法の様々なCPUの最適化は、私たちは遠く離れています。このレッスンでは、私は、CPUのパフォーマンスを高めるために、建築設計の最後の2列に、あなたを見てみましょう。彼らは、あなたは常に聞こえるはずですされているハイパースレッディング(ハイパースレッディング)技術を、そしてない場合があります
ので、お馴染みの持つ、単一命令複数データ(SIMD)技術を。

第二に、ハイパースレッディング:インテルは倍以上のCPUとあなたに売却しました

1は、Pentium 4プロセッサの重要な理由に主要な敗北を喫し

あなたは覚えていれば約21話、知ってはいけない、私はあなたがIntelがPentium 4プロセッサの主要な敗北を喫し方法であるために紹介します。あなたがそれを覚えていない場合、あなたは戻って見ることができます。

その時私は、Pentium 4の故障のための重要な理由は、そのCPUのパイプラインステージが深すぎる、あなたに言いました。でも31から20への初期のPentium 4のパイプラインの深さまで、および進行の後にコードネームプレスコットのPentium 4行、。長い水
我々は決意の多くは、「冒険」について話しているように、ラインの前に、並行プログラムがアクセスを持っていない強化します。

並行プログラムを強化するためにこれらのソリューションは、「冒険」ので、本質的にの一種である命令レベルの並列技術ソリューション(IPLを略し命令レベルの並列、)。言い換えれば、CPUは、並列に2つの命令を実行するために、同時に望んでいます。そして、これら2つの命令を行う、
もともと私たちのコードでは、シーケンシャルです。それは我々が、パイプライン・アーキテクチャの話パイプライン、分岐予測にと故障しているか、我々はCPUを改善するために、あなたは同じ時間で2つの命令を実行したいすべて、スーパースカラやVLIWに話しているかどうかスループット

しかし、ペンティアム4 CPUで、これらの方法は、パイプラインが深すぎるので可能であり、かつ結果を実現します。私はより深いパイプラインは、それがより多くの相互依存関係、内部コマンドの行で、よりであることを意味している間、前に言ってきました。非常に多くの時間が、我々は次のパイプラインのストールを配置する必要があり
、「冒険」を解決するために、NOP操作の多くを挿入するためにこれらの問題は、依存しています。

2.ハイパースレッディング(ハイパースレッディング)技術がどのようなものです。

それはインテル®Pentium®4 CPU 3.06GHzのクロック速度で、2002年末までに、パフォーマンスもう少し競争力のペンティアムCPU 4を作るために、あまりにも多くの競争に直面していたので、知ってはいけない最初の導入を超えますスレッド(ハイパースレッディング)技術を。

ハイパースレッディング・テクノロジーとは何ですか?インテルは、より良い実行するための完全に独立し、非依存命令さまざまな冒険を体験し、同時にレベルの前と後のコード内の依存関係を持って、我々はこれらの命令のいくつかに話を行くので、CPUがこれらの命令を実行していることを考えました。だから、どこような命令をする
のですか?当然のことながら、別のプログラムを実行中。

お使いのコンピュータは、実際には、同じ時間は、それは多くのプログラムを実行することができます。私は、ブラウザでこの記事を書いていながら、例えば、背景もPythonスクリプトを実行しています。そして、これらの2つのプログラムが互いに完全に独立しています。彼らは、並列に実行される2つの完全に指示されている、というよりも
起因する依存関係の問題生み出す「冒険を。」

図3は、ハイパースレッディング・テクノロジーは、それが任意の特定の使用である必要がありますか?

この時間は、しかし、あなたはそれが奇妙な、それはそのように思われた新しい技術を必要としないかもしれません。今、私たちはさまざまなタスクを実行するために、異なるCPUコアの数を使用することができ、既に、マルチコアCPUを使用しています。でもシングルコアのPentium 4の時に、私たちはコンピュータを提示し
、同時に複数のプロセスまたは複数のスレッドを実行できるようにします。任意の特定の使用のハイパースレッディング・テクノロジーは、それを何ですか?

それは上記と異なっているかどうか、物理的なCPUコアのみが、命令の1つのスレッドを実行するプログラム、または同じ時点で異なるスレッドを実行するタスクを切り替える単一のCPUコアを実行するために、より多くのCPUコアを述べ、実際に私たち本当に並列命令で実行しないでください。

ハイパースレッディングはそうではありません。ハイパースレッディングCPUは、実際には、二つの論理CPUコアレベルとして「偽装」は、1つの物理CPUコアレベルです。我々はコア内部のCPUにできるように、CPUは、回路は、ハードウェアレベルでのステータス情報の2つの異なるスレッドのメンテナンス命令を大量に増加します。

例えば、物理的な内部のCPUコアは、PCレジスタ、コンディションコードレジスタと命令レジスタを倍増します。したがって、CPUコアは、二つの並列命令の状態を維持することができます。外のルックスで、同時に実行されているCPUの二つの論理レベルがあるようです。したがって、超ライン
処理技術はまた、一般的として知られている同時マルチスレッディング技術(SMTと呼ばれる同時マルチスレッド)。

しかし、CPUの他の機能コンポーネントで、インテルは重複を提供することはできません。命令デコーダまたはALUか否かを、CPUコアは依然として唯一のものです。ハイパースレッディングは、実際には2つのコマンドを実行するつもりはないので、それは実際に物理的なマルチコアになりました。ハイパースレッディングの目的は、
命令スレッドA、時間におけるパイプラインの休止、別のスレッドが命令を実行することを可能にします。この時、CPU及びALUデコーダが出て空にしているので、その後、別のスレッドBは、それは物事が自分のニーズをやっに使用することができます。これは、命令スレッドにBスレッドでなくてもよい
関係および依存関係。

このように、支払うために小さな価格を介してCPUは、複数のスレッドの「同時」実行の効果を達成することができるようになります。通常、私たちは、約10%のCPUコア機能にロジックを追加するトランジスタの数はカウントされません無視することができ増やし、そしてあなたはそれを行うことができます。

4、ハイパースレッディングアプリケーションシナリオ

しかし、あなたが見ることができるよう、私たちは本当に機能ユニットを増加させませんでした。したがって、結果は、特定のシナリオの下で、ハイパースレッディング良好でした。一般的に、それらの中にさまざまなスレッドのアプリケーションシナリオの下で長い時間を「待機」たとえば、私たちは多くのデータベース・アプリケーションの要求に応答する必要があり、適している
ハイパースレッディングを使用します。各命令は、メモリのデータにアクセスするのを待つ必要がありますが、あまりにも多くの計算を行う必要はありません。

そこで、我々は、ハイパースレッディングを有効に利用することができます。私たちは、CPUが上で実行しない計算が、多くの場合、現在の命令は、データが返さ内部のメモリを待って、パイプラインでストールしなければ。この時間は、データベースの接続要求がある別のクエリに対処するために、各機能ユニットにCPUを聞かせて
非常に良好な適用例。

私は私のコンピュータの実行CPU-Zののスクリーンショットを置くためにここにいます。あなたが右下隅に表示することができ、コアの私のCPUは、4をマークし、スレッドされた、それは8です。これはCPU、私の手の唯一の4つの物理CPUコア、いわゆる4コアのCPUを示しています。しかし
、8つのCPUコアがある「ふり」されている論理レベルで、ハイパースレッディング・テクノロジーは、同時に8つの命令を実行するために使用することができます。Windowsを使用している場合は、対応する内部に手を見てCPU-ZのCPUパラメータをダウンロードしてインストールする行くことができます。

三、SIMD:行列の乗算をスピードアップするためにどのように?

1. SIMDとは何ですか?

内部に上記のCPU情報のビューでは、次のように表示されますようにMMX、SSEによって書かれた、とされている取扱説明書と呼ばれる情報の集合、の真ん中。この情報は、CPUの命令セットによってサポートされています。ここで私はあなたの最後の言及を教えてあげると、それがリードし、MMXやSSE命令セットだ
リットルのCPU性能の技術的なソリューションを、SIMDは、中国は、単一命令複数データ(単一命令複数データ)と呼ばれます。

2、どのように最終的にはSIMDのパフォーマンスを体験するには?

のは、どのように最終的にSIMD性能の味を見てみましょう。以下は、すべての数プラス1そのリストに、循環の方法により、2つのサンプルプログラム、それのいくつかです。それの他の部分は、同じ機能を実現することですが、直接の呼び出しは、この方法numpyのライブラリを追加します。二段階の統計では
、プログラムのパフォーマンスを、私ははtimeitのPythonライブラリの内部で直接呼び出します。

パイソン
>>> NPとしてインポートnumpyの
>>>インポートはtimeit 
>>> A =リスト(範囲(1000))
>>> B = np.array(レンジ(1000))
>>> timeit.timeit(「[I + ]でI 1 __main__インポートaから」、セットアップ= ""、番号= 1000000)
32.82800309999993 
__main__インポートNPから>>> timeit.timeit( "np.add(1、B)"、セットアップ= "B" 、番号= 1000000)
0.9787889999997788 
>>>

ビューの2段階の手順・ポイントからの出力は、同じ機能コードのパフォーマンスの二つが大きな違い、完全な30時間の間の差があります。不思議のすべてのチュートリアルでは、サイクルを使用しないようにあなたを教え、そして定量化するために(ベクタライズ)をすべての計算を置くために、最初に、通常ではPythonで科学的データを説明していません。

一部の学生は、Pythonはインタプリタ言語であるため、パフォーマンスの差はそれほど大きくなりますので、それはないが、推測することがあります。関数呼び出しの第2のセクションは、ネイティブコードをコンパイル呼び出している間、プログラム・サイクルの最初の段階は、Pythonインタプリタを実行するために必要とされるすべての操作は、
順序が非常に速くなります。あなたがそう思うならば、1000プラス1内部の配列要素のそれぞれでC言語を直接使用してみてください。あなたも、C言語コンパイラのコードがうまくnumpyの下にまだあることがわかります。その理由は、numpyのを直接使用SIMD命令は、並列ベクトルで動作することが可能である、ということです。

3、なぜそんなに速くSIMD命令は、それができますか?

それは段階的に計算される前のサイクルアルゴリズムを使用して、一般的と呼ばSISD、すなわち単一命令単一データ処理モード(シングルInstructionSingleデータ)です。あなたはそれがマルチコアCPUで手場合の方法、それはと呼ばれる複数の命令処理できる
ためMIMDを、つまり、MIMD(複数命令複数DATAA)。

なぜSIMD命令はそんなに速くを行うことができますか?SIMD命令の実行とデータの取得が並列に行われる場合、これはあります。一の態様では、データを内部メモリから読み出されるとき、SIMDは、一度に複数のデータを読み出します。

我々の上記のプログラムを取る、例えば、アレイは、各エントリは、メモリ空間の4つのバイトを必要とされる整数です。インテルSSE命令セットを導入するときにCPUに128ビットは8つのレジスタを追加します。128ビット、すなわち、16バイトのある
レジスタは、使い捨ての4つの整数をロードすることができます。より4時間は、それぞれの時間が保存され、データの読み出しサイクルに対応します。

命令レベルの実行後にデータを読み出すために、SIMDも並行して行ってもよいです。四各整数プラス1、に対処するために何の冒険の問題はありません、前にお互いに依存していませんでした。限り十分なCPU機能ユニットが存在するように、これらの計算を同時に行うことができ、この添加は、
当然、それは時間を節約し、同時並行4です。

だから、SIMDを用いた本計算レベルで計算されたもの大「データの並列」(データ並列処理)のために非常に費用対効果の高い方法です。「データ並列」のこの大規模な数では、実際には、多くの場合、ベクトル演算や行列演算の練習です。実際のプログラム開発で
プロセス、通常は過去のピクチャ、ビデオとオーディオの処理中に。近年では、それは通常、計算するために、様々な機械学習アルゴリズムの間です。ベクターは、SIMD命令に基づいて算出された場合、それはまた、Pentiumプロセッサインテルでリリースされ、それが命令セットに導入されます。その時命令セットで
呼ばれるMMXマトリックス数学の拡張子の略で、中国名は、行列の数学の拡張機能Pentiumプロセッサは、マルチメディア処理を実行する能力を持って初めてCPUです。また、SIMDとMMXの贈り物のおかげです。

ペンティアムの時代から、我々は、とした特別な「サウンドブラスター」または「大幅Paのカード」を購入することなくMP3、VCDへのコンピュータに聞くことができます。はい、その前に、コンピュータのVCDに、特別なハードウェアを購入する必要があなたのコンピュータまでにVCDを復号することができるです。そして、これまで
の日、深い学習GPU技術により、このようなプログラムは、GPUを説明バックに、我々はそれに遭遇する同じSIMD命令レベルの並列の恩恵を受け、急速に開発しました。

IVの概要拡張

このレッスンでは、我々は「並列計算」プログラムとハイパースレッディングSIMD 2つのCPUを終えました。ハイパースレッディングは、実際には、「スレッドレベルの並列」ソリューションです。これは、CPUが実行できるように、2つのCPUコアロジック・レベルを「ふり」、物理CPUコアを持つことである
命令の2つの異なるスレッドを。が、これはまだ制約のすべての種類を実行する必要があり、ハイパースレッディング多くのシーン必ずしもパフォーマンスのCPUを持っていません。しかし、Intelのハイパースレッディングは、ユーザーが感触を持ってできるようにする「安い占め」。4同じコアCPU、いくつかのケースでは缶が
8コアCPUの役割を果たしていること。そして、ハイパースレッディング今日、それはインテルのCPUで標準となっています。

そして、SIMD技術は、それが「ILP」加速プログラムである、または私達はそれが「データ並列化」加速プログラムであると言うことができます。同じ次元のベクトルと異なって算出するベクトル算出処理は互いに独立している場合。当社のCPUレジスタ
デバイス、だけでなく、データの断片をそれを置きます。したがって、我々は、CPUの並列コンピューティング、データの使い捨て部分を除去することができます。

SIMD技術は、個人のPCでの当社の能力のペンティアムの時代を作り、マルチメディアコンピューティングを持つようになった表示されます。IntelのMMX、SSE命令セット、および、そのようなグラフィカルなインターフェイスとしてMicrosoftのWindows 95オペレーティングシステムは、すぐに家族の歴史的プロセスを入力するようにPCをプッシュする、と言うことができます。

おすすめ

転載: www.cnblogs.com/luoahong/p/11442013.html