・L1、L2キャッシュのレイテンシ、gccに関して
970 part2の記事を書いた時、「970のキャッシュのレイテンシはどのくらいか」という、至極もっともな疑問があった。
(これはインタビューを元にした記事なので、いくつかのやり取りは省いてある。)
Peter:L1キャッシュは2サイクル、L2は11サイクルです。
Peter:命令の連続発行は3サイクル毎です。ロード命令を発行した時、独立したデータを扱う命令は3サイクル後に発行されます。
 つまり2サイクルのレイテンシがあるわけです。
David:L1キャッシュのレイテンシ値はリリースした970対応のgccに組み込みましたが、L2の方はまだですね...
Davidは、gccに含まれる、Power4と970の最適化を行うためのチップ仕様記述ファイルのことを話している。
そのファイルにてベクトル演算ユニットのレイテンシ値が間違っていた件で、私は前に彼とメールでやりとりしたことがあった。
WWDCでAppleが使用したgccはちゃんと訂正されていた。(これはわざとそうしたと思われる。が、聞くのを忘れた。)

gccについて興味深いのは、Power4と970の特徴であるグループディスパッチ機構と、gccの持つチップ仕様と一致しない
queueの実装についてだ。結論としては、L1キャッシュ(とその他いくつかの)レイテンシ値は、gccの性能を引き出すために
あえて変更されていた。
David:gccではレイテンシ値に1サイクル足すようにしています。それが良いと思われるので...
 gccのスケジューラはそもそもPower4や970などのチップ向けに設計されていないのです。各種ディスパッチ機構、発行、
 インオーダ/アウトオーダ命令、とにかく複雑なチップなので、コンパイラの最適化には我々とAppleとで
 かなりの労力をかけています。
 正確にチップ仕様を記述した場合よりも性能があがるような値を与えています。繰り返しになりますが、大仕事なんですよ...
 これはチップの性能を最大限引き出すための仕事の一つです。