T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« トランスポーターの変更を開始 | トップページ | 何か買うかなあ・・・ »

第15世代CPUは激変?

今は、Mirror-DTC Ver1.4.4の開発フェーズで、既にWindows/macOS用のβ1版を公開中だ。Mac版に続き、Windows版トランスポーターの改変作業も行なっているので、来週早々にはβ2版を公開できそうだ。

Windows版トランスポーターの変更は特に難しくはない筈なので、作者的には、集中力が持続できない状況だ。

もっとも、最近は、ちょっとした問題が発生しても、その問題を解決する気力が湧いてこなかったりしているので、多分、変更が難しくても、集中力は欠如しているかもしれない。

と、いう事で、変更作業を行いつつ、作者的には、Webブラウザで、特に関係ないニュースを見ていたのだが、そうこうしている内に、去年の時点で、Intelが次世代CPUにハイパースレッディング技術を導入しない! みたいな話が目に入ってきた。

なので、関連ニュースを色々と検索して見てみた所、第15世代CPUの開発にハイパースレッディング技術の導入は間に合わないので、導入はしない、みたいな記事と、これからは、それに変わる技術として「Rentable Unit」を導入するので、ハイパースレッディング技術の導入は廃止する、みたいな記事があった。

何にしても、第15世代CPU、つまり、今年中に発売開始が予定されている「Arrow Lake」世代のCPUには、ハイパースレッディング技術は搭載されない事は確定している様だ。

もっとも、第12世代以降のIntel CPUには、従来のPコア以外に高効率コアとしてEコアが搭載されており、その結果として、1チップに搭載されているCPUコア数は増加している。

作者が購入した仕事用iiyamaPCに搭載されているCore i7-12700の場合、Pコアが8でEコアが4なので、購入当時、Eコアは低消費電力を実現してくれる補助的なコアなんだなあ、と、思っていたのだが、その後、ノートPCなんかに搭載されたIntelのCPUを見ていると、Pコア4でEコア8みたいに逆転しているCPUも出てきた。

更には、低電力CPUでは、Pコア2でEコア8なんてのも出てきたし、低価格帯のミニPCなんかでは、PコアがなくEコアだけで構成されるN100なんてCPUが重宝されたりもし始めた。

で、Eコアにはパイパースレッディグ技術は導入されていないので、作者的にも、こんなご時世にハイパースレッディングなんて必要か? とは思っていた。

つまり、Pコアにハイパースレッド技術を導入すると、その分、性能は微増するかもしれないものの、実装面積も、それなりに増加する筈なので、そんな事をするよりも、ハイパースレッディングは廃止して、空いた面積にEコアを詰め込む方が望ましい、と、思ったりもしていた訳だ。

何故なら、ハイパースレッディング技術を導入した場合に増加するマルチスレッド性能は、良くて3割程度、と、インテルは公表しているのに対して、Eコアの性能は、それほど酷くもないからだ。(Alder LakeのEコアはSkylake級の性能」は本当?Pコアを使わずベンチマークで検証)

と、いう事で、第15世代CPUには、ハイパースレッディング技術が搭載されない! と、いう事は確定している様で、かつ、CPUコア数は第14世代と同じ、という事なので、三段論法的には、スレッド数は第14世代CPUよりも減る事になる筈だ。

もっとも、第15世代CPUでは、最大、Pコア8+Eコア16を搭載する様なので、作者のCore i7-12700が8Pコア=16スレッド + 4Eコア=4スレッドの合計20スレッドであるのに対し、24スレッドは提供される事になる。

ちなみに、ハイパーススレッディング技術の非搭載については、データセンターなんかのサーバー用途を除けば、これ以上のスレッド数なんて不要でしょ? と、Intel的にも考えたのかもしれないのだが、より重要なのは、前述した「Rentable Unit 」という技術になる。

ネットで調べてみた所では、巷では、第12世代CPU以降で搭載されたP/Eコアにより、スレッドに対するタスクの割り当てが上手く行かなくなり、実質的に、ソフト性能は低下した! みたいな話も出てきている様なのだ。

似た様な話は、ハイパースレッディングでも言えて、ネットで検索すれば、「ハイパースレッディング 無効」なんて検索ワードも出てくる。

作者的には、MasterReversiの初版開発当時には、一つの探索を複数のタスクに分割して処理させた場合の効率が今よりも悪かったので、MasterReversiには、ハイパースレッディングの利用を禁止するオプションを搭載している。

つまり、ハイパースレッディングを有効化した場合のCPU性能の向上率が1.3倍になるのだとしても、一つの探索を二つに分割する事により、50%程度の余計な処理が必要になるのなら、処理量は1.5倍になるので、独立したCPUコアが2つある場合には、1.5/2 = 0.75の時間で処理を終えられるのだが、ハイパースレッディングの場合、1.5/1.3 = 1.15になる訳だ。

