マルチスレッドプログラミング相談室 その9

2012/06/15(金) 01:31:57.88
マルチスレッドプログラミングについて語るスレ

■前スレ
マルチスレッドプログラミング相談室 その8
http://toro.2ch.net/test/read.cgi/tech/1253521167/

■過去スレ
その1 ttp://pc3.2ch.net/tech/kako/997/997345868.html
その2 ttp://pc5.2ch.net/test/read.cgi/tech/1037636153/
その3 ttp://pc8.2ch.net/test/read.cgi/tech/1098268137/
その4 ttp://pc8.2ch.net/test/read.cgi/tech/1130984585/
その5 ttp://pc11.2ch.net/test/read.cgi/tech/1157814833/
その6 ttp://pc11.2ch.net/test/read.cgi/tech/1187008532/
その7 ttp://pc12.2ch.net/test/read.cgi/tech/1215253576/

OS・言語・環境は問わないが、それゆえ明記すべし。
テンプレ
【OS】
【言語】
【実行環境】
【その他特記する事項】
2013/06/21(金) 23:18:56.88
2000があるのに…

>>175をタイムシェアリングだと思ってたな。もう少し勉強しよう。
2013/06/21(金) 23:38:19.83
ファイアー少なくてレアすぎ
2013/06/21(金) 23:40:35.43
広義だと含むのとちゃうかな
おさ〜ん的にはTSS(TSO)のホスト端末を思い浮かべるけど
2013/06/23(日) 12:58:55.01
ファイバー使ってみたけど、
フェーズとswitchより
シンプルに書けたよ。
2013/11/22(金) 08:18:08.42
C/C++ で勉強したいのですが、おすすめの書籍などありますか?
もしくは一から学べるようなWebページがあれば教えてください
188デフォルトの名無しさん
垢版 |
2013/11/22(金) 09:05:54.07
D の方が良いよ
2013/11/22(金) 13:04:58.77
猫でもわかる
2013/11/23(土) 05:39:10.02
>>188
D のほうが書きやすい?触れたことないのでわからんです
>>189
猫でもわかる は、Web版が俺にはちょっと分かりづらかった記憶が
書籍だとそうでもないのかな

C++のBoostを利用したThreadプログラミングの解説ページがあったので今はそれ見てます
2013/11/23(土) 09:00:39.63
>>190
触ってもいいお
2013/11/23(土) 13:19:59.45
>>191
どれどれ
193デフォルトの名無しさん
垢版 |
2013/11/23(土) 13:24:53.59
>>191
ペロペロ
194デフォルトの名無しさん
垢版 |
2014/02/23(日) 09:00:04.29
マルチスレッドって自力だとどうやって書くの?
2014/02/23(日) 09:43:27.54
pthread_create()
2014/02/23(日) 10:15:16.84
>>194
std::thread th{
 []{std::this_thread::sleep_for(std::chrono::milliseconds(3000));}
};
std::printf("うんこ\n");
th.join();
197デフォルトの名無しさん
垢版 |
2014/02/24(月) 17:57:18.01
例の金子がny作るときにマルチスレッドは自作したんじゃなかったっけ?
2014/02/24(月) 18:45:47.70
なんとかしてこれを読むと良い
ttp://ci.nii.ac.jp/naid/40000002652
2014/02/25(火) 00:18:34.64
>>197
あれ、シングルスレッドだよ。
Windows3.1みたいな方法で複数のタスク回してる。
2014/02/25(火) 06:43:17.74
小学生がBASICで弾の連射実装してるレベルだろ。
2014/02/25(火) 12:01:20.77
グリーンスレッドとは違うの?
2014/02/25(火) 17:16:14.73
グリーンスレッドなんて初耳。wikip見たらなんかトンデモな説明なんだが。
これは誰が言い出したんだ? バズワードくさい。
2014/02/25(火) 17:27:19.90
レッドスレッド、ブルースレッドはあるのでしょうか?
2014/02/25(火) 17:28:25.61
OSが関与しないスレッドの実装のこと。ウィキペディアの記述がタコってるのはいつものこと。

