タスクシステム総合スレ part5
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2009/02/19(木) 02:21:01ID:k4ODtuXPpart4 http://pc11.2ch.net/test/read.cgi/gamedev/1233459490/
part3 http://pc11.2ch.net/test/read.cgi/gamedev/1226199100/
part2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
・タスクと呼ばれる実装は、非常に多岐に渡ります
古典タスクシステムについての話題は「>>2」と明示してください
そうでない場合はカスタム版タスクであることを明示してください
・人を憎んで言語を憎まず
0638並列さん ◆dPfetnROQg
2009/03/07(土) 00:55:26ID:cewi3IDnその理屈はおかしい。
マルチスレッドのプログラミングでもセマフォで他のスレッド待ったり普通にするじゃん。
処理に順序があろうが無かろうが、並列なものは並列だ。
>>635が並行と言ってるのは、タスクを実行しているスレッド(プロセス)が通例、
1つだけだという理由からだろう。
0639名前は開発中のものです。
2009/03/07(土) 01:06:43ID:ZZNOCL1s並列さんの言ってることは意味が分からん。
処理に順序があれば、同時に実行できないのだから、並列でないだろ。
マルチスレッド≠並列。
煽り専門と名のってたが、嘘ばかりを書き込んでスレの機能を麻痺させる気?
名前変えたら?
0640並列さん ◆dPfetnROQg
2009/03/07(土) 01:17:59ID:cewi3IDn> マルチスレッド≠並列
言葉の定義の問題だから、まあどうでもいいが、まあ普通は
マルチスレッドで実行されている以上、並列だし、あるスレッドが他のスレッドを
待っていてスループットが悪かろうが、並列なものは並列。
処理順序が厳密に定められていて、まったく逐次実行しか出来ないなら、
シングルスレッドと同じか、それ以下のパフォーマンスしか出ないけどな。
実際はゲームのタスクはそこまで処理順序に関しては制約が厳しくないので
いくらでも並列化できる。
0641名前は開発中のものです。
2009/03/07(土) 01:37:59ID:ZZNOCL1s並列ではない。並列な部分もあるってだけ。
今は、「正確には並行処理じゃないの?」と問われていたわけで、
純粋に並列でないなら、正確には並列とは言えない。
だいたい、マルチスレッド云々は実装レベルでの話しだし。
タスクシステムがアーキテクチャ的に並列処理かどうかとは関係ない。
0642名前は開発中のものです。
2009/03/07(土) 01:42:09ID:ZZNOCL1sコーヒー牛乳は正確には牛乳か→NO
タスクシステムは並列的か?→YES
タスクシステムは正確には並列か?→NO
0643並列さん ◆dPfetnROQg
2009/03/07(土) 01:58:35ID:cewi3IDn> 今は、「正確には並行処理じゃないの?」と問われていたわけで、
> 純粋に並列でないなら、正確には並列とは言えない。
この文章、意味不明だ。この文章、俺の解釈では↓こうだ。
今は、「正確には並行処理じゃないの?」と問われている。
スループットが1以下の並列実行なんて並列実行には含まれないので
「正確には並列」とは言えないので、単なる「並行処理」と見なすべきだから、
この「正確には並行処理じゃないの?」は正しい。
もし、そういう意味で書いているなら、俺は別に反対意見は唱えていない。
しかしそれなら>>637の書き方が悪い。
「優先順位がつくばあいもあるから正確には並列とは言えない」
だと、「優先順位がときどき偶発的について、そのときに限り並列性が落ちるから
並列とは言えない」と読める。だから俺は>>638のように反論した。
>>637は、正しくは
「優先順位がつく場合、並列化が難しく、並列度が極端に低下して、単一スレッドで実行
しているのと変わらないから、並列と呼ぶべきではない」と言うべきだっただろう。
しかし、俺はそうは思わない。
処理に優先順位がついていようが並列度を上げることは十分可能だからだ。
0644名前は開発中のものです。
2009/03/07(土) 02:03:29ID:LbywpZ2h0645名前は開発中のものです。
2009/03/07(土) 02:08:20ID:cMprZFoi見苦しいです
0646並列さん ◆dPfetnROQg
2009/03/07(土) 02:10:52ID:cewi3IDn見苦しいか?ふむ。
それなら、日本語の不自由そうな奴に絡むのはもうやめるわ。疲れるだけだ。
0647名前は開発中のものです。
2009/03/07(土) 02:23:08ID:ZZNOCL1s>だと、「優先順位がときどき偶発的について、そのときに限り並列性が落ちるから
>並列とは言えない」と読める。
優先順位がときどき偶発的について、そのときに限り並列性が落ちることがあるから、
正確には並列とは言えない、であってるよ。
タスクシステムは正確には並列か?という命題に対して、
タスクに優先順位が付く場合を判例に挙げたまで。
処理に優先順位が付く場合、理論的にピュアな並列処理とは言えないからな。
完全な並列性とは、なにをどの順で実行しても構わない場合のみ。
0648名前は開発中のものです。
2009/03/07(土) 02:47:03ID:ZZNOCL1s自分がまともに日本語を扱えないくせに。
>>643とか、これ日本語ですか?
Q:タスクシステムは正確には並列か?
A:タスクの処理の優先順位をサポートするタスクシステムの場合には、
タスクの処理に順序が出来るので、この場合は正確には並列とは言えない。
たったこれだけのことが何で分からないのか。
彼はこの問題を実装レベルの並列度の話に持ち込もうとするが、
そもそも、すべてのタスクを同時に実行できるハードが存在しない現状で、
実装レベルでの並列性をもってして、
「タスクシステムが正確には並列かどうか」を判断するのはナンセンス。
なぜならタスクシステム自体による制限よりも、
ハードウェアによる制限の方が先に現れるから。
0649並列さん ◆dPfetnROQg
2009/03/07(土) 02:49:57ID:cewi3IDn> タスクシステムは正確には並列か?という命題に対して、
だが、あんたは、>>635を誤解している。
635は
> 正確には並行処理じゃないの?
と書いてあって、並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
635を書いた本人は、「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので
「並行処理と呼ぶほうが正しいのではないか」と言ってるわけ。
それなのにそれに対する受け答えとして、あんたは、>637で「スループットがN倍になっていなければ
pureな並列とは呼べないので並行ではない」と言っている。あんたが「並列度1.0(そんなもの現実的に
存在しないんだが)ではない並列」を「並列」とみなさないのはあんたの勝手だが、635に対する返答として
637は、おかしい。
0650並列さん ◆dPfetnROQg
2009/03/07(土) 02:52:08ID:cewi3IDn> Q:タスクシステムは正確には並列か?
> A:タスクの処理の優先順位をサポートするタスクシステムの場合には、
> タスクの処理に順序が出来るので、この場合は正確には並列とは言えない。
> たったこれだけのことが何で分からないのか。
Qが間違っている。誰もそんなQをしていない。詳しくは>>649
0651並列さん ◆dPfetnROQg
2009/03/07(土) 03:03:47ID:cewi3IDnどうか、ID:EEKBitmg ◆HSP4mee/SU は、 ID:ZZNOCL1sの相手をしてやって欲しい。
ID:EEKBitmg ◆HSP4mee/SU の書く内容は、技術的に間違ってることも多々あるし、態度も生意気だけど、
日本語は意味明瞭だし、技術用語の使い方も比較的正しいので俺としてはかなり好感が持てる。
まあ、勉強熱心なんだろうな・・。
0652名前は開発中のものです。
2009/03/07(土) 10:03:00ID:8u/3vapKhttp://docs.sun.com/app/docs/doc/819-0390/mtintro-6?l=ja&a=view
0653名前は開発中のものです。
2009/03/07(土) 10:21:13ID:ZZNOCL1s逆に、並列化不可能なら、並行でない。
というか、むしろ今まで並行の意で並列と言っていたのだが。
>スループットがN倍になっていなければ
>pureな並列とは呼べないので並行ではない
は正しい。
順序がある処理は並行ではない。
0654名前は開発中のものです。
2009/03/07(土) 10:22:50ID:ZZNOCL1s俺はこっちかな。
0655名前は開発中のものです。
2009/03/07(土) 10:43:57ID:8u/3vapK同じだとおもうけどw
>順序がある処理は並行ではない。
いや、順序があっても並行は並行だろう。
ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、
仰々しく「並行」だの「並列」だの言うな、と主張しているように見えるなあ。
ID:ZZNOCL1sは実践的な話をしていて、
並列さんは字面通りの一般的な並列の定義に沿って話しているだけに見える。
というのは深夜の時点で並列さんも悟っているように見える。
0656名前は開発中のものです。
2009/03/07(土) 10:53:23ID:ZZNOCL1s>「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので
並行化によって待ち時間が減ったりするので、スループットは向上するが、
1倍の基準点が不明。
0657並列さん ◆dPfetnROQg
2009/03/07(土) 10:57:38ID:cewi3IDn> というか、むしろ今まで並行の意で並列と言っていたのだが。
あんたは、全然話にもならない。
専門用語を勝手に本来と違う意味で使っておいて
相手に日本語が読めないだの何だの言うのは本当、勘弁して欲しい。
0658名前は開発中のものです。
2009/03/07(土) 11:06:08ID:ZZNOCL1s順序がある処理は並行化できないよ。
例えば、処理Aと処理Bがあって、
BはAの後でないと実行不可だとする。
この場合、AとBを並行に処理することは出来ない。
0659名前は開発中のものです。
2009/03/07(土) 11:06:20ID:cMprZFoi> ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、
そんな話じゃないでしょうに…
あと
>並列さん
>悟っている
なんか気持ち悪いです
0660並列さん ◆dPfetnROQg
2009/03/07(土) 11:13:36ID:cewi3IDn> 順序がある処理は並行化できないよ。
それぞれのタスクを逐次処理しようが、それは並行処理って言うんだが。
ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。
本当、専門用語を勝手に意味を作り替えんなと言いたい。
>>659
気持ち悪いのはお前。お前はいらない子だから死んでくれ。
0661名前は開発中のものです。
2009/03/07(土) 11:17:08ID:ZZNOCL1sお前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。
>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
↑何に対する1倍かはしらないがな。
0662並列さん ◆dPfetnROQg
2009/03/07(土) 11:25:40ID:cewi3IDn>>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
>↑何に対する1倍かはしらないがな。
そこが読めてないのお前だけだろう。
「concurrentな処理は、Nコアであっても、単一コアで実行したときの1倍以上のスループットが出ない」の意味。
0663並列さん ◆dPfetnROQg
2009/03/07(土) 11:31:14ID:cewi3IDn> お前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。
どこをどうやればそう読めるのか俺は知りたい。
並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が
単一か複数かの差のみ。そんなことは誰でもわかっている。
その用語を勝手に違う意味に使ってたのはあんただろ。
俺には、頭がおかしいとしか思えない。
その頭のおかしいあんたを唯一擁護しているのは ID:cMprZFoi だけ。
こいつは、あんたが書き込みした直後にしか出てこない。どうせこれもあんただろ。
0664名前は開発中のものです。
2009/03/07(土) 11:36:14ID:92TsYx3Xフレームワークなら並列云々の話になると思うが…
あれもタスク進化系の一種なのか?ちょっとタスクって守備範囲広すぎ。
あれはコア数がパフォーマンスに直結する造りだね。
順序の依存性のある処理と無い処理をグループ分けして、並列で問題ないケースは複数コアで同時計算。
順序の依存性がある処理との同期スケジューリングをフレームワークが管理って感じで。
ゲーム中には依存性のある処理と無い処理があるから、まぁ複数コアを有効に使おうと思うと
こんな感じな設計に行き着くんだろうね。
0665並列さん ◆dPfetnROQg
2009/03/07(土) 11:40:55ID:cewi3IDnHSP使いのプログラミング経験の浅い世間知らずのクルクルパーだが、
そのわりには用語の使い方はまともだし、勉強もよくしていると思っていた。
俺は専門用語を勝手に俺解釈の用語とすり替えて話す奴とは
面倒くさいので話をしたくない。
このスレはどうせみんな常駐してるようなもんなんだから、みんなコテハン
にすればいい。それそれぞれが嫌な奴をNGリストに入れておけばいいと思うんだがな。
そんなわけで ID:ZZNOCL1sは俺をNGリストに入れておいてくれ。
お前と話をするのは疲れる。
0666名前は開発中のものです。
2009/03/07(土) 11:49:53ID:ZZNOCL1sいや、単純に考えて、処理に依存関係があると、並行処理できないだろ。
実際OSなんかは各スレッド間に依存関係が無いものと見なして並行処理しているわけで。
0667名前は開発中のものです。
2009/03/07(土) 11:52:30ID:8u/3vapKそれが実質直列だってことは分かるんだけど。
とりあえず、俺が何を考えているのかと言うと、
動き方が実質直列であっても、それぞれ別のスタック領域を持ってる点が違うだろ?
別々のコンテキストを持っている。
その辺を区別するのに「実行効率ゼロの並行」も俺は並行と呼んでただの直列と区別していた。
要するに俺はコアが何個でそのPCがどこ指してるのって部分だけで並行か並列かって言ってた。
んで、一般的定義はどうなのと思ってググった先を見てみると、
コンテキストがどうのというのは論点じゃ無いような気がしてきた。
もうちょい調べてみるわ。
0668並列さん ◆dPfetnROQg
2009/03/07(土) 12:05:02ID:cewi3IDn> いや、単純に考えて、処理に依存関係があると、並行処理できないだろ。
あんたの「並行処理」について持ってる勝手なイメージは知らんが、
優先順位がついていてそれぞれのタスクを逐次的に処理していく場合も
(そのタスクが終了後に消滅しないなら)「並行処理」と呼ぶ。
http://en.wikipedia.org/wiki/Concurrent_computing
> Concurrent programs can be executed sequentially on a single processor
> by interleaving the execution steps of each computational process
「並行プログラムは、それぞれの計算プロセスを実行箇所をインターリーブしながら
シングルプロセッサによって逐次的に実行される」
計算プロセス間の依存性とか、効率とかそんなことは並行処理の定義とは
何ら関係がない。
・実行箇所をインターリーブしながら(タスクからリターンしてもタスクは
通例存在していて)
・シングルプロセッサによって(ある瞬間を見たときにつねにひとつの
プロセッサしかタスクを実行していない)
この二つを満たしているなら、並行処理。
0669名前は開発中のものです。
2009/03/07(土) 12:09:24ID:ZZNOCL1sどこにそんな定義があるんだ?
0672名前は開発中のものです。
2009/03/07(土) 12:26:24ID:ZZNOCL1shttp://ja.wikipedia.org/wiki/%E4%B8%A6%E8%A1%8C%E8%A8%88%E7%AE%97
>タスク群は1つのプロセッサ上で動作する場合、複数プロセッサ上で動作する場合、
>ネットワークを介した分散システムで動作する場合が考えられる。
663 名前:並列さん ◆dPfetnROQg [sage] 投稿日:2009/03/07(土) 11:31:14 ID:cewi3IDn
並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が
単一か複数かの差のみ。そんなことは誰でもわかっている。
Wikipediaの人は分かってないみたいですよ。
注意してきたらどうなんですかね。
0673名前は開発中のものです。
2009/03/07(土) 12:42:43ID:ZZNOCL1s>計算プロセス間の依存性とか、効率とかそんなことは並行処理の定義とは
>何ら関係がない。
だから、並行処理では処理の依存性は考えない=依存性は扱わない=依存性は扱えない。
扱わないのは扱えないから扱わないの。
実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。
各スレッドを並行と見なして実行する。
処理に依存性がある場合はプログラマが自前で同期オブジェクトとかつかってシコシコやる。
一方、タスクシステムでは処理の依存を優先順位という形で明示的に扱うのが一般的。
各タスクを並行とみなしているわけではない。
0674名前は開発中のものです。
2009/03/07(土) 12:44:25ID:92TsYx3X並行・並列処理の単語の定義のスレになってるな。
自然言語の単語の定義なんてどこまでいっても曖昧なのに…
自分の言う「臭い」と他人の言う「臭い」が同じという保障なんて誰にも出来んよ
確かなのは人工言語で書かれたソースのみ。
0675並列さん ◆dPfetnROQg
2009/03/07(土) 12:44:25ID:cewi3IDnざっと見たけど日本語のwikipediaのほうは、ひどいな。
これとか
> 並行性のための構造を備えた最も一般的な言語はJavaとC#である。
なんでだよと突っ込みを入れたくなる。
これ書いてる奴は、thread生成が出来るからJavaとC#を入れてるんだろうけどひどいにもほどがある。
C#のyieldによるcontinuationは確かに並行スレッドなんだが、それならJavaを含めるのはおかしい。
日本語のwikipediaの「並行性」の項目もひどいな。なんだよこれ。
ちょっとwikipedia行って暴れてくるわ。
0676並列さん ◆dPfetnROQg
2009/03/07(土) 12:47:15ID:cewi3IDn> 自然言語の単語の定義なんてどこまでいっても曖昧なのに…
専門用語は、限りなくstrictに定義されてるべき。
そうじゃなきゃ論文とか意味のないものになってしまう。
0677名前は開発中のものです。
2009/03/07(土) 12:50:58ID:ZZNOCL1swikipediaを引用しているようだが、途中で切れているようだが。
>「並行プログラムは、それぞれの計算プロセスを実行箇所をインターリーブしながら
>シングルプロセッサによって逐次的に実行される」
の後ろには、実際には
or executed in parallel by assigning each computational process to one of a set of processors
that may be in close proximity or distributed across a network.
が続いている。
自分の都合の良いところだけを掻い摘んで引用する根性の悪さ。
結局、
>並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が
>単一か複数かの差のみ。そんなことは誰でもわかっている。
は間違い。
0678並列さん ◆dPfetnROQg
2009/03/07(土) 12:52:11ID:cewi3IDn> 実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。
それはダウト。
実際のOSにはプロセスのpriorityがあって、それに従ってスケジューリングされる。
割り込みなんか特にそう。あるプロセスの実行が他プロセスの実行より優先されることは多々ある。
キーボードイベントが発生したら、その処理が優先される。そこには明確な実行順序がある。
そんな機能すらない、もっとprimitiveなOSの話をしているなら、まあそれはそれでいいけど
「実際のOS」と書かれるとWindowsやらLinuxやらを想定しているのかと俺は思ってしまう。
0679名前は開発中のものです。
2009/03/07(土) 13:02:13ID:ZZNOCL1sお前がひどいという日本語版の、
「並行性のための構造を備えた最も一般的な言語はJavaとC#である。」
は英語版のページにある
「Today, the most commonly used programming languages that
have specific constructs for concurrency are Java and C#. 」
の訳なわけだが。
そしてその英語版のページを引用して、
「これが並行処理の定義だ!」と言っていたのがお前なのだが。
さらにその引用も自分の都合のいいところだけを引用するという正確の悪さ。
「〜又は〜」と書いてあるのに、「又は」以降をバッサリカット。
0680名前は開発中のものです。
2009/03/07(土) 13:05:44ID:ZZNOCL1sプロセスのプライオリティーは必ずしも守られるわけではない。
あれは、CPUリソースに対する優先順位であって、処理に対する依存関係を表すものではない。
現にマルチプロセス環境だと、プライオリティーの高いものと低いものが同時に実行される。
0681並列さん ◆dPfetnROQg
2009/03/07(土) 13:05:45ID:cewi3IDnそれなぁ、「executed in parallel」以下は敢えて省略した。
これを「根性の悪さ」と言われるのはわからないではないが、いま俺が問題としているのは、
「concurrent thread」 とか「parallel thread」というときのconcurrentとparallelの意味の違いだ。
「concurrent computing」という学問分野があって、その学問分野は広範で
いわゆる分散コンピューティングみたいなことまで研究対象としている。
本来、concurrentの定義にparallelとか出てくるのはおかしいのだが(それだとconcurrentとparallelとの
差が無くなってしまう)、「concurrent computing」の分野においては、「concurrent program」の意味は、
かなり拡大解釈されている。だから、その部分をはしょった。
「concurrent computing」のconcurrentを援用するのがあまり良くなかったと言われれば、まあ、それはそうなのだが。
0682名前は開発中のものです。
2009/03/07(土) 13:09:34ID:Fbn5zOAB並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。
んじゃないの?
独立した概念(関連はあるけど)なんだから、>>660の
>ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。
はおかしいと思う。
concurrentに作っておけば、parallelに実行しやすいんだし。
0683並列さん ◆dPfetnROQg
2009/03/07(土) 13:17:17ID:cewi3IDnうむ、それは正しい。
>>682
ああ、そうか。そういう意味では、660はおかしいし、書き方が悪いな。
これについては反省。すまんかった。> ID:ZZNOCL1s
0684名前は開発中のものです。
2009/03/07(土) 13:19:11ID:ZZNOCL1s0685名前は開発中のものです。
2009/03/07(土) 13:20:00ID:ZZNOCL1s0686並列さん ◆dPfetnROQg
2009/03/07(土) 13:24:11ID:cewi3IDn> 並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
> 並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。
この定義に基づいて古典的なタスクシステムのタスクについて語ると
・古典的なタスクシステムのタスクは、「並行」。
・実行順序に厳しい制約があるとみなすなら、「並列」化はできない。
ところが実際のゲームでは、タスク間に依存関係がない部分が結構あるので
部分的に「並列」化できる。
この「並列」化によって、コア数N×0.7ぐらいのパフォーマンスは出る。
で、この「並列」化を古典的タスクシステムを進化(?)させて書けるようにすれば
いいということだな。
0687並列さん ◆dPfetnROQg
2009/03/07(土) 13:24:58ID:cewi3IDn俺のことは、NGリストに入れておいてくれ。
最初に682のように書いてもらえれば、俺はすぐに理解できたのだが。
0688名前は開発中のものです。
2009/03/07(土) 14:32:04ID:NOayWFQU0689名前は開発中のものです。
2009/03/07(土) 14:39:01ID:ZZNOCL1s>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
必要だと考えている。
並行性
http://ja.wikipedia.org/wiki/%E4%B8%A6%E8%A1%8C%E6%80%A7
だから、
1.並行でなければ並列化できない。
2.タクスの処理順位を考慮するようなタスクシステムは、すべてのタスクが互いに並行というわけではない。
3.ゆえに、タスクシステムを並列化するならば、並行なタスク同士を抽出する必要がある。
と考え、
さらに、タクスの処理順位を考慮するようなタスクシステムは「並行でない」と考える。
0690名前は開発中のものです。
2009/03/07(土) 15:29:42ID:8u/3vapK俺もこう思ってた。
んでそうハッキリ書いてある資料を探してるんだけど、見つからない。
>並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、必要
次からこっちの定義で話すわ。
0691名前は開発中のものです。
2009/03/07(土) 15:37:28ID:92TsYx3X>さらに、タクスの処理順位を考慮するようなタスクシステムは「並行でない」と考える。
MTフレームワークは処理順の依存の有無でタスク分けてマルチコアで同時に複数タスク動かしてるけど
これは処理順位を考慮するシステムだから「並行でない」のかな?
0692名前は開発中のものです。
2009/03/07(土) 15:42:35ID:ZZNOCL1s>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
だと、いわゆるオブジェクトと呼ばれるものは全部並行ってことになっちまうだろ。
コンテキストが同時に存在できないオブジェクトなんて、まあ無いからな。
言葉としての意味が無くなる。
0693名前は開発中のものです。
2009/03/07(土) 15:56:08ID:ZZNOCL1sもしはじめから並行なら、MTフレームワーク自体いらないでしょ。
0694名前は開発中のものです。
2009/03/07(土) 16:00:29ID:92TsYx3X>もしはじめから並行なら
どこにそんな前提が?
0695名前は開発中のものです。
2009/03/07(土) 16:36:27ID:E0xOAlNR>これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの?
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
と同じ事を言ってるだけのような。
>1.並行でなければ並列化できない。
は違うと思う。
並行でない命令列も、依存関係が無ければ並列化できる。
現にCPUの中でシリアルセマンティクスを満たしつつ並列実行が普通におこなわれている。
そういう命令列は本質的に並行だった?違うでしょ?スーパースカラで並列に実行される命令は、
異なるコンテクストを持ってるわけじゃないんだから。
あと細かいことだけど、順位と順序は全然意味違うんだから、
ちゃんと使い分けてくれないと読み辛いよ。
0696名前は開発中のものです。
2009/03/07(土) 18:22:05ID:UcXZ5wF9くる値によって依存関係があるかもわからんしないかもわからん
ごった煮だとそういうソースになってしまうな
0697名前は開発中のものです。
2009/03/07(土) 18:30:21ID:rbzzI5lu↑(・∀・)↑
ウンコちゃんインしたお
0698名前は開発中のものです。
2009/03/08(日) 18:34:25ID:ryll+mdy> >これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
> ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの?
> >並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
> と同じ事を言ってるだけのような。
例えば、コンテクストが共有されている場合などでは、
コンテクストは同時に存在できるが、同時に実行はできない。
具体的には、オブジェクトAがオブジェクトBの参照を内部に保持している場合など。
オブジェクトAはオブジェクトBとコンテキストを共有しているということになり、
オブジェクトAとオブジェクトBは同時に存在できるが、同時に実行は出来ない。
>並行でない命令列も、依存関係が無ければ並列化できる。
並行でない命令列の中でも、依存関係が無い並行な部分だけは並列化できる。
並列化とは、並行に処理することだから、並行な処理しか並列化できない。
自動並列化
http://ja.wikipedia.org/wiki/%E4%B8%A6%E5%88%97%E5%8C%96
>プロセッサで「並行」に実行されるようにする。
スーパースカラ
http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9
>プロセッサ内の冗長な実行ユニットを使って「並行」して処理される。
0699名前は開発中のものです。
2009/03/08(日) 18:39:37ID:ryll+mdyヒント:背理法
0700698
2009/03/08(日) 19:26:02ID:ryll+mdyコンテクストが共有されていても、read-onlyな場合は並列化可能だね。
書き込みするとアウトだけど。
0701名前は開発中のものです。
2009/03/08(日) 19:27:58ID:0j+yjPijなんか色々と変だよ。
>例えば、コンテクストが共有されている場合などでは、
>コンテクストは同時に存在できるが、同時に実行はできない。
共有されているのに同時に存在するってどういう意味?
コンテクストはいくつあるの?
>具体的には、オブジェクトAが(以下この段落略)
オブジェクトとコンテクストがごっちゃになってる。
オブジェクトAがオブジェクトBへの参照を内部に保持していても、
コンテクストがいくつあるのかという問題とは関係無いよ。
オブジェクトAとBを同時に実行はできない?オブジェクトを実行するってどういう意味?
この辺は、>>692の勘違いと同じ匂いがする。
てか>>692さんなのかな。
0702名前は開発中のものです。
2009/03/08(日) 19:30:14ID:0j+yjPij701の続き。
>並行でない命令列の中でも、依存関係が無い並行な部分だけは並列化できる。
「依存関係が無い部分」を「並行な部分」とは呼ばないよ。
いや呼ぶのは自由だけど、少なくとも聞いたことないよ。
いや聞いたことないだけかもしれないけど。
>並列化とは、並行に処理すること(以下略)
×。
もうちょっと詳しく言うと・・・
「並列化とは、並行に処理すること」
という言葉それだけを見るなら、○。
でも、そこに出てくる「並行」という言葉は、並列という言葉を説明するための
「(同時)並行」という意味であって、このスレでここまで長々と議論してきた
並行(concurrent)とは意味が違うよ。
(「並列」を説明するのに「並列」と言っても仕方が無いからね)
二つ挙げてくれたwikipediaの説明に出てくる「並行」も、同じように「並列」を
説明するための「並行」であって、ここに引っ張り出してきても意味が無いよ。
0703名前は開発中のものです。
2009/03/09(月) 12:41:05ID:2btSBxrR0704名前は開発中のものです。
2009/03/09(月) 13:31:41ID:+h98nuCN0705名前は開発中のものです。
2009/03/09(月) 14:16:42ID:EugqMYhT0706ID:EEKBitmg ◆HSP4mee/SU
2009/03/10(火) 01:19:32ID:W7jNDZ1N=『擬似並列動作』のことを云いたかったの!微妙に書き間違えてた?と書こうと思ったら
>>637-以降で怖いおじちゃん達が深夜の泥沼バトルが展開されてあれよあれよと言う間に
みんな深淵の彼方へ飛んでいってしまった。ニーチェの警告に耳を傾けない者はみんな
闇に飲まれちゃうんだ。恐ろしいことだ
0707ID:EEKBitmg ◆HSP4mee/SU
2009/03/10(火) 01:20:59ID:W7jNDZ1Nところが>>632のタスクシステムは直列処理ではなくどっちかっつーと『並列』らしい。
たぶん>>632の云うタスクシステムは>>2とは別物か、あるいは並列ではなくて
『擬似並列動作』とか『並行動作』のことをいってるのかなーとESPした。それが>>635
>>2の『システム(笑)』部分が提供するものは
・粗末な侵入式の連結リスト
・それを周期的にナメナメしてディスパッチするショボイ仕掛け
だけ。>>2はこの『システム』部分をユーザー定義の逐次処理・直列処理に使ってるけど
ユーザー定義の並行動作に使うこともできるっちゃできる
例えば組み込みシステムでは、異なる割り込みハンドラからの指示でスリープ状態から
復帰するタスクとかあるからね
0708ID:EEKBitmg ◆HSP4mee/SU
2009/03/10(火) 01:36:39ID:W7jNDZ1Nタスクとして登録してるとする。(そんな無駄なことしたくないけど、する奴もいるだろう)
破片・パーティクルのタスクは他のタスクとの作用なんてないとする。ならばこれらは
確実に並行動作してる
逐次処理・直列処理で並列動作してる。だが並列動作じゃない
0709ID:EEKBitmg ◆HSP4mee/SU
2009/03/10(火) 01:37:17ID:W7jNDZ1N×逐次処理・直列処理で並列動作してる。だが並列動作じゃない
○逐次処理・直列処理で並行動作してる。だが並列動作じゃない
0710ID:EEKBitmg ◆HSP4mee/SU
2009/03/10(火) 02:18:01ID:W7jNDZ1N一本の連結リストにみんなチャンポンにしてぶち込んでる時点で
別スレッドで同時並行的に弄繰り回されるということを考えてないだろ
タスク間通信に必要な同期のメカニズムを提供していないのもそう
シングルスレッドで逐次処理するという前提だからバッサリ省いてる
次に、>>2のTCB(笑)とかいう構造体のプライオリティというパラメータは
priority-rankingではなくpriority-sequenceとして使われており、異様。
これは処理順序を表しており、この順序でソートして順次処理される
そういう前提でタスク(ジョブ)の内容を記述してる。順序が狂ったら動かない
0711名前は開発中のものです。
2009/03/10(火) 12:53:53ID:GPL7IZe+>ユーザー定義の並行動作に使うこともできるっちゃできる
できるっちゃできる、じゃなくて、ゲームオブジェクトの並行動作を記述することが
そもそもタスクシステムの目的なんじゃないの?
オブジェクトごとのデータとコンテクストをひとまとめにして自律的な行動を
自然(←人によって感じ方は違うだろうけど)な形で書ける(気分になれるw)ことと、
オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること、
の2点を、素朴な形で実装したのがタスクシステムの良い点だったと思うんだけど。
>>710
>>>2のシステム(笑)はなんで並列動作できないの?
特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、
それらを並列動作させることはできるんじゃないの?
(そういう番号をプライオリティと呼ぶことの是非は別として)
別に誰も、全てのタスクを並列動作させることなんか最初から期待してないと思うけど。
かなり上の方に出てた自動的に並列動作させる云々の話も、そういうプライオリティの
タスクに限って、プロセッサ数に合わせて並列でディスパッチするような拡張も考えられる
のではないか、という話だったと理解してたんだけど。
0712名前は開発中のものです。
2009/03/10(火) 14:14:14ID:arIRXx6m> ゲームプログラム本体のコードは、OSのコードと同じように、
> 整数演算中心で小さな範囲での並列しかできず、
> 基本的には逐次実行しなければならないコードがほとんどだ。
これが古臭いタスクのことを指しているとは考えられないし
並列ネタはタスク関係無くね?
0713名前は開発中のものです。
2009/03/10(火) 17:38:59ID:DtkxsGymシングルプロセッサが前提の時代に書かれた物に難癖つけるのも大人げないと思う
ていうか俺は現在でもマルチスレッドなんてやりたくない
0714名前は開発中のものです。
2009/03/10(火) 18:22:37ID:9N7ATqdV裏でローディングしながらゲーム動かすなんて別に難しくもなんともねーし
ただ、ゲームオブジェクトにやる意味は無さそうだけどね
0715名前は開発中のものです。
2009/03/10(火) 18:42:31ID:+MsrlA3X0716名前は開発中のものです。
2009/03/10(火) 19:16:57ID:9N7ATqdVやってみりゃいいじゃん
0717名前は開発中のものです。
2009/03/10(火) 19:47:23ID:+MsrlA3Xやってみた
ガックガクになった
0718名前は開発中のものです。
2009/03/10(火) 20:01:50ID:9N7ATqdV0719名前は開発中のものです。
2009/03/10(火) 21:27:13ID:LXtgug0h0720名前は開発中のものです。
2009/03/10(火) 22:07:24ID:OHC3eltB普通非同期アクセスするだろ。
JK
0721名前は開発中のものです。
2009/03/10(火) 22:48:52ID:GPL7IZe+>特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、
は、オブジェクト群じゃなくてタスク群と書くべきだったね。
なんか混ざっちゃった。
>>715
自分も昔から気になってた。
ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、
消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。
それともDMAとかで消費されるバンド幅は、割と安定して予測できるもんなんだろうか。
その辺を実際にいじった経験が無いし、Web上でも情報を見た覚えが無いから分からないんだ・・・。
0722名前は開発中のものです。
2009/03/10(火) 23:19:25ID:DFTfic3i> ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、
> 消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。
もちろん、なる。
だから RPG のように「どうしても間に合わなかったらフレーム描画をスキップしてもおk」な
ゲームでは使うが、対戦格闘とかだと避ける。
0723名前は開発中のものです。
2009/03/10(火) 23:58:04ID:OHC3eltB0724ID:EEKBitmg ◆HSP4mee/SU
2009/03/11(水) 00:28:43ID:xmrBPpjK厨はそもそものタスクシステムなんて知らないから、そもそもの目的も知らない
厨が目にすることができる資料から分かること。それは
ジョブ1を分割したものをタスクT11,T12,T13,…,T1jとし、ジョブ1を逐次処理したい
ジョブ2を分割したものをタスクT21,T22,T23,…,T2jとし、ジョブ2を逐次処理したい
ジョブ3を分割したものをタスクT31,T32,T33,…,T3jとし、ジョブ3を逐次処理したい
・・・
ジョブi を分割したものをタスクTi1 ,Ti2 ,Ti3 ,…, Tijとし、ジョブi を逐次処理したい
──順次処理─→
WAIT_VBLANK then execute[T11,T21,T31,…,Ti1] │逐
WAIT_VBLANK then execute[T12,T22,T32,…,Ti2] │次
WAIT_VBLANK then execute[T13,T23,T33,…,Ti3] │処
… │理
WAIT_VBLANK then execute[T1j ,T2j ,T3j ,…,Tij] ↓
以上が>>2の『システム』部分がやってくれること
0725ID:EEKBitmg ◆HSP4mee/SU
2009/03/11(水) 00:38:10ID:xmrBPpjKこれだけ見ると協調的に並行動作させることが「できる」仕組みと分かる
でも、>>2で紹介されるこれの使い方のお手本、つまりタスクの中身を見ると
何か怪しげなことしてる。走査回数とメモリ消費をケチるためにプライオリティ
というものを使ってる。以前に出てた話だけど、something(t+Δt)を求めるために
参照する外部情報が狂ってる。上図の横方向の前後関係に依存させてしまってる
本来なら並行であるはずの関係を直列の関係にしてるというか、なんていうの?
並列化してリプレイ情報を食わせたら結果が変わってしまうでしょ
並行動作というかフェイク並行動作してるんだよね
0726ID:EEKBitmg ◆HSP4mee/SU
2009/03/11(水) 00:58:38ID:xmrBPpjK>オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること
これって何?GCしてるの?どういうタイミングで?
それってメモリアロケータの都合じゃないの?関係ねー気がする
0727ID:EEKBitmg ◆HSP4mee/SU
2009/03/11(水) 01:12:12ID:xmrBPpjK> ──順次処理─→
>WAIT_VBLANK then execute[T11,T21,T31,…,Ti1] │逐
>WAIT_VBLANK then execute[T12,T22,T32,…,Ti2] │次
>WAIT_VBLANK then execute[T13,T23,T33,…,Ti3] │処
>… │理
>WAIT_VBLANK then execute[T1j ,T2j ,T3j ,…,Tij] ↓
タスクシステムとか仰々しい名前の割りに、それが提供する機能を分析すると
↑みたいな、限りなくどうでもいいことしかしてないということがわかる
これがやりたいなら初めからそう書けばいい。>>2みたいなチンポコリンな実装を
21世紀にもなってタラタラ書くなバーカって思う。寝る
0728ID:EEKBitmg ◆HSP4mee/SU
2009/03/11(水) 02:02:53ID:xmrBPpjK0729名前は開発中のものです。
2009/03/11(水) 02:51:56ID:QLymkmBo>厨はそもそものタスクシステムなんて知らないから、そもそもの目的も知らない
えっとまず始めに確認したいんだけど、「厨」ってのはID:EEKBitmgさんのことでいいのかな?(違ってたらゴメン)
で、「そもそものタスクシステム」の話なんてしてないよ。知ってても知らなくてもどうでもいいよ。
でも「そもそもの目的」は>>2を見れば理解できるでしょ。どれもすごく丁寧で分かりやすい記事だし。
以降、改行箇所は適宜勝手に変更する。ごめん。
>>725
>走査回数とメモリ消費をケチるためにプライオリティというものを使ってる。
いや、走査回数とメモリ消費をケチるためにプライオリティを使ってるわけじゃないと思うんだけど・・・。
>以前に出てた話だけど、something(t+Δt)を求めるために
>参照する外部情報が狂ってる。上図の横方向の前後関係に依存させてしまってる
これはつまり、タスクAの処理結果を見てタスクBの処理をしないといけない場合、タスクシステムだと
AとBのどちらが先(>>724の図で言えば左)にくるのか分からないので困る、って意味かな?(違うかな?)
でもタスクシステムには、Aを必ずBより先に実行させる方法があるよね。それは分かってるよね?
で、タスクBがタスクAに依存してるのだとしたら、それはタスクBの問題(あるいは性質)であって、
タスクシステムの問題とは全く別の話だよ。
>並列化してリプレイ情報を食わせたら結果が変わってしまうでしょ
なんで突然、並列化の話が出てくるの? タスクシステムの目的は並行動作だよね。
これは>>710のおかしい点でもあるんだけど、>>2では最初から並列動作なんか考えてないんだから、
同期処理とかが組み込まれてないのは当たり前だよね。
>並行動作というかフェイク並行動作してるんだよね
並行とフェイク並行の違いって何なんだろう。なんか並行と並列の違いを理解してない匂いがする。
0730名前は開発中のものです。
2009/03/11(水) 02:53:04ID:QLymkmBo>>726
>これって何?GCしてるの?どういうタイミングで?
え、ちょっと待って、>>2の話をしてるんだよね? 本当に>>2読んだ??
ID:EEKBitmgさんの言う>>2って、>>2のうちのどれのこと?
>>2を読んだのかどうかって話で思い出した。>>464の、この部分。
>『型システムを否定している。コンパイラによる最適化を阻害してる。自作ジャンプテーブルで条件分岐は
> 高速化されるという先人のチョイテク・豆知識を天下り式に真似ているのではないか。それは太古の簡素な
> CPUアーキテクチャに依存した公式に過ぎない。定理ではない』
断言してもいいけど、ID:EEKBitmgさんとこの助教授さんは>>2をちゃんと読んでないか、あるいは
頭のネジが足りてないよ。それとも助教授ってこんなもんなのか。知り合いにいないから知らんけど。
ところで課題レポートはちゃんと提出した?
>>727
>タスクシステムとか仰々しい名前の割りに、それが提供する機能を分析すると
ちっとも分析できてないよ・・・。
>↑みたいな、限りなくどうでもいいことしかしてないということがわかる
全く分かってないよ・・・。
0731名前は開発中のものです。
2009/03/11(水) 04:20:03ID:yoM2Y43z若干正確さに欠ける点に目をつむって処理を端しょってたことに勘付いたか
0732名前は開発中のものです。
2009/03/11(水) 07:22:34ID:nhOwJy5wただ、現実はそれに立ちはだかると言うことは知っておいた方がいい。
0733名前は開発中のものです。
2009/03/11(水) 07:26:19ID:NK6nIuY50734名前は開発中のものです。
2009/03/11(水) 08:32:00ID:74bG+9Wettp://www.nicovideo.jp/watch/sm2078250
0735名前は開発中のものです。
2009/03/11(水) 13:15:27ID:wSuVQdvJ適当にクラス作ってリストにして順番に実行
内部では各自カウンタとステート持って勝手にやる、死んだり生きたりはおかしなことにならないようにシステムでええ感じに処理してねー
とまぁ簡単なものならこんなのでいいじゃろ
複雑なのはしらん
0736名前は開発中のものです。
2009/03/12(木) 07:22:55ID:7byKm2pB0737名前は開発中のものです。
2009/03/12(木) 11:49:54ID:Rx7RnDpA0738ID:EEKBitmg ◆HSP4mee/SU
2009/03/12(木) 23:06:36ID:SEPBaONy>なんで突然、並列化の話が出てくるの?
それは『ボクのタスクシステムはどっちかっつーと並列!』と言っていた
>>632のおじちゃんに言ってよね。CodeZineなんて初っ端で並列処理と言い切ってる。
あと生協で逆引きゲームプログラミングとかいう本をパラパラーっと立ち読みしたら
『並列動作システム』とか書いてあったし。『並列処理動作』してるんだって。ゲラゲラゲラー
もうさ、ハッタリかましすぎだよね。説明してる内容と、それを一言で表現するときに
どこかから引っ張ってきた用語が全く一致してないんだよね。厨房を騙くらかそうと必死でしょ
今さっき覚えてきた単語をとりあえずあててみました。みたいな。ちょっとね、おかしいとおもう
その点Logician Lord、White Paper、けんもほろろのページは並列なんて一言も言ってない
上に比べたらまだマシな部類なのかなーと思える。タスクシステム解説つっても千差万別だね
■ このスレッドは過去ログ倉庫に格納されています