BSD-annex (20056) の日記

○ ◎ ●

FreeBSD: インテル製 icc コンパイラのサポート開始

BSD-annex による 2004年03月14日 0時45分 の日記 (#202778)
●情報源
  current ML
  FreeBSD おぼえがき

Alexander Leidinger から current へのメールが投稿された。

(メールの内容)

Tom Rhodes が私の icc 用パッチをコミットした。これは gcc を使用した コンパイルには何の影響も与えない。しかし、インテル製の C/C++ コンパイラ を用いたカーネルのコンパイルを可能にするものである。

icc でカーネルをコンパイルするには、/usr/ports で lang/icc7 の最新版(ついさっき、私が更新を かけたばかりだが)を既に入手 していることを確認して欲しい。 そして、post-install のメッセージで要求されているように、icc7 の bin ディレク トリを PATH に加えて欲しい。 不幸なことに、lang/icc (これは icc v8 だが) でカーネルをコンパイルすると 壊れたカーネル(FPU を見つけられない)ができてしまうので注意して欲しい。

加えて、world を構築しインストールするには、share/mk を更新する 必要がある。

新しいカーネルコンパイル用のディレクトリ (例えば、config -d ../compile/MYKERNEL_icc MYKERNEL を入力する) を作ったなら、そこに cd して欲しい。 icc でコンパイルするのは、gcc でコンパイルするのとほとんど同じである。 構築システムに icc をコンパイラとして使用することを伝えればいいだけである。 例えば、"CC=icc make depend && CC=icc make" のようにコマンド入力すればよい。

ここで、コマンドで定義するか、make.confを修正するかして、適切な CFALGS が 付加されるようにしなければならない。

---snip---
.if ${CC} == icc
CFLAGS=-O2 -ip
COPTFLAGS=-O2 -ip
.else
CFLAGS=-O -pipe
COPTFLAGS=-O -pipe
.endif
---snip---

コンパイル時に -ipo を指定してはならない。構築システムは ld を使って直接 カーネルとモジュールをリンクするが、-ipo はリンク処理にインテル製のリンカー を呼び出してしまうからである。

もしサウンドモジュールをカーネルに加えようとすると、現在のカーネルは 失敗するので注意して欲しい。

icc でコンパイルしたカーネルに、gcc でコンパイルしたモジュールを 使うことは可能である。この逆も可能である。

P4 で最適化したカーネルは P4 の上で以前より速くブートするように感じるが、 何らかの測定手段で確認したわけではないので、現実を無視した妄想だったかも しれない。もし誰か何かのベンチマーク(どういうものがあるかよく知らないが) を走らせたなら、是非結果を知らせて欲しい。

今初めて icc をインストールしようとする人には、port がどこからダウンロード するか教えてくれるだろう。見つけられない人は、ダウンロードのやり方を 注意深く読んでいないからだろう。icc について特に何も情報を送らないし、 私に尋ねないで欲しい。

コミッタ-諸氏へ:
我々は icc の商用ライセンスを持っているので、icc でコンパイル したバイナリの配布を許可されている。(icc でリリース全体を構築するには、 まだ程遠い状況ではあるが)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

普通のやつらの下を行け -- バッドノウハウ専門家

処理中...