基本的な理屈はそう難しくないけど、実際にはreadとかでどれかのスレッドがプロセスごと
ブロックされると、他に走りたいスレッドが居ても走れなくなっちゃうので、そのへんを
どう手当てするかがカギ(そういった所だけOSが支援するとか、ブロックする可能性がある
システムコールに関連するものは全てスレッドライブラリが面倒を見るとか)。
2014/02/25(火) 17:33:10.94
よく分らんな。スレッドってそもそもOSが定義したものだろう。
アプリ側がたかが永続性のあるサブルーチン程度のものを
勝手にグリーンススレッドって呼んでるだけじゃないのか?

まさしく小学生がBASICで弾の連射実装してるレベルの話。ガッカリ度120%。
2014/02/25(火) 18:01:22.88
ユーザースレッド、ユーザ空間でか、なるほど
カーネルスレッド、カーネル空間でか、なるほど
グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん。それこそ>>203
2014/02/25(火) 18:14:03.00
ttp://dl.acm.org/citation.cfm?id=603551
↑これが「小学生がBASICで弾の連射実装してるレベルの話」に見えるのか。
さぞかしスーパープログラマ(笑)様なんだろうな。
2014/02/25(火) 18:19:01.04
その例え話しとその提示したのと繋がりそしてなんでその皮肉になるのか、200文字以内で説明しなさい
2014/02/25(火) 18:49:55.40
wikipediaのスレッドの項目の所まで加筆してやがるww
バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw

そんなのスレッドと何の関係もないのにスレッド言うなや。
2014/02/25(火) 19:49:47.38
結局、逆の意味でのウィキペディア馬鹿か。
一人で言ってろw
2014/02/26(水) 05:28:26.83
グリーンCPU。
グリーンプロセス。
グリーンヒープメモリ。
グリーンスタックメモリ。
グリーン仮想メモリ。
グリーン物理メモリ。
グリーンマルチタスク。
グリーンネットワーク。
グリーンアップル。

おれもいっぱい考えました。
2014/02/26(水) 08:36:42.11
グリーンPC
グリーンディスプレイ

が抜けている
2014/02/26(水) 08:51:32.57
ソイレント
2014/02/26(水) 13:23:35.72
MZ-80Kの話をしてるのかと思ったぜ
2014/02/26(水) 14:34:56.07
>>214
そりゃMZ80Cだ!
MZ80Kはモノクロだ!
2014/02/26(水) 17:24:33.12
> ユーザースレッド、ユーザ空間でか、なるほど
> カーネルスレッド、カーネル空間でか、なるほど
> グリーンスレッド、仮想機械上でか、で、なんでグリーンやねん

ユーザースレッドとカーネルスレッドという言葉はそれぞれ、
M:Nスレッドモデルとかの議論で、カーネル空間のコードの実行におけるスレッドと、
ユーザー空間のコードの実行におけるスレッド、という意味で使われる。

グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した
スレッドAPIの実装を指す。

以上のことが何も理解できないバカには、なにもかもがバズワードに見える。
2014/02/26(水) 17:25:22.57
バカですがなにか?
2014/02/26(水) 17:49:55.02
命名の由来のことなのに、Wikipediaから意訳したようなのを偉そうにのたまう、他人を馬鹿呼ばわりする自称天才様w
天才過ぎてどれもこれも バズワード 扱いしていると思い込んでいるようだしなあ。御愁傷様でw
2014/02/26(水) 18:13:53.06
> バズワード確定だな。エミュレータでゲーム動かしたらグリーンスレッドかよw
>
> そんなのスレッドと何の関係もないのにスレッド言うなや。