なので、タスク分割しない場合、1.0の処理時間で処理が終わるのなら、ハイパースレッディングを使わずに、1つのコアで処理を実行した方が、処理時間を短縮できる事になる訳だ。

似た様な話は、巷の色々なマルチスレッドタスクでも言えた訳だ。

つまり、ソフトがマルチスレッド化される場合、普通は、1つのスレッドは1コア分のCPU性能を利用できる! という事を前提にしていた。

なので、マルチスレッド化による少々のオーバーヘッドが発生しても、マルチスレッド化する方が高速化できたのだが、ハイパースレッディングでは、上記の様な問題があったので、ハイパースレッディングによりコア数が沢山ある様に見せるよりも、それを禁止して、各スレッドに本当の1コア分の性能が割り振られる様にした方が、総合性能が向上する! なんて事例がいくらでも出てきた訳だ。

そして、Intelの第12世代からは、PコアとEコアが搭載される様になったのだが、普通のアプリケーションソフトからは、自分のスレッドがどちらのコアに割り振られるかは判らない。

なので、例えば、1000ラインある画像をマルチスレッド処理する場合、スレッド数が20あるのなら、それを20個に分割し、各スレッドに1000/20 = 50ラインずつ処理させる様な処理コードを書いた場合、従来なら、全てのスレッドがほぼ同時に終了したので、CPUリソースを無駄遣いする事はなかったのだが、第12世代CPUからは、こんなコードを書いたら、Pコアを遊ばせてしまう事になる訳だ。

何故なら、20スレッドの内、Pコアに割り振られたタスクはEコアに割り振られたタスクよりもコアの性能が高い分、早く処理が終わるのだが、スレッドに対するタスク分割は既に終了しているので、PコアはEコアに割り振られたタスクが終了するまで、次のJOBを与えられない! なんて感じになる訳だ。

上記の様な問題を解決するためには、JOBをスレッド数よりも十分に多くのタスクに分割し、処理を終えたスレッドがあれば、残っているタスクを順番に与えていく! みたいなタスク分割方式を導入する必要がある。

このブログの読者であれば、MasterReversiのリバーシエンジンのタスク分割方式が、こんな感じになっている、という事は記憶しているかもしれない。

何故、そんな分割方式にしてあるのか、というと、MasterReversiの場合、初版の時点で、既に、MRWorkerによるネットワーク分散処理を実現していたので、CPUコア毎の性能は同一ではない! という事は前提にせざるを得なかったからだ。

なので、第12世代のP/Eコア時代になっても、マルチスレッド性能が低下する事は無く、普通のCPUコアになっているRyzen9 5900HXでは、勝ち目がない感じだったEdaxとの完全読み性能比較でも、近い性能が出る感じになっている訳だ。

更に言えば、第12世代CPUで、EdaxがMasterReversiに近い性能を出せているのは、その処理形態がハイパースレッディングに合っているから! と、言えなくもない。

何故なら、ハイパースレッディング技術が導入されていない同様の非対称コア構成のApple M1なんかで性能比較を行うと、MasterReversiが優勢な感じになったりしているからだ。

これは、MasterReversiのリバーシエンジンが非対称CPUコア環境を想定したマルチスレッド構造になっているのに対して、Edaxでは、特にそんな前提は行われていないので、重要な処理が低速コアに割り振られたりすると、総合性能が低下してしまうから、の筈だ。

と、いう事で、ハイパースレッディングだとか非対称コアが導入されると、マルチスレッドの方式設計から見直す必要まであるのだが、作者の様なハードウェアエンジニアからソフト開発を始めている様な人を除けば、ソフトウェアエンジニアの多くは、そんな事には無頓着な筈だ。

つまり、そんな問題はソフトが解決するものではなく、ハードの責任だ! と、いう感じの筈なので、巷では、ハイパースレッディングは無効化されるし、P/Eコアが搭載されたIntelCPUよりも、より素直なAMDのRyzenが好まれる様になったりしてきた訳だ。

その結果として、Intel的にも、対策が必要になり、導入されるのが、前述の「Rentable Unit 」の様だ。

その詳細については、まだ不明な様なのだが、その理屈としては、前述した様な、タスク分割方式をCPUが自前で行う感じになる様だ。

つまり、ソフトウェアエンジニアがハードウェア構成を鑑みてマルチスレッドの方式を検討しなくても、似た様な事をCPUが自前で行うので、Pコアを遊ばせてしまう! みたいな事はなくなるらしいのだが、作者的には、そんな事をCPUがやり始めたら、更に、性能を鑑みたソフトウェア設計は難しくなるんじゃないの? と、思ってしまった今日この頃だ。

« トランスポーターの変更を開始 | トップページ | 何か買うかなあ・・・ »

2024年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google