
R言語付属のサンプルデータセットを経めぐってます。今回はMASSパッケージ内の cpus というデータセットです。1980年代前半くらいの「コンピュータ」のCPUの仕様と性能をまとめたデータみたいです。ただしメインフレーム、ミニコン辺が中心、マイクロプロセッサ系の装置はほとんど無です。懐かしいのは年寄バカリ?
※「データのお砂場」投稿順Indexはこちら
Performance of Computer CPUs
今回のサンプル・データ・セットについての解説ページが以下に。
https://stat.ethz.ch/R-manual/R-devel/library/MASS/html/cpus.html
元になったのは、ACMのCommunications誌に掲載された1987年の論文のデータのようです。209機種ものコンピュータのモデルを比較した労作のようです。主眼は性能評価の数字とその推定値かもしれませぬ。残念なことに対象は、大型機、ミニコン主体です。ざっと見たところ、マイクロプロセッサ・ベースのマシンはアポロ社のワークステーション(68K系統のマイクロプロセッサを登載していた。「ワークステーション」でだしの頃には人気だった。)くらいではないかと。既にIBM-PCや、SUNワークステーションも登場していたハズの時代ですがそいつらは含めてもらえてません。論文執筆者にはまだ玩具に見えていた?
お惚け老人は意外と若いので、それほど多くの機種にお世話になったわけではございません。しかし、懐かしいお名前がチラホラしてますぞ。ついサンプルデータベースのお名前のフィールドを列挙したものにマーカを引いてしまいました。
黄色のマーカつけた中でDEC社の VAX 11/780、そして uVAXにはお世話になった記憶がアリアリ。当時の世界のベストセラー・ミニコンとその廉価版の小型機です。今に残る「MIPS」という単位はVAX 11の上で初めて現れた筈(確か測定はドイツ?)1Mipsの基準であります。 また、同じDEC社の「大型機」DEC System-10と、20のところに緑印をつけました。確かに使った記憶があるのですが、よる年波です。どっちゃの機種を使わせていただいたのか定かでありませぬ。これはこれでクセ強なマシンでした。そしてIBM機は多数列挙されている中で、3081の後の空白に黄色のマーカを引いてしまいました。これまた朧げな記憶によれば、かのベストセラー IBM 3090にチラリとお世話になっていたからです。まあ、3270端末からチッカ、チッカと半二重通信でエディタを動かして、ジョブ流していただけなんだけれども。
なお、青のマーカつけたAPOLLO社のDNシリーズはワークステーションの草分けです。SUNワークステーションより早かったはず。「アポロ/ドメイン」とOSのお名前もくつけて呼ばれることが多かったような。モトローラ(後のフリースケール)のマイクロプロセッサ68Kシリーズご採用。残念ながらお惚け老人は縁なし。
懐かしんでばかりもいられないので、サンプルデータベース内の変数を列挙します。
-
- name、製造会社とモデル名
- syct、サイクル・タイム、単位 ns
- mmin、主記憶最小容量、単位 kB
- mmax、主記憶最大容量、単位 kB
- cach、キャッシュ最大容量、単位 kB
- chmin、チャネルの最小数
- chmax、チャネルの最大数
- perf、 IBM 370/158-3を基準としたベンチマークMIXの相対性能(公式).
- estperf、Ein-Dor氏とFeldmesser氏(論文の著者)による推定性能
まずは生データ
さきほどちらっと眺めたお名前以外は、皆整数であります。サマリをみてみるとこんな感じ。
黄色でマーカつけたところは、値が0になる変数があるということです。重回帰分析するときに log10 とるような処理例を見かけたのだけれど、該当のフィールドについては値0が混じっているのでそこの始末をどうつけるか考えておかないと対数とれませぬなあ。今回は面倒なので対数は使わず。手抜きだな、自分。いつものことよ。
一方、syctのサイクルタイム、そういえば昔はメインフレームの人は 何ナノ秒とかよく言っていた記憶があるけど、どうも周波数にしないと体感がついてきませぬ。半導体業界は昔から動作周波数で言う習わしだったし。そこで以下のようにして、MHz換算したスピードを加えておきました。
MHz <- 1000/cpus$syct cpus_MHz <- cbind(cpus, MHz)
性能は動作周波数に比例しとる筈
ぶっちゃけ、性能はクロック周波数に「だいたい」比例しておるというのが常識であります。そこで以下のようにして回帰直線付きのプロットを描いてみました。
lm_MHz <- lm(perf ~ MHz, data = cpus_MHz) summary(lm_MHz) plot(cpus_MHz$MHz, cpus_MHz$perf, xlab = "Speed[MHz]", ylab = "Performace", main = "CPU Performance", xlim=c(0, 65)) abline(lm_MHz, col="red") text(x=43.5,y=1144,labels="AMDAHL 580", pos=1, col="red") text(x=33.3,y=1150,labels="SPERRY 1100/94", pos=1, col="blue") text(x=58.8,y=116,labels="IBM 4381-2", pos=3, col="green") text(x=58.8,y=100,labels="IBM 4381-1", pos=1, col="orange")
上辺と右辺にはりついた4機種について、textつかって機種名を記載しましたが、機種名とその表示位置の指定は以下のコマンドの結果からチマチマ手入力したもの。
cpus_MHz[cpus_MHz$perf>1000,] cpus_MHz[cpus_MHz$MHz>50,]
キャッシュは多い方が速い?
サンプルデータベースの機種の中にはキャッシュ登載もそうでないものもありますが、沢山登載している方が速そうな気がします(気がするだけだけれども。)
その場合の回帰直線を描くコマンドが以下に。
lm_cach <- lm(perf ~ cach, data = cpus_MHz) summary(lm_cach) plot(cpus_MHz$cach, cpus_MHz$perf, xlab = "Cache Size[kB]", ylab = "Performace", main = "CPU Performance") abline(lm_cach, col="red")
プロットが以下に。
上のグラフみると、キャッシュ無でも速い機種はあるのう。キャッシュ無の群れの中では断トツの38MHz動作、IBM 3083Bとな。ホントに?


