x86 に 3 オペランド論理演算命令と新キャッシュフラッシュ命令が追加

将来の Intel x86 CPU に追加される機能を先出しで解説する Intel Architecture Instruction Set Extensions Programming Reference が Mar. 2014 に改定され -019 になったようだ。前回は -016 の日記を書いている(id:nminoru:20140529:intelcpu)。しばらくチェックを怠ったら一つ飛んだ。

https://software.intel.com/en-us/file/319433-019pdf

主に -016 から入った機能の修正だが、AVX に TERNARY BIT VECTOR LOGIC TABLE(VTERNLOG) という命令群と CLFLUSHOPT 命令が追加されたのが新しい

TERNARY BIT VECTOR LOGIC TABLE(VTERNLOG)

VTERNLOGD/VTERNLOGQ 命令という 3 つのオペランドをとることが可能な論理演算命令が追加される。命令のプレフィックスから AVX 命令だと思われる。

A、B、C という 3 つのオペランドを入力としてとり、第一オペランドの A に結果を書き戻すことになる。どのような演算を行うかは、8 ビットの即値フィールドの内容によって変化する。たとえば

A = A and B xor C

のような設定が可能だ。

また C 言語の参考演算子のように、どれか一つを判断条件に指定することも可能になっている。

A = B ? A : C

命令フォーマットなどの詳細な仕様はまだ公開されていない。

追記 (2015/6/19)

Intel Architecture Instruction Set Extensions Programming Reference に -022 が公開され、もう少しはっきりわかった。

  • ニーモニックは VPTERNLOGD/VPTERNLOGQ
  • AVX-512 の 3 オペランドのビット演算命令
  • 演算パターンは 8 ビット即値フィールドが与える 256 パターンがとれる。
    • A, B, C のいずれかを定数値(1 or 0)で置き換える。
    • NOT, AND, OR, NAND, NOR, XOR, XNOR
    • A ? B : C のような選択パターン
    • ちょっと変わり者の major(A, B, C) と minor(A, B, C) がある。major は 3 つのビットのうち 2 個以上が 1 なら 1、それ以外は 0。minor は 2 個以上が 0 なら 1、それ以外なら 0 というもの。

CLFLUSHOPT

CPU キャッシュを追い出す命令として CLFLUSHOPT 命令が追加された。もともと CLFLUSH 命令の代わりに使うように指示されている。
CLFLUSH と CLFLUSHOPT の違いは、CLFLUSH と他の命令との間にバリアをはり実行順序を指定するには MFENCE 命令を使う必要があったが、CLFLUSHOPT 命令は SFENCE 命令によっても順序化される点である。通常の使い方では CLFUSHOPT を後方のロード命令が追い抜いていくことが可能らしい。

Intel が Xeon チップに FPGA を搭載予定

IntelXeon チップ内にサードパーティ製の FPGA を搭載するという計画を披露したようだ。
FPGA ベンダーはいくつかあるが、公式な発表はないものの Altera 製の FPGA を搭載するというのが有力のようだ。Altera は Xilinx と並ぶ FPGA ベンダーだが、Intel のファブで FPGA を製造するなど関係が深まっており(id:nminoru:20130303:intelfab)。

もともと ASIC を起こすほどには数が出ないが性能が必要な通信処理などに FPGA は使われていたが、最近は用途が広がり HFT などのアルゴリズムトレードに使われたり、MicrosoftBing の検索に FPGA を使うなどしている。Intel CPU は AES-I 命令や SHA 命令など特定の処理に特化した命令を増やしているが、これもいずれは限界が来るだろう。また専用命令は全ての人にとって必要な命令とは限らない。今後は専用命令の代わりに FPGA を使って専用処理の回路を組む時代が来るのかもしれない。

Fusion-io が SanDisk に買収される

  1. Reuters | SanDisk to buy Fusion-io to boost flash storage business
  2. Business Insider | Steve Wozniak's Troubled Company, Fusion-io, Is Being Rescued By A $1.1 Billion Acquisition
  3. Publickey | Fusion-ioがSanDiskによる買収合意へ。迅速なグローバル展開を優先させるためか

6月16日付けで Fusion-io が SanDisk に買収された。買収金額は 11億ドルである。2011年の上場時は時価総額が 18.5億ドル程度なので、4割ほど棄損している。
2. の記事によると Fusion-io の創業者の David Flynn と Rick White は 2013 年に退社しているが、Flynn は 6% ほど株を持ち続けていたようだ。

x86 に AVX-512、SHA Extensions、Memory Protection Extensions(MPX)、Processor Trace(PT) が追加

将来の Intel x86 CPU に追加される機能を先出しで解説する Intel Architecture Instruction Set Extensions Programming Reference が Oct. 2013 に改定され -016 になったようだ。前回は -014 の日記を書いている(id:nminoru:20121003:intelcpu)。しばらくチェックを怠ったら一つ飛んだ。

http://software.intel.com/sites/default/files/319433-016.pdf

一つ前の -015 で AVX-512、SHA Extensions、Memory Protection Extensions(MPX)、Processor Trace(PT) という機能が追加された。-016 はドキュメントの修正が主で新機能の追加はないようだ。

AVX-512

AVX、AVX2 に続いて 512-bit SIMD の AVX-512 が追加される。32 本の 512-bit SIMD レジスタ(ZMM0〜ZMM31) と 8 本の opmask レジスタ(k0〜k7)が追加されるようだ。
新しい命令プレフィックス(EVEX)は62Hから始まる4バイトだそうだ。x86 命令デコーダーを書いている人はご愁傷様です。

SHA Extensions

