2023年2月24日金曜日

GPUだけで、OSを立ち上げる事ってできなんでしょうか?コア数が4000とかあるんだから、わざわざCPUなんかいらないのでは?

GPU は特定の計算処理を圧倒的なスピードで実行するためのアクセラレータに過ぎません。

そのために、GDDR などといった高速なメモリを直接搭載し、
膨大な量の計算を並列実行させているのです。

しかし、GPU は条件分岐が苦手です。
ひたすら、掛け算したり、足し算したりといった演算をこなし続ける方が得意です。

OS を、実現するにはソフトウェア割り込みという機能を使って、
定期的に割り込みをかけて OS の処理を走らせて実行するプロセスを切り替える
コンテキストスイッチと呼ばれる機能が必要です。

これには、GPU が持つ機能だけではおそらく実現が不可能です。
また、MMU などを搭載していなければプロセスごとに異なる、
仮装メモリを処理することもできません。

また、多くのビジネスロジックには条件分岐がつきものです。
条件分岐を効率的にさばけるのは、GPU ではなく CPU の方です。

グラフィック計算や数値計算は遅いかも知れませんが、
それほど複雑でない計算であれば十分 CPU の方が速いです。

GPU で OS を起動するなんて仮にできたとして使い物にならないでしょう。
もし、するとしたら GPU を CPU に内蔵することでしょうか。

これに関しては、すでに Intel も統合グラフィック機能で一部実現していますし、
Apple の M1 や、SONY の PS5 が同様のアーキテクチャを取っています。

たしか Pentium2 とかの時代とかだと浮動小数点演算ユニットが、
CPU とは別でオプションだったと思いますがその後、
CPU に統合されました。

ありえるとすれば、そのような統合が果たされるくらいじゃないでしょうか。
ただ、GPU を PCI Express 経由の外付けにすることによるメリットもあります。
CPU と GPU を別々にできるので、GPU だけグレードアップしたりすることができ、
別にしておいたほうがコストパフォマンスが優れるのです。

また、GPU メーカーと CPU メーカーが異なるため、
知財権の関係でなかなか統合ができないという面もあるかもしれません。
nVidia による ARM の買収が破談になっていなかったら革命が起こっていたかも知れません。



CPUがチップとして行っている仕事はOSやアプリの処理だけではありません。

「たぶんできると思います」とかの回答はデタラメですよ。

まともに割り込み処理ができるかすら疑問です。GPUはCPUだけが相手でしたからね。MMUもそう。特権モードとユーザモードをどうするのでしょう? それがOSの仕事だと思ってるなら勘違いですよ。セグメント管理をソフトウェアでエミュレートするというなら、1回のアクセスごとに演算処理して100倍とかの時間が掛かるでしょうね。スクラッチパッドはキャッシュじゃないし、リザベーションステーション無しでたらたら処理してたら、キー入力すら受け付けられなくなります。

「コア数が4000とかあるんだから」…いや、そんな多くのコアを持ったアホなGPUなんてないです。(笑)グラフィック処理するのに、4000分割しちゃったら、命令ロードだけで待たされて画面が止まります。(笑)



GPU をどう定義するかといった前提が必要ですが、ご質問のGPUが現在市販されているアーキテクチャとした場合についてお答えしますと、CPUなしでOSを立ち上げることは無理です。

もし、GPUだけででOSを動かすコンピュータシステムなるものが市販されても、実はGPUにCPUが内蔵されたものだと思います。今のグラフィック機能内蔵CPUの逆転バージョンみたいな。

OS の役目は、コンピュータシステムにおいて、

(1)メインメモリやSSD,HDD等のストレージ、その他デバイスのリソースの管理

(2)データ、プログラムの入出力及びメインメモリへの配置、適切な初期化などの管理

(3)ユーザープログラムからの要求に対する、(1)(2)で管理したリソースについてサービスの提供

です。これらの管理機能は現行のGPUアーキテクチャにはほぼありません。あったとしても極めて限定的で、コンピュータシステム全体を管理できません。

理由は、他の方も回答されているとおりGPUが大量のデータを高速に処理する機能に特化しているためです。

その点最も基本的なCPUは、整数演算しかできませんが、チップセット或いは直接デバイスとやりとりして(1)〜(3)の機能を行うことができます。というかできるような「汎用性」を目的な作られたものがCPUです。OSという大規模なシステムがなくても、(1),(2)を実行するプログラムとセットで、ユーザープログラムを実行することさえできますし、処理時間を無視していいなら、ソフトウェアを使って小数点演算はもちろん、GPUがなくてもグラフィック処理もできます。

※もちろんCPU自体の扱える物理メモリ量や接続できるバスやデバイスとの物理的な限界(ピン数とか)、命令体系(ISA)などによる制限はあります。

ただ現実として整数演算だけのCPUでは、いろいろな処理に時間がかかりすぎて使い物にならないので、小数点演算ユニットを積んだり、大量だけど単純な演算を高速に実行するためのSIMDユニットを積んだりしています。※SIMDの前からグラフィックカードはありましたが話がさらにややこしくなるので省略します。

けれど、要求されるより大量・高速の小数点演算ユニットまでCPUに組み込むとただでさえ発熱の大きなものが更に熱い、大きい、価格が高くなってしまうので、それなら別のデバイスにやってもらってよくね?餅は餅屋で行きましょう。とCPUと並行にGPUも進化してきて、コア数だけならとっくの昔にCPUを追い越してました。

製造プロセスの微細化の恩恵を受けて、CPUの中に省電力なGPUを組み込めるようになりましたが、グラフィックカードのGPUに比べると処理能力は低くならざるを得ません。

0 コメント:

コメントを投稿