English

FreeBSD で SSE 命令を使おう


通知

このパッチは、既に FreeBSD に取り込まれています (FreeBSD 4.4-RELEASE 以降)。

更新情報

Wed Jun 20 17:25:02 JST 2001 / sys-r500-SSE-2.diff.gz
FreeBSD 5.0-CURRNET (2001/06/20) 用の patch を作りました
Fri Mar 2 21:02:20 JST 2001 / sys-r500-SSE-1.diff.gz
FreeBSD 5.0-CURRNET (2001/02/28) 用の patch を作りました
Wed May 17 09:07:40 JST 2000 / sys-r400-SSE-5.diff.gz
マルチプロセッサシステムをサポート
Submitted by 加藤丈和 <kato@chino.it.okayama-u.ac.jp>

背景

Intel ® は Pentium ® プロセッサをデザインする際に、既存の IA-32 命令にいくつかの新命令を追加し、それを SSE (ストリーミング SIMD 拡張) と名付けました。 この拡張は単一命令流、複数データ流 (SIMD) モデルに基づいており、複数のデータを一度に操作することができます。 SSE を使うことでアプリケーション、特に浮動小数点演算を使用するものの性能を向上させることができます。

SSE を使用するためには、最低でも SSE 命令を扱えるアセンブラと、オペレーティングシステムによる次のような補助が必要です。

  1. プロセッサの制御レジスタを操作し、SSE を有効にする (具体的には %cr4 の 25, 26 ビット目を 1 にする)。
  2. プロセスコンテクスト切り替え時に SSE レジスタの待避/復元を行う。
  3. SSE 関連の例外を処理するハンドラを作成する。

GNU binutils 2.10 では SSE をサポートしていますが、FreeBSD のカー ネルは SSE をサポートしていません。

変更差分

次の変更差分は FreeBSD に基本的な SSE 命令のサポートを提供します。 私が FreeBSD 4.0-RELEASE と FreeBSD 5.0-CURRENT (2001/02/28) で試した範囲では、うまく動いているようです。

使い方

  1. GNU as を再構築し SSE 命令を扱えるようにします。
    # cd /usr/src/contrib/binutils
    メモ: この作業が必要なのは FreeBSD 4.0-RELEASE だけです。FreeBSD 5.0-CURRENT を使っている場合には無視して下さい。
    # zcat /some/where/binutils-291-SSE.diff.gz | patch -p2
    # cd /usr/src/gnu/usr.bin/binutils
    # make install
    	
  2. カーネルのソースコードにパッチを適用します。
    # cd /sys
    # zcat /some/where/sys-rXXX-SSE-X.diff.gz | patch -p2
    	
  3. カーネル設定ファイルに "options CPU_ENABLE_SSE" と追加し、カーネルを再構築します。
    # cd /sys/i386/conf
    # echo 'options CPU_ENABLE_SSE' > MYKERNEL
    # config MYKERNEL
    # cd ../../compile/MYKERNEL
    # make depend; make
    	
  4. 新しいカーネルをインストールし、OS を再起動します。
    # make install
    # sync ; sync ; sync
    # shutdown -r now
    	
  5. カーネル変数 hw.instruction_sse を調べてください。 この値が 1 になっていれば、カーネルで SSE 命令のサポートが有効になっています。
    % sysctl hw.instruction_sse
    hw.instruction_sse: 1
    	

今後の課題

  1. 例外ハンドラの実装

関連リンク


Copyright © 2000, 2001
Issei Suzuki <issei@issei.org>