SHA Extensions は Secure Hash Algorithm(SHA) のうち SHA-1 と SHA-256 の処理を高速化する命令群。7 命令が追加される。SSE 4.2 と同時期に AESNI extensions と呼ばれる Advanced Encrpytion Standard(AES) を扱う 6 つの命令が追加されたが、その続きのようだ。
SHA Extensions を導入すると、この手のハッシュアルゴリズムのうちメジャーなものは全てサポートしたことになるので、この系統の命令追加は一段落する?

Memory Protection Extensions(MPX)

Memory Protection Extensions(MPX) はユーザープログラムと OS に対してアクセス許可区間を設定し、違反すると例外(#BR exception)を発生させる機構だ。区間を指定するために bounds registers が追加されている。supervisor-mode と user-mode で別々に有効になる。この保護機能を使うとバッファオーバーランを禁止したり、マルチプロセスであってもスレッド毎にアクセス可能な領域を絞ることができる。

Bounds registers は 4 本(BND0 〜 BND3) があり、64 ビットアドレス空間中に Upper Bound(UB) と Lower Bound(LB) を設定できる。Bounds registers へ区間の設定は BNDMK 命令で行うのが基本だ。BNDMK 命令を実行する前に Upper bound と lower bound を組にした 128-bits (16バイト)をメモリに置いておく。BNDMK 命令は区間情報の置かれたメモリアドレスと 0〜3 の bounds register の番号を指定してロードする。区間情報をレジスタで渡さずにメモリ上に配置したのは、次にある Bounds Directory(BD)-Bounds Table(BT) との整合性を付けたかったと思われる。

MPX は 4つしか区間情報を設定できないので、bounds 情報の入れ替えが必要になる。そのため仮想メモリ空間のアドレスに紐付ける形で区間情報のテーブルを作っておき、BNDLDX/BNDSTX 命令を使ってある仮想メモリ空間中の 1 点を指定してそのアドレスに紐付けられた区間情報を bounds register にロード可能にする。x86-64 は 64 ビットだが仮想アドレス空間は 48 ビットしかない。MMU/TLB は 4 段のページテーブルで処理しているが、MPX では 2 段の Bounds Directory(BD)-Bounds Table(BT) で処理する。48 ビット仮想アドレス空間の上位28ビット(47-20)を使って BD 中のエントリ(BDE)が引かれる。BD の大きさは 2GB で、BDE は 64-bit。BDE に BT へのポインタが入っている。仮想アドレスの残りの下位ビットで BT が検索され、BT 中のエントリ(BTE)が引かれる。BT は 4MB で、BTE は 256-bit (32 バイト)である。BTE には Upper bound、Lower bound、任意のデータが格納できる 64-bit スロットと、64-bit の予約領域からなる。BD も BT も物理アドレス空間ではなく、仮想メモリアドレス空間に配置する。

BD-BT 構造を用意するのが OS なのかライブラリなのか、どうやって使えばよいかフレームワークがはっきりしない。実際の CPU が出るまでにソフトウェア屋さんでいろいろ議論してちょーだいというスタンスなのかもしれない。

MPX は x86 のメモリアクセス命令一般のアドレスをチェックするのではなく、新設された BNDCL/BNDCU/BNDCN という境界チェック命令でのみチェックができる機構だった。そのためコンパイラJIT が MPX 命令をコード中に埋め込まないと効果がない機構だ。名前から期待できるものと実態が大分違う。

Processor Trace(PT)

Process Trace(PT) は CPU に関する様々なイベントを data packet という形でトレースする機能らしい。つまり何かイベントが発生すると、指定されたメモリ領域にイベント内容を記した data packet を順に書いてゆくという機能だ。
PT は将来を見据えた大きなフレームワークのようだが、まず control flow traceing 機能を用意とのこと。x86 にはデバッグ機能として Branch Trace Store(BTS) という機能があったが、PT は BTS の置き換えになるようにみえる。

Ceph の開発元の InkTank 社が Red Hat に買収される

Red Hat が Ceph の開発元である InkTank 社を 1.75 億ドルで買収されたという驚くべきニュースが流れている。OpenStack に積極的にコミットしてきた Red Hat が、OpenStack のストレージとして成長していきている Ceph を取り込んだ形だ。
だが Red Hat は GlusterFS の開発元である Gluster 社も2011年10月に 1.36 億ドルで買収し、Red Hat Storage という名前で製品化している。GlusterFS と Ceph は分散 FS という点では機能が被っているのだが、どういう棲み分けにするのか、あるいは GlusterFS は最終的に止めてしまうのかは分からない。

VMware と Microsoft が共同で GENEVE の仕様ドラフトを策定

VMwareIETF に提案した VXLAN は、物理ネットワークやレイヤー3境界を越えて仮想的にレイヤー2ネットワークを構築する技術だった。このような技術を network overlay encapsulation protocols と呼ぶ、らしい。VXLAN は離れた位置にあるデータセンタ内のマシンxを単一の VLAN に組み込みたい場合に使う。また VLAN は仕様上 4096 個までしか作れなかったのを、VXLAN では 16,777,216 個までに緩和している。競合技術に Microsoft の NVGRE、Stateless Transport Tunneling(STT) があった。

Generic Network Virtualization Encapsulation (GENEVE) は第二世代の network overlay encapsulation protocol だ。多分、「ジュネーブ」と発音すると思われる。今度は VMwareMicrosoft が手を組んで仕様を統一しようと試みている。Network overlay encapsulation protocol の仕様はスイッチのシリコンに焼き付ける必要があるため、ソフトウェアで作るように気軽に変えられないし、スイッチベンダーがどちらの仕様を採用するかで勢力争いが起きる。第二世代ではそれを避けようというものらしい。

真偽は定かではないが MNP 優遇が終了したのは確かだ

携帯キャリア三社によるインセンティブが、先月〜今月を通じて大幅に削減されている。