intelについての記事がありました。
https://pc.watch.impress.co.jp/docs/news/1271807.html
因みに、この記事を書いている人はintelの説明会を見に行ってそこで見たことを書いているだけなので、そこの所はご注意を
まず、基本的な所からお話ししましょうか?
プログラムは、順番に実行されて、その結果を基に画面を表示する。
これは、ゲームも、それ以外も含めて共通のことです。
そして、計算した結果を見てから、次の計算を行うことが殆どなのも大体のプログラムにおいて共通のことです。
ですから、クロックが早いほうが、速く計算が終わって結果が早く表示されるというのは、当然のことですが、プログラムには、いくつか特徴的な物があります。
それが
並列して処理できる部分がある。という所です。
事前の計算結果の全てを必要とする処理は少ない。
そう言う部分は、分離して、別々に計算することが可能です。
現在の最新のCPUはコアと呼ばれる計算をする部分が、とても沢山乗っています。
特にAMD側はその辺りが顕著ですね。
ですから、積極的に並列処理を持ち込んだプログラムを作ればRyzenが早くなり、面倒だからと直列処理ばかりのプログラムを作ればintelが早くなるのです。
また、プログラム自体のコンパイラの問題もあります。
intelにはintelのCPUに最適なコンパイラを提供しています。
intelのCPUの癖にちなんだ最適化を行うため、特に最適化されていなプログラムに比べて早く動作するのです。
そして、AMD向けの物はこれと言って無いです。
一番の理由が、AMDがしょっちゅうアーキティクチャを変更するため作れないという意味ではありますが、VSがintel側に寄ったコンパイル結果を吐き出すので、AMDには若干不利です。
もちろん、AMDも同じ事をすれば良いだけではあるのですが?
AMDがintelに比べてリソースが少ないのは否めません。会社の規模を考えれば、よくもまぁこれだけ頑張っていると言えるでしょう。
c#からの離脱
c#はCからの流れを汲んだ直列プログラムに最適化された言語です。
もちろんOSのThreadの概念を組み込んであるので、意図的に並列処理をさせることは出来ますが、
”意図的に”行わなければ使用されません。
c#が生まれた頃には、すでに別の言語によって、データと処理を別々に記述することで、自動的に並列処理化されたプログラムを生成してくれるものも有ります。
しかし、記述方式がCに比べると分かりにくい(注:プログラマの大半がC言語で学習をはじめるため)のでなかなか流行りません。
これはAMD側の怠慢と言えるでしょう。
これだけ並列に特化したCPUを作ったわけですから、誰でも安易に、10コアぐらいのCPUをフル活用して動く様なプログラムを作れるようにすれば良いのです。
c#にも幾つものマルチスレッドを実現するための機能はありますが、
1.自分でスレッドを立ち上げなければならない。
2.BackGroundWorkerは同時に走れない。あくまで、表が固まらなくするだけの機能しかない。
3.各スレッドの完了待ちをするための機能が無い
(マルチイベントで処理待ちをするものは有るけれど、全部が成功したのかどれか失敗したのかを判別する機能は無い)
4.スレッドの宣言、スレッドの実行、処理待ちテーブルの管理、完了スレッドからのデータ回収、失敗したスレッドのリカバリ、全スレッドの完了待ち、全データの統合、次のデータ処理への移行処理 と、とにかくやることが多い。
ようするに、UIのスレッド、処理を管理するためのスレッド、スレッドを管理するためのスレッド、実際に処理するためのスレッドと大量にスレッドが必要になります。
来たデータを順番に処理するだけのプログラムでは無く、
処理する必要の無くなったデータを破棄して、更にその次を処理するためにどんどん回して行くには、
上記「処理を管理するためのスレッド」と「スレッドを管理するためのスレッド」を分けなくてはいけないため、c#的には、すでに能力の限界に達しているのです。
intelは一昔前にクロック争いをして、消費電力の壁にぶち当たり、結果的には大敗を喫したことがあるわけです、Pentium4がフラグシップだった頃ですが?
それがCoreシリーズの成功によりintelがまた返り咲いたのですが?
ようするに、消費電力の問題がいつまで経ってもintelの首を絞めているのです。
それが、「バッテリーモードでもクロックを下げないから速い」という説明が出てくる時点で、またパワー主義に走っている気がしてならないのです。
速くても、バッテリーが切れてゲームがプレイできなくなったら、モバイルとして持ち歩く意味が無くなることが分からないのでしょうか??
AMDのバッテリー駆動時の動作が速いか遅いかというのはさておき?
電力を十分に余裕を持たせるだけの電力消費を落とさなければ意味が無いのです。
ようするに、バランスが大事なのです。
処理性能を落とさないことでは無く、ほどほどに落とし、バッテリを十分に持たせる。
まぁ、根本的な問題として、プログラムをマルチスレッドで組み上げていく環境が整っていないため、AMDのCPUは時代錯誤感が高いのですが??
と言うか、いつ作ったのにしても時代錯誤感が半端ないのですが?
何にせよ、intelがパワー主義に走っていないと良いですね。