この威勢はどこ行ったのかなぁw
2014/02/26(水) 18:31:45.02
>グリーンスレッドというのは、スレッドAPIを(可能な限り)ユーザースレッド内で実装した
>スレッドAPIの実装を指す。

ハナからスレッドの定義に当てはまらないのにスレッド言われもなぁ。

WEB2.0と変わらんレベルの造語。
どうせまたジョブスオタクの低脳営業SEが言い出したんだろう。
2014/02/26(水) 18:36:03.83
スレッドの定義ってなんだ?
2014/02/26(水) 18:38:20.17
コイツの脳内ではシステムコールで実装されたものだけがスレッド、という定義なんだろう。
聞くだけ無駄だよ。
2014/02/26(水) 18:43:07.52
>>221
OSが管理する最小の実行スタック。
2014/02/26(水) 18:44:25.59
>>222
ではキミのスレッドの定義は?
2014/02/26(水) 19:01:36.43
222じゃないけど、スレッドっていうのはプログラムを実行する最小単位のことでいいんじゃないかな
OSが管理しているかどうかは問わない

スレッドっていう概念が実装されてるプログラミング言語が多いと思うんだけど、
この場合のスレッドはOS上の実装とは切り離されてるんだよね
例えばJavaのThreadクラスとか

OSが管理するものだけをスレッドと定義するとしたら、上記のようなプログラミング言語で
抽象的に実装されてるスレッドはスレッドとは呼ぶべきじゃないということかな?
2014/02/26(水) 19:17:09.57
実行スタックってなんだ、って思ったらウィキペディア(英語版含む)でそんな表現を使ってるのか。

一応GNU AWKと、.NETかCOMに、execution stackという用語はあるようだが。
2014/02/26(水) 20:45:20.03
>>225
そんなトンデモ言われてるも議論する気にもならん。
じゃあ、関数もスレッドなんですね。

もうアホかと。しかもJavaの〜とかふざけてるとしか。
228デフォルトの名無しさん
垢版 |
2014/02/26(水) 21:45:14.58
ワロタw
2014/02/26(水) 21:46:50.48
中途半端に脳内完結してるんだろな
2014/02/26(水) 21:49:16.49
グリーンスレッド言ってた >>222 が定義を言わず逃げちゃった。

グリーンラナウェイ。
2014/02/26(水) 22:31:24.56
ファイバー、タスク、ユーザーレベルスレッドと呼ばれ方はあるが
スクリプト言語のスレッドやゲームのタスクシステムの実装などに使われているありふれたテクニックだろ
OSの実装も同じだよ、ただカーネルレベルでやってるからCPUの特権命令が使えたりするってだけ
もしやOSを書いたことも言語処理系を書いたこともないのか?
2014/02/26(水) 22:43:21.83
意味負
2014/02/27(木) 06:36:49.81
>>227
JavaのThreadクラスの何処がふざけてるんだ?
2014/02/27(木) 07:43:24.03
>>231
さっさとおまえの定義を言えよ、低脳。
2014/02/27(木) 07:47:45.64
もはや人格攻撃しかできないモードに縮退したか。
2014/02/27(木) 07:49:46.46
POSIXのスレッドAPIを実装したものがスレッド、という定義でいいだろ。
2014/02/27(木) 07:54:15.34
トンデモグリーンスレッド連呼してたのにそのスレッドの定義聞いたら答えないで
逃げ回ってるんだからもはや人格の問題でしかない。

クズである。
2014/02/27(木) 08:07:04.32
おまえが自分の定義と違うものに聞く耳を持たないクズってだけじゃないか。

