先日上がった
記事によると、
以前から発表はされてた、とてもManyコアなCPUが販売されるようです。
24コア/48スレッドでデータセンター向けだそうです。
確かに、一般PCでコレを有効活用するのは無理そうですが・・・本当にそれだけでしょうか??
CPUの処理能力の上限が生まれた理由は、メモリとCPUの距離の問題です。
486迄はメモリアクセスノーウェイトと言われるのが普通でしたが、CPUの高速化と共にメモリとの物理的な距離が問題になってきました。
ノースブリッジを介しての接続がCPU直の接続に切り替わったりもしましたが、それでもGHz単位で動くCPUに対して、未だに666〜800MHz程度で動いているメモリというのはとても遅いのです。
それでもSDRからDDR、DDR2等に進化するに従い、メモリのバースト転送とかブロック転送とか呼ばれる手法でCPUのキャッシュを満たし、メモリに直接データを読みに行かなくてもいいような作りにしてきましたが、それでもやはりメモリに読みに行かなくてはならない状況は多数生まれるわけですから、いかんともしがたいのです。
そこで何を行ったかお分かりでしょうか?
HyperThreadingとか言うので、メモリアクセスの遅延を、別のスレッドの処理をすることで誤魔化すことにしたのです。
しかし当初のHyperThreadingは余り性能が良くなく、失敗作だとか言われていましたが?そんな事もあって、複数のコアを乗せてくる手法をとったり、HyperThreadingを混ぜたり、そう言った手法をとることで、一般のPC(のハイスペックの部類)では4コア8スレッドまで来ました。
もちろん、もっと多くのコアを乗せたCPUを搭載したPCを自作している人も居ますが、まぁ、事実上の問題として、その程度が限界なのです。
何が限界って??
それは、CPUとメモリの距離に起因する、データ不足を解消するための複数スレッドの同時実行です。
メモリ技術はたくさん有りますし、CPUが乗せるキャッシュ量もとても増えましたが、限界というのはあるのです。
あたしのPCで動画のエンコードとかすると、4コア8スレッドで、大体CPUの利用率は8〜9割です。
動画エンコードというのは、同じデータの再利用率が高く、お陰様で、データが足りなくなるのは、次のフレームに進むときくらい?でそれが1割ちょいのアイドル時間になっています。
一般的なデータ処理では、もっとCPUの利用率は下がります。
なぜかというと、同じデータをこねくり回しながら計算をする処理というのは殆ど無いからです。
コンピュータというのは、大量のデータを大量に計算するために作られたものですから、データの方がプログラムに比較してとても多く、同じデータを何度も何度も処理することはあまりないのです。
それなのに、最新のCPUが24コア/48スレッドって何を考えているのでしょうね??
もちろん、無駄とは言いませんよ??
有れば、何かの役には立つでしょうが、48スレッド分のデータを保持できるだけのキャッシュがあるのでしょうか??
その気になるキャッシュ容量は60MB(笑
あたしの使っているDevil'sCanyonは8Mちょいです。コレで8スレッドですから48スレッドというのは6倍ですね?
8Mの6倍は48ですから、数値だけなら60MBのキャッシュメモリは十分と言っても問題は無いのかも知れません。普通のプログラムを動かすのであれば・・・
では、メモリの転送速度はどうでしょうか??
Devil'sCanyonはちょっと古いので・・・最新のCPUのメモリ速度を拝借しましょう。
7770KのKaby Lakeの数値を見てみましょう。
DDR4-2400をサポートしているようですから、約38G
それに対して、このCPUは実クロックも低いですが、対応メモリも余りパッとせず、大した速度ではありません。(4chで一応DDR4-1866には対応していますが、7770kの2倍にも及びません)
キャッシュミスがある程度発生すると、全てのCPUがデータ待ちで止まる可能性も有る非常に危険な状態です。
バランスが余りに悪すぎます。
所で、データセンターってなんだか判りますか??
一般的には、ユーザーが直接使う側のPCではなく、いろんなデータが一ヶ所に集められている場所です。
大企業に数個ある程度か、データセンターという設備を運用している企業が大量に持っていたりします。
他種で数多あるデータを、いろんな所からの要望に従って、処理してその結果を返す仕事をしています。
今でなら、ビッグデータやらディープラーニングとか言う言葉がある程度はやっていますが、どちらも、莫大な量のデータを処理するのが目的です。
計算量が多いのではなく、データが多くて、それぞれのデータへの計算量はそれほど多くないタイプです。
こういった場合、キャッシュミスが発生しやすく、キャッシュメモリの量がどれだけ多くても意味が無いのです。
それに、キャッシュメモリの量がどれだけ多くても、転送速度が大して無いので、キャッシュを満たすだけのデータ転送が出来ない可能性が高いです。
そんな場合でも、データ処理の能力を上げる方法が一つあります。
それが、マルチCPUのコンピュータです。
CPUはそれぞれに大量のメインメモリを保持し、それぞれが、メモリに直接繋がっているわけですから、たとえばで言うのであれば、8スレッドのCPUを6個乗せて24コア48スレッドのコンピュータを作るのであれば、そっちの方が遙かに早いわけです。
インテルも一体何を考えているのでしょうね?
もちろん、用途を限定した特殊なCPUと言うのであれば、判らないではないですが?
データセンター向けとは言え、汎用CPUとしてだすには余りに無計画なスペック。
CPU一個も100万円を超えるようですし、只のデモ用と考えるべきでは無いでしょうか??
それはそれとして、このCPUは8ソケット構成にまで対応しているようですが?
只でさえメモリのバスが弱いというのに、他のCPUからのデータ要求とかが発生するようなプログラムを作ってしまうと、ますます遅くなってしまいますよね〜
まぁ、データセンターのプログラムはWindowsの様に何処のCPUで実行されているのか割らないような状態で動くわけでは無いので、場合によってはCPUを固定して実行しているでしょうし、キャッシュ処理の命令も自分で発効しながら実行するんでしょうからね?ピンポイントで必要なデータだけキャッシュしながら動かすことも可能でしょう。
キャッシュミスをしないように、事前にデータ転送を開始することも可能でしょう。
こうなると、キャッシュ処理がどれだけ上手く回せるかに性能が掛かってきますよね!
何はともあれ、癖が強くて使いにくいCPUということになります。
48スレッドはすごいけど、安くても使いたくない感じではあります。