こういう記事を見ると、自分の知識の無さを痛感する

先に行っておくと、以下かなりあやふやな*1知識を元に書いてるので、適当なこと言ってる可能性が強いです。あんまり信用しないで下さい。^^;

つか、メチャクチャな事言ってたらどうしよう… orz




SSE4命令とアクセラレータから見えるIntel CPUの方向性


MMX / SSE / SSE2 と来て SSE3 が(何時の間にか)実装され、次は SSE4 ですかーという所なのですが…もうね、記事内容が難しい難しい。解らない。 プログラマコンパイルし生成した実行バイナリを動作させる CPUちゃん の中のお話だというとに何たること…

ILP

今まで "ILP" なる単語を聞いたことはあったのですが、この記事で初めて「Instruction-Level Parallelism」という略称であることを学ぶ。「命令レベルでの並列性」で、同時にいくつの命令が実行できるかー とかなんちゃらにつながってくるのだろう。多分。

しかし、私の今までの知識との関連がわからない。

  • 2命令同時実行
  • ペアリング

と、どう繋がってくるのか。*2少なからず 「2命令同時実行 == ペアリング」 だとは思うんですが、確かな情報が無し…。ギギギギギギ。

ついでに「ILPが上がる == 3命令, 4命令と並列実行が可能になる」…とは考えづらいので*3、結局 ILP が何を指してるのかが解らない。ILP の Instruction は一体何を指しているんだろう…。いや命令なんだろうケド、となると3命令・4命令が可能になっちまう…。なんだ…? ギギギギギギ。

フェッチとかその辺も絡んでくるのかしら…?

DLP

で、ILP とは別に DLP(Data-Level Parallelism)があると。こいつは初耳でしたが、ある程度は理解できる/出来てる気がする。

汎用レジスタで1個1個データを処理していたのを、XMMレジスタ(==SSE用のレジスタ)を利用して float x 4 とか double x 2 とか byte x 16 とかデータを複数一気に処理できる命令セットを用意して*4、ごっそり処理しようじゃないかと。一度に複数のデータが処理できるわけだから、全体の処理速度は向上するよねって。多分こういうことだろう。

実際、初代SSEが生まれたことにより float x 4 が処理できる命令が追加され、Direct3D (==3Dゲーム)は大きく処理速度を向上できた。物理演算採用とかもよく言われるようになってきた。 午後のこ〜だも、SSE用にチューンナップされたコードがある*5Yamaha も SSEを利用して "Poly VL" なんちゅー VL音源を8個までエミュレートさせるソフトシンセを生み出していた。まぁ、そのあと流行もせずに消えてしまったけれども

ただ、上手い具合にSSEを利用してあげないと、結局意味が無いというオチはあるハズ。^^;

開発側(つか私)として困ったこととして、どこまでの SSE が搭載されているか…という以前に、そもそも SSE が搭載されてるかは環境依存になってしまうので、結局 どの環境でも動作する x87 命令のみのコンパイルで済ませちゃうとかですね、もうね(ry



うちは PenII-450MHz の Dual CPU 環境が稼動中かーーしらーーーーー!!!!(死ねよ

SSE4 について思う

ところで SSE4 について

SSE4の特徴はコンパイラによる自動ベクタライゼーション(ベクタ化)を支援する命令を中心としていることだ。

なんて記載されてますけど、なんでこんなの搭載する必要があるんだろうみたいな。

C++ コードのビルドは開発側だけ。STL と template/inline による最適化コンパイルでうっとりするのは開発側だけでいい。 boost::lambdaコンパイル時間が長くて悩むのは開発側だけでいいんですよと。orz*6


こんな風にコンパイルなんて作業は開発側でしか行わないのに、全てのプロセッサに搭載必要性はどこにあるんだろうと思ってみたわけです。

が、これは Java とか .NET (CIL) 等の中間言語を、その環境で最適なバイナリコードに落とす為に活用出来るのではないかと気づいてみた。


Java 動作原理はぶっちゃけよくしらんのですけど(ぉ、少なからず CIL については「その環境でコンパイルされて実行される」ハズなので、十分に有用性があるよなーとか思ってみたり。起動(==コンパイル)が早くなって実行も早くなるという。素晴らしい。

中間言語系じゃなくても、JavaScriptphp とか、スクリプト系, インタプリタ系等、実行時にコンパイルされるような言語だと、実行環境の実装方法によっては活用される場面がくるかもしれない…?(本当か?)



まぁ少なからず、内積などの普通の算術命令系も搭載されるようなので、個人的には期待してます。内積の活用方法なんて未だにわかりませんけどね HAHAHA!! (※一応 Direct3D を弄くるプログラマですが無害です)

策士は策に溺れている可能性があります

でまぁ、最近技術系の話題を喋っていなかったとか、そもそも最近文章を書いていなかったとかいう反動により、知識が中途半端であるにも関わらず勢いだけで長文書いちゃいました。というわけで


間違ってる部分は誰か指摘してください。orz


間違った所は指摘してもらわないと、わからへんのよねー…。教えて、エロイエライ技術屋さん。



…ううう… Aliceへの道は厳しいのかしら…

そして時代は既に次のステップへ

AMD、新たなx86拡張命令セット「SSE5」

SSE5 だってさー。ヘー。ヘー。ヘー。



… ついていけねぇ。orz

*1:かなりあ やふや … どうでもいいやね。ハイ。

*2:つか、ある程度知っているのは、後者のペアリングのみだったり。

*3:んな簡単に増やせたらえらい手軽に高速化できるやん

*4:SIMDやね

*5:まぁ MMX / 3D Now とか、各インストラクショングループで最適化されたコードがすべてあるんですけども

*6:自動SSEコード生成とはあんまり関係ない例だけやなぁ…