自分がクズだろ。
2014/02/27(木) 08:56:57.51
>>237
自己紹介乙、でどうでしょう
2014/02/27(木) 09:11:19.33
>>238
その定義ってどれ?w いいかげにんしろよ、クズ。
2014/02/27(木) 10:03:13.14
いい加減スレチ
2014/02/27(木) 12:12:54.02
グリーンスレッドはどう考えてもスレッドじゃないからな。
スレチ。
2014/02/27(木) 12:47:18.23
コンテキストの切り替えが出来るならスレッドの範疇でいいとちゃうの
LWTやFiberも範囲でいいだろ
2014/02/27(木) 15:48:00.75
Java屋は馬鹿だからな。なに言っても無駄。
2014/02/27(木) 17:43:54.80
馬鹿でわるかったなー
2014/02/27(木) 18:44:32.81
キチガイに触るな
居座っちゃうだろ
247デフォルトの名無しさん
垢版 |
2014/02/28(金) 03:22:01.11
マルチスレッドとタイムシェアリングは違うの?
2014/02/28(金) 04:10:21.51
>>247
まずプロセスとスレッドの違いを理解してから
2014/02/28(金) 06:26:56.06
まずグリーンプロセスとグリーンスレッドの違いを説明してほしい。
2014/02/28(金) 22:47:18.43
グリーンスライムよりは手強そうなイメージ
251デフォルトの名無しさん
垢版 |
2014/03/01(土) 06:43:57.25
グリーンプロセス()
2014/03/01(土) 13:24:07.27
このスレはカーネルレベルでの実装オンリーのスレになりました、ってことでFAね。
あるいは「カーネル型」のw
2014/03/01(土) 13:27:09.68
まだいるのかグリーンスレッド君
2014/03/01(土) 14:11:27.38
まだいるのかカーネル至上主義者君
2014/03/01(土) 14:14:20.18
v-sync割り込みでマルチタスクだお〜
DOS至上主義者が通りますよ〜
2014/03/01(土) 19:50:36.19
[要出典]
2014/03/01(土) 21:16:37.40
>>255
マウス用割り込みの方が良い。
258デフォルトの名無しさん
垢版 |
2014/03/02(日) 21:38:31.73
マウスの付いてるパソコンはカッコ悪い
2014/03/02(日) 21:41:29.98
わーるかったな
260デフォルトの名無しさん
垢版 |
2014/03/06(木) 00:31:59.51
マルチスレッドって使えるところが限られてる
261デフォルトの名無しさん
垢版 |
2014/03/08(土) 13:27:50.88
これからマルチスレッドの勉強をしようと思うんだけど、
参考になるサイトとかコードとかを教えて欲しい。

特にワーカスレッドを複数立て、たくさんのデータブロックを順に渡して処理させるようなサンプルとか。
ネットを検索しても、スレッドが延々と動きつづけるか、処理が終われば使い捨てるものばかりで、
処理の終わったワーカスレッドに次のデータを渡して連続して処理させるものが見つからない。
また、可変長の演算結果を親スレッドに返す方法についても、どうすればいいのやら。
1個の結果データは固定長だけど出てくる個数が可変なので、固定長の電文を複数投げるようなイメージでも可。

動作環境はWin7-x64で、VC++を使いマルチコアCPUのコア数分ワーカスレッドを立てようと思う。
うちのは6コアなので、単純計算で6倍弱には高速化できると思う。

処理内容の原理試作としてシングルスレッドのDOSアプリとして組んで、鍵値に5を与えて動かしてみた結果、
データブロック数は320万個余り、データブロック1個あたりの演算結果はゼロ〜100KBと幅があるw
そして総処理時間の見込みは60〜150時間(まだ終わってない)。
鍵値を6にするとブロック数も処理時間も莫大に跳ね上がるから、
たぶん1台のPC内で完結させようとしても終わらない。
2014/03/08(土) 15:25:57.27
使い捨てと使い回しで、クロックにして1k~2kくらいの差が有るかどうかだから、使い捨てでOK。
2014/03/08(土) 15:49:40.12
HotspotVMは?
と無茶振りしてみる
2014/03/08(土) 15:57:35.44
VCならOpenCLかC++AMP使えば良いんじゃね
CPUとGPUで切り替えも出来るし
CPUだけならPPLでも
2014/03/08(土) 16:20:54.15
VS2013か2012で、C++11のstd::threadとblockingできるqueueとstd::futureあたりを使えばいいんじゃないかな。
2014/03/09(日) 12:57:11.91
>262-265
トン

