剛介2010/2/15CPUの周波数の高速化競争が頭打ちになり、1コアにおける処理能力は限界となった。-ベクトル演算を積極的に用いてプログラムを高速化する方法を説明します。CPUの持つベクトル演算という機能は、第2回「現代のプロセッサと並列実行」でも解説しましたが、おさらいしておきましょう。ベクトル演算とは、CPUの持つ命令のうち、複数個の整数値や実数値に対して1つの演算を同時に実行させるものです。4個の32bitデータを1個の128bitデータにまとめ、op演算を行う場合のベクトル演算は、図1のようになります。SSE演算器PCの世界で有名なIntelのプロセッサもベクトル演算を持っています。いわゆるx86アーキテクチャのベクトル演算としては、最初にMMXが登場しました。Intelのプロセッサでは、複数のスカラデータをベクトルデータにまとめたものをパックドと呼んでおり、8bitデータをまとめたものをパックドバイト、16bitデータをまとめたものをパックドワード、32bitデータをまとめたものをパックドダブルワードと呼んでいます。MMXでは、8個の64bitMMXレジスタに置かれた、パックドバイト、パックドワード、パックドダブルワードの整数に対してベクトル演算を行うことができました。その後、同社はさらにベクトル演算を強化したSSEを世に送り出します。扱えるようになりました。簡易化、キャッシュライン分割ロード防止のための命令を扱えるようになりました。SSSE3では、デジタルビデオと信号処理に関する命令が増えました。SSE4.1では、ビデオ、画像処理、3Dを高速化する命令が追加となり、また、パックドダブルワード演算が強化されました。SSE4.2では、いわゆる数値計算のための命令だけでなく、文字列操作のための命令もサポートされました。これによって、Cの標準ライブラリにあるstrlen()関数のような基本的な文字列操作について、SSEによる高速化が期待できます。後にx86は拡張され、64ビット・モードを持つようになります。64ビット・モードではXMMレジスタが16個になりました。XMMレジスタ(64bitモード)以上のように、SSEは段階的にさまざまな命令やレジスタを追加しています。詳しくは、Intelが提供している「インテル(R)64アーキテクチャーおよびIA-32アーキテクチャー最適化リファレンス・マニュアル」を参照してください。ベクトル演算以外にも現行のx86系プロセッサの構造全般について丁寧に記載されている資料ですので、これから同プロセッサを学ぼうとする方に適していると思います。Engine(Cell/B.E.あるいはCBEあるいは単にCellと略される)もベクトル演算器を持っています。Cell/B.E.は、PPEとSPEの2種類のコアを内包しています。PPEでは、VMXと呼ばれるベクトル演算器を持っています(ほかのPowerPC系プロセッサにおけるベクトル演算器の名称から、Altivecと呼ばれることもあります)。SPEは、PPEとは独自の命令セット持っています。SPEは、ベクトル演算を基本としたプロセッサで、四則演算などほとんどの命令はベクトル演算となっており、128bitレジスタのみを128個持っています。SPEの性能を引き出すためには、ベクトル演算を使いつつ128個あるレジスタを有効活用する必要があります。SPEレジスタSPEのベクトル演算では、128bitのレジスタを8bit×16個、16bit×8個、32bit×4個、64bit×2個、128bit×1個の形で扱う命令があります。SPEでスカラ演算を行いたい場合には、128bitレジスタ内の特定の場所(プリファードスロットと呼ばれる)にスカラデータを入れたベクトルデータに対してベクトル演算を行い、ベクトルデータの結果のうちスカラデータが格納されている場所を使用します。スカラデータを入れた以外の部分は、演算が行われるものの結果は捨ててしまいます。スカラ演算であっても、内部的にはベクトル演算が行われます。Handbook」を参照してください。SPUのベクトル演算以外にもCell/B.E.系プロセッサの構造全般について丁寧に記載されている資料ですので、これから同プロセッサを学ぼうとする方に適していると思います。フィックスターズでもCell/B.E.に関する総合的な情報を掲載しています。World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。(2017/7/6)日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。Excel」で使えるVBAを紹介する。