🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

並列処理

複数の計算が同時に実行される手法

マルチスレッド

マルチスレッドは、どのように機能がコンピュータによって実行したのかを、(一般的にはスレッドとして参照される)実行の複合的な共同作用するストリームへ区分することが出来ます。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

3330閲覧

マルチスレッドと論理コア,std::threadの確認

apa

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

並列処理

複数の計算が同時に実行される手法

マルチスレッド

マルチスレッドは、どのように機能がコンピュータによって実行したのかを、(一般的にはスレッドとして参照される)実行の複合的な共同作用するストリームへ区分することが出来ます。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/02/02 14:18

マルチスレッドと論理コアあたりの部分がとらえきれません

スレッド = タスク(動いているとは限らない)
論理コア(自分は12個ついていました) = 並行処理の最大数
c++にあるstd::thread = スレッド数を増やして論理コアを稼働させる

このような認識であっていますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

一般に、現代的な OS がやっているスレッドの管理方式では CPU が行う演算は細かく時間を分割して複数のスレッドを切り替えながら処理されます。 プリエンプティブ・マルチタスクと呼ばれる方式です。 細切れにされた時間、いわゆる「タイムスライス」を各スレッドにどれだけ割り当てるのかは OS が上手いこと管理しています。 複数のスレッドを実行していても普通はそれぞれがそんなにめいっぱいに演算性能を消費するような計算をしないのでそれで上手くいきます。

コアがたくさんあるとそういう管理を各コアごとにもやるというだけ (といってもそれが複雑ではあるのですが) です。 ただし、シングルスレッドのプログラムをどれだけチューニングしてもコア一個分の性能を超えることはないので、時間あたりの演算量が必要な場合にマルチコアの性能を活かそうとすると演算を分割してそれぞれの演算が各コアに割り当てられるようにする必要は生じるということになります。

ですから、「真の意味で同時に」動くスレッドの上限がコア数によって制限されるというのは間違ってはいませんが、スレッドを増やしたからといってそれが全て異なるコアに割り当てられるとも限りません。

投稿2021/02/02 14:58

SaitoAtsushi

総合スコア5684

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apa

2021/02/03 02:44

返信ありがとうございます 「真の意味で同時に」動くスレッドの上限がコア数によって制限される ↑これは論理コア数って認識でよろしいでしょうか?
SaitoAtsushi

2021/02/03 04:03 編集

「論理コア」についてはちょっと微妙な話になりますね。 論理コアというのはハイパースレッディング技術が使われている場合の用語で、これはひとつのコアを疑似的に二つに見せかける技術です。 https://ja.wikipedia.org/wiki/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC わかりやすい概略は Wikipedia にあるので、そちらを読んでください。 基本的には外部からは二つのコアがあるように見えるようにはなっているのでソフトウェア側からは論理コア数がコア数であると考えてよいのですが、本物の独立したコアほどの性能は出ません。 回路の多くは共有しているのでコア内の同じ回路を使う命令は同時に処理できないからです。 つまり、厳密に言うと命令の並びによっては同時だったり同時でなかったりするので「真の意味で同時」に含めるのは少し憚られるな……ということで論理コアについては意図的に言及を避けていました。 繰り返しますが、普通のソフトウェアを書く分には同時と考えて良いですよ。
apa

2021/02/04 03:59

なるほど 私の場合12という論理コア数を超えることはあっても 決してCPUのスペックは越えられないということですね 論理コア12という数字はあくまでもCPUを2つに見せかける技術を論理コアと呼ぶ都合上 の12で12を超えてもCPUのスペック内であれば効率よく動作するという認識であっていますでしょうか?
SaitoAtsushi

2021/02/04 08:29

スレッドをどのコアに、どれだけのタイムスライスを割り当てるかは OS がスケジューリングしています。 そのスケジューリングが十分に賢いという前提であれば論理コアの個数分の性能をよりよく引き出せるとは言えますね。
apa

2021/02/04 09:21

ありがとうございます まだ完全体ではないですが、 やんわりと理解はできました!
guest

0

wikipediaで「スレッド (コンピュータ)」の項目を見てくると参考になると思われます。

とりあえず、4コア8スレッド等という場合の「スレッド」と、c++にあるstd::thread
で増やす「スレッド」は別のものです。

投稿2021/02/03 01:18

himazin.blm

総合スコア591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

間違ってます

シングルコアでもマルチタスク、マルチスレッドは可能です

投稿2021/02/02 14:29

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apa

2021/02/03 02:42

返信ありがとうございます シングルコアでもマルチタスク、マルチスレッドは可能です ↑ それは論理コアがあるので移動しながら行っているということですよね?
y_waiwai

2021/02/03 03:01

えーと、12スレッドのCPUだとアプリ12開いたら13個目は起動できないとお考えですか? そもそも、Windowsが起動してる時点で立ち上がるタスクは10や20ではきかないんですが。
apa

2021/02/03 03:55

いえそういうわけではなく 起動はたくさんできますが、 動いているのは論理コアが12個なら12個が限界なのかなという考えです。 (自分が見ていなかったらお休みしている)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問