スレッドの使いまわしについて、ちょっと説明が言葉足らずだったかな。
やりたいのは最初にn個を起動するのまでは同じなんだけど、
データブロックを1個処理し終わったら次のデータブロックを処理させることで
全てのデータブロックを処理し終わるまでn個を実行している状態を維持したい。
(実際にスレッドをループさせるか破棄/生成を繰り返すかは重要ではない。)
ググって見つけたサンプルは、n個のスレッドを最初に起動して、
n個全てが終わるのを待って次の処理(結果表示とか)に進むような使い方のばっかりで、
起動したうちの1個でも終わったら次の処理をやってまた1個終わるのを待つ、みたいなのが見つからない。


開発環境については、実は結構古いのしか持ってない……
ので、これからVS2013の評価版をDLして試してみようと思う。

現状のx86コード、シングルスレッドでどうやら鍵値5の処理を70時間以内で終われそうな予感。
処理結果のファイルを分割し過ぎて恐ろしい数のファイルを生成しちゃってるので、
マルチスレッド化の際にはもっと纏めてしまわないとなぁ。
鍵値6は複数台のPCへの分散処理とかGPU処理とかを真面目に考えないと無理そうだけど。
2014/03/09(日) 17:54:14.90
そこまで仕様が決まってるならさっさと書けよって話だが。
2014/03/09(日) 19:14:48.84
自慢
2014/03/09(日) 19:44:21.54
なんの?w
2014/03/09(日) 21:24:29.64
典型的なコード書けない君だったか。
2014/03/09(日) 21:29:22.95
>>261
OpenMPのparallel forで分割するだけでおk
272265
垢版 |
2014/03/10(月) 02:53:54.21
>>271
もしも、それで済む用件だったら、一番楽だね。
VS2012と2013なら、無料版でもOpenMP使えるし。
手元のコードでOpenMPでforループ2048周をi7-3760Xで6倍速度くらい。
CUDAで780Tiで2048*2048cudaスレッドでさらに18倍くらいだった。
2014/03/10(月) 06:30:44.63
266の処理は、OpenMPのparallel for schedule (dynamic)でできる
2014/03/10(月) 12:00:01.04
ここはおまえの日記じゃねーぞ。
275デフォルトの名無しさん
垢版 |
2014/03/10(月) 17:32:15.14
スレッドの数って
CPUのコア数より多くしても意味ないよね?
2014/03/10(月) 17:42:02.40
>>275
スレッド内の処理でI/O待ちとかしてる場合は意味あるんじゃないの?
2014/03/10(月) 18:28:34.27
ひたすら計算し続けるなら意味はない。
計算メインというだけならコア数の倍ぐらいまでは
スループットが上がることはある。
2014/03/10(月) 19:11:36.58
書きたいアルゴリズムを自然に書けるという理由で
マルチスレッドに意味があることはある
GUIなんかそうだろうね
2014/03/10(月) 19:22:36.70
そんなGUIの実装は見たこと無いです。
2014/03/10(月) 19:40:06.12
GUI スレッドと別に好きなスレッドを立ててうまくやっていけるってことだろうに‥‥
win16 の泣きそうな世界を知らないのか?
2014/03/10(月) 19:46:18.78
それはCUIでも同じだろう。
2014/03/10(月) 21:47:19.99
処理内容・数によるけど大量のパラ処理はCPUのマルチコアやNvidiaのGPGPUからAMDのGPGPUでopenCLが定番になってきたからな
そして、今後はAMDのHSAも定番になるって感じになっているし。
2014/03/11(火) 17:20:13.24
いつGPGPUが定番になってきたんだ。
むしろまじ使えないってスルーされてる感が半端ない。
レスを投稿する