- 締切済み
コア数とスレッド数の違いについて
CPUのコア数とスレッド数には、どのような違いがあるかがわかりません。コア数・スレッド数、いずれも1つの物理CPUに対して、論理的に処理を分散させるものとイメージしていますが、だとすると、両者の違いが一体何なのか頭を悩ませます。 当方、素人のため、イメージで教えていただけると嬉しいです。 こんなことも解らず、恥ずかしいですが、ご回答いただけませんでしょうか。よろしくお願いいたします。
- みんなの回答 (9)
- 専門家の回答
みんなの回答
- Water_5
- ベストアンサー率17% (56/314)
裏Coreも使うのがHyperThretingじゃないのかね。
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは 回答#1、#2で概要が説明されていて、回答#4でハードウェアの深い部分の説明があるので十分だと思いました。 でも質問者さんが… >当方、素人のため、イメージで教えていただけると嬉しいです。 とのことなのでもっと砕けた説明をしてみたいなと思いました(^^; 初期のコンピュータは、電卓のようなものということはご存じでしょうか? 一つの仕事に一つのCPU(Central Processing Unit=中央処理装置) がかかり切りになって一生懸命こなしていたのです。 しかし、当時のコンピュータは非常に高価なものだったし、記憶装置はとっても遅いものだったので複数の仕事(タスク)を時間で細かく切り替えながら(それはあたかも同時に進行しているよう)処理を行うOS(オペレーティングシステム)を開発しマルチタスクOSとよびました。 またマルチタスクOSならば、複数のCPUがあれば本当に同時にタスクを割り当てることが出来るじゃないかということでハードウェアとして複数のCPUを搭載したコンピューターが作られました(スーパーコンピューターなどは、パソコンの4コア8コアどころか数を数えるのが大変な相当数のCPUが搭載されてます)。 のちにマルチタスキングOSの処理をタスク単位からもっと小さな処理の単位に細分化(スレッド)するともっと効率が上がることに気づきプログラミング言語システムから並列プログラミングの考え方を取り入れ並列プログラミングの仕組みとして「スレッド」の考え方が生まれました。 インテルは、集積回路にCPUを含む構成をプロセッサと呼んでいて(メーカーによって呼び方が違う)、そのコア数は「CPU」というハードウェアの数、スレッド数はプログラミング上の「最小単位ソフトウェア処理」を手助けするハードウェアの数と考えると判りやすいかも。 実際、並列プログラミングもスレッドも相当に高度な考え方なのでマルチタスクOSのUNIX、Linux,Android,WindowsやMAC OSなどに採用されているけどアプリケーションソフトで使われていることは少ないみたい(-.-; ざっくり説明なので間違っているところもあるかも… でも他の回答者の方がきっと正してくれると思います(゜o。)☆\ばきっ
お礼
ご回答ありがとうございました。
「コア数」というのが「物理的・実際に搭載されている部品としてのCPUの数」であり、「スレッド数」というのはそれに対して「擬似的・仮想的に、つまり『バーチャル』で『実際に搭載されているCPUの未使用領域をあたかも余分にCPUがある様にデジタルデータを扱うあらゆるプログラム(様々なソフトウェアというかアプリケーション)に見せ掛けて並列処理を行わせる振り分け幅の数』」です。 「Pentium(ペンティアム)4」という「CPU」から採用されたものですが、「コア数=実際に作業する人数、スレッド数=実際には居ないが、時々サポートに付いてくれる人数」と考えてみて下さい。 大体「1コアにつき4スレッド」が標準的ですが、「1コア4スレッド」の場合「実際に作業するのは1人だけど効率良く役割分担して4工程の作業を同時進行というか並行処理している」、「1人で4人分の作業をする」という解釈ですかね。 「2コア」なら「2人で作業」、「4コア」ならば「4人」で。 再度強調しておきますが、「コア数=物理的・実際に搭載されているCPUの数」であり「スレッド数=物理的CPUはいつも必ず全ての領域を使用している訳ではないので、空いている領域を擬似的CPUとして使用する仕組みでありその処理系統の数」。 もっと分かり易く言うと、「1コア1スレッド」は「デジタルデータを流すベルトコンベアが1本のみ」で「1コア4スレッド」だと「それが4本」というイメージ? まあ、「貴方の質問文の最初の3行」は全く正しくない間違った認識であるという事です。 「リアルに存在しているもの」と「バーチャルのもの(つまり実際には無いもの)」という「明確な違い」があるのですよ。
お礼
ご回答ありがとうございました。
- bardfish
- ベストアンサー率28% (5029/17766)
パソコン用CPUでIntel Pentium4(HT)が登場した時にマルチスレッドCPUというのが認知され始めたと思います。 前述のCPUの場合はコア1つに対して2つのスレッドで動作し、Windowsからは1コアCPUでも2コアに見えるというもの。 当時のパソコン雑誌やIT系サイトでは「CPUは動作していても常に100%稼働しているわけではなく、仕事をしていない回路も有効活用して効率を上げている」と説明されていたと思います。 その前までは1コア=1スレッドというのが普通だったので、CPUを複数装着できるマザーボードに2個以上のCPUをセットしてマルチスレッド処理が可能となりました。 マルチスレッドだと負荷の高い処理が継続していても基本操作が重くなるということがほとんどなくなります。 ただ、シングルCPUでマルチスレッドだと限界が低いのでマルチCPU+マルチスレッドというのがトレンドです。
お礼
ご回答ありがとうございました。
- ts0472
- ベストアンサー率40% (4540/11217)
CPUの中身はこんな感じ 画像はクワッドコア(Quad Core) 1つのコアに 4つのスレッド http://ascii.jp/elem/000/000/191/191607/img.html 完全な4コアでは無いので 4コア4スレッドより処理能力が落ちます L3キャッシュが1つだから?かな? 蛇足ですが AMDの場合はコア=モジュール スレッド=コアと呼びます Intelの場合はハイパースレッドという仕組みで各スレッドが同じ処理を実行可能ですが AMD(デュアルコア)は別々の処理能力(浮動小数点演算できるのは1つ)なので 処理能力が落ちる しかしWindows上ではIntelのスレッド数がコア数になります 日進月歩なので覚えるのも大変 デュアルメモリーだと1車線が2車線になった風に例えられると思うのですが 難しいですね
お礼
ご回答ありがとうございました。
- SPROCKETER
- ベストアンサー率26% (2131/8006)
具体的に説明すると、以下のようになります。 CPUが命令実行中でも、メモリーバスが使用されているとは限りません。レジスタとキャッシュだけで演算命令が実行され、メモリーバスが使われていない空き時間があります。 マルチコアで複数のCPUが並列演算を実行している時には、各CPUのレジスタとキャッシュとの間で並列演算が繰り返されていても、メモリーバスが使われている時間は必ずしも多くない場合もあります。 無駄な空き時間を減らす為に、1つのCPUで2つの処理を同時並列的におこなうことで、メモリーバスの空き時間を減らすなど、コンピュータ資源の無駄遣いを減らすのが可能です。 複数のCPUで並列演算をおこない、1つのCPUで複数の処理を同時実行しても、メモリーバスを使用する効率は必ずしも100%にはなりません。メモリーバスの空き時間が減れば、利用効率が上がるので、マルチコア、マルチスレッドという手法を使うわけです。 コンピュータの実行処理で時間がかかるのはメモリーバスのアクセスと転送時間です。メモリーバスがコンピュータのボトルネックになっているわけです。 逆に言えば、メモリーバス以外では、全体の処理時間の僅かな時間しか使っていないので、分散処理に時間を使っても、メモリーバス以外の処理では、それほど重くならないわけです。 こういう現象が起こる理由は、演算命令の実行時間が僅かなのに対して、レジスタとメモリー間のデータ転送時間が長いのが原因としてあります。 メモリーバスが使われずに空き時間を待っているよりも、複数の処理を同時実行したり、複数のCPUで並列演算して、命令がメモリーバスにアクセスするまでの時間を短縮した方が、効率が上がるというわけです。
お礼
ご回答ありがとうございました。
- 121CCagent
- ベストアンサー率52% (15944/30559)
補足です。例えば 2コア2スレッド 2コア4スレッド 4コア4スレッド 4コア8スレッド と言った感じに表現されます。1つのコアでHyper-Threadingって機能で1つのコアが2つコアがあるように見せかけて2スレッドって感じでコアが増えればHyper-Threadingって機能を搭載していればスレッド数が2倍になる感じです。Hyper-Threadingに対応してなければコア数=スレッド数って感じになります。
お礼
ご回答ありがとうございました。
- itaitatk
- ベストアンサー率38% (751/1976)
コア数は実際のコアのかず、スレッド数は実際に働いているかずです。 要はコアは何人働いているのかに該当し、スレッド数は何人分働いていますかという感じです
お礼
ご回答ありがとうございました。
- 121CCagent
- ベストアンサー率52% (15944/30559)
コア数はそのまま計算をするCPUの核(コア)となる計算する回路が物理的に複数あると思えばイメージしやすいです。 スレッド数は質問者さんが書かれている通り1つのCPUのコアをあたかも2つコアがあるように擬似的に見せているとイメージすれば分かりやすいです.
お礼
ご回答ありがとうございました。
お礼
ご回答ありがとうございました。