1 名前:名前は開発中のものです。 mailto:sage [2009/02/19(木) 02:21:01 ID:k4ODtuXP] タスクシステムについての議論、相談、質問、雑談などのスレです part4 pc11.2ch.net/test/read.cgi/gamedev/1233459490/ part3 pc11.2ch.net/test/read.cgi/gamedev/1226199100/ part2 pc11.2ch.net/test/read.cgi/gamedev/1196711513/ part1 pc11.2ch.net/test/read.cgi/gamedev/1173708588/ ・タスクと呼ばれる実装は、非常に多岐に渡ります 古典タスクシステムについての話題は「>>2 」と明示してください そうでない場合はカスタム版タスクであることを明示してください ・人を憎んで言語を憎まず
644 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 02:03:29 ID:LbywpZ2h] コーヒー牛乳は牛乳か→NO
645 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 02:08:20 ID:cMprZFoi] >>643 見苦しいです
646 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 02:10:52 ID:cewi3IDn] >>645 見苦しいか?ふむ。 それなら、日本語の不自由そうな奴に絡むのはもうやめるわ。疲れるだけだ。
647 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 02:23:08 ID:ZZNOCL1s] >「優先順位がつくばあいもあるから正確には並列とは言えない」 >だと、「優先順位がときどき偶発的について、そのときに限り並列性が落ちるから >並列とは言えない」と読める。 優先順位がときどき偶発的について、そのときに限り並列性が落ちることがあるから、 正確には並列とは言えない、であってるよ。 タスクシステムは正確には並列か?という命題に対して、 タスクに優先順位が付く場合を判例に挙げたまで。 処理に優先順位が付く場合、理論的にピュアな並列処理とは言えないからな。 完全な並列性とは、なにをどの順で実行しても構わない場合のみ。
648 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 02:47:03 ID:ZZNOCL1s] >それなら、日本語の不自由そうな奴に絡むのはもうやめるわ。疲れるだけだ。 自分がまともに日本語を扱えないくせに。 >>643 とか、これ日本語ですか? Q:タスクシステムは正確には並列か? A:タスクの処理の優先順位をサポートするタスクシステムの場合には、 タスクの処理に順序が出来るので、この場合は正確には並列とは言えない。 たったこれだけのことが何で分からないのか。 彼はこの問題を実装レベルの並列度の話に持ち込もうとするが、 そもそも、すべてのタスクを同時に実行できるハードが存在しない現状で、 実装レベルでの並列性をもってして、 「タスクシステムが正確には並列かどうか」を判断するのはナンセンス。 なぜならタスクシステム自体による制限よりも、 ハードウェアによる制限の方が先に現れるから。
649 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 02:49:57 ID:cewi3IDn] >>647 > タスクシステムは正確には並列か?という命題に対して、 だが、あんたは、>>635 を誤解している。 635は > 正確には並行処理じゃないの? と書いてあって、並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。 635を書いた本人は、「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので 「並行処理と呼ぶほうが正しいのではないか」と言ってるわけ。 それなのにそれに対する受け答えとして、あんたは、>637で「スループットがN倍になっていなければ pureな並列とは呼べないので並行ではない」と言っている。あんたが「並列度1.0(そんなもの現実的に 存在しないんだが)ではない並列」を「並列」とみなさないのはあんたの勝手だが、635に対する返答として 637は、おかしい。
650 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 02:52:08 ID:cewi3IDn] >>648 > Q:タスクシステムは正確には並列か? > A:タスクの処理の優先順位をサポートするタスクシステムの場合には、 > タスクの処理に順序が出来るので、この場合は正確には並列とは言えない。 > たったこれだけのことが何で分からないのか。 Qが間違っている。誰もそんなQをしていない。詳しくは>>649
651 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 03:03:47 ID:cewi3IDn] 俺、もう寝る。 どうか、ID:EEKBitmg ◆HSP4mee/SU は、 ID:ZZNOCL1sの相手をしてやって欲しい。 ID:EEKBitmg ◆HSP4mee/SU の書く内容は、技術的に間違ってることも多々あるし、態度も生意気だけど、 日本語は意味明瞭だし、技術用語の使い方も比較的正しいので俺としてはかなり好感が持てる。 まあ、勉強熱心なんだろうな・・。
652 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 10:03:00 ID:8u/3vapK] なんか良く分からんが、お前らの並列と並行の定義はこれで合ってるの? docs.sun.com/app/docs/doc/819-0390/mtintro-6?l=ja&a=view
653 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 10:21:13 ID:ZZNOCL1s] まず並行でないなら並列化できないわけで。 逆に、並列化不可能なら、並行でない。 というか、むしろ今まで並行の意で並列と言っていたのだが。 >スループットがN倍になっていなければ >pureな並列とは呼べないので並行ではない は正しい。 順序がある処理は並行ではない。
654 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 10:22:50 ID:ZZNOCL1s] journal.mycom.co.jp/articles/2006/05/15/bsd3/ 俺はこっちかな。
655 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 10:43:57 ID:8u/3vapK] >>652 >>654 同じだとおもうけどw >順序がある処理は並行ではない。 いや、順序があっても並行は並行だろう。 ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、 仰々しく「並行」だの「並列」だの言うな、と主張しているように見えるなあ。 ID:ZZNOCL1sは実践的な話をしていて、 並列さんは字面通りの一般的な並列の定義に沿って話しているだけに見える。 というのは深夜の時点で並列さんも悟っているように見える。
656 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 10:53:23 ID:ZZNOCL1s] >並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。 >「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので 並行化によって待ち時間が減ったりするので、スループットは向上するが、 1倍の基準点が不明。
657 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 10:57:38 ID:cewi3IDn] >>653 > というか、むしろ今まで並行の意で並列と言っていたのだが。 あんたは、全然話にもならない。 専門用語を勝手に本来と違う意味で使っておいて 相手に日本語が読めないだの何だの言うのは本当、勘弁して欲しい。
658 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 11:06:08 ID:ZZNOCL1s] >いや、順序があっても並行は並行だろう。 順序がある処理は並行化できないよ。 例えば、処理Aと処理Bがあって、 BはAの後でないと実行不可だとする。 この場合、AとBを並行に処理することは出来ない。
659 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 11:06:20 ID:cMprZFoi] >>655 > ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、 そんな話じゃないでしょうに… あと >並列さん >悟っている なんか気持ち悪いです
660 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 11:13:36 ID:cewi3IDn] >>658 > 順序がある処理は並行化できないよ。 それぞれのタスクを逐次処理しようが、それは並行処理って言うんだが。 ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。 本当、専門用語を勝手に意味を作り替えんなと言いたい。 >>659 気持ち悪いのはお前。お前はいらない子だから死んでくれ。
661 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 11:17:08 ID:ZZNOCL1s] >>657 お前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。 >並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。 ↑何に対する1倍かはしらないがな。
662 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 11:25:40 ID:cewi3IDn] >>661 >>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。 >↑何に対する1倍かはしらないがな。 そこが読めてないのお前だけだろう。 「concurrentな処理は、Nコアであっても、単一コアで実行したときの1倍以上のスループットが出ない」の意味。
663 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 11:31:14 ID:cewi3IDn] >>661 > お前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。 どこをどうやればそう読めるのか俺は知りたい。 並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が 単一か複数かの差のみ。そんなことは誰でもわかっている。 その用語を勝手に違う意味に使ってたのはあんただろ。 俺には、頭がおかしいとしか思えない。 その頭のおかしいあんたを唯一擁護しているのは ID:cMprZFoi だけ。 こいつは、あんたが書き込みした直後にしか出てこない。どうせこれもあんただろ。
664 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 11:36:14 ID:92TsYx3X] カプコンのMTフレームワークみたいなマルチコアでのパフォーマンスに特化した設計の フレームワークなら並列云々の話になると思うが… あれもタスク進化系の一種なのか?ちょっとタスクって守備範囲広すぎ。 あれはコア数がパフォーマンスに直結する造りだね。 順序の依存性のある処理と無い処理をグループ分けして、並列で問題ないケースは複数コアで同時計算。 順序の依存性がある処理との同期スケジューリングをフレームワークが管理って感じで。 ゲーム中には依存性のある処理と無い処理があるから、まぁ複数コアを有効に使おうと思うと こんな感じな設計に行き着くんだろうね。
665 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 11:40:55 ID:cewi3IDn] ID:EEKBitmg ◆HSP4mee/SUはまだ良かった。 HSP使いのプログラミング経験の浅い世間知らずのクルクルパーだが、 そのわりには用語の使い方はまともだし、勉強もよくしていると思っていた。 俺は専門用語を勝手に俺解釈の用語とすり替えて話す奴とは 面倒くさいので話をしたくない。 このスレはどうせみんな常駐してるようなもんなんだから、みんなコテハン にすればいい。それそれぞれが嫌な奴をNGリストに入れておけばいいと思うんだがな。 そんなわけで ID:ZZNOCL1sは俺をNGリストに入れておいてくれ。 お前と話をするのは疲れる。
666 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 11:49:53 ID:ZZNOCL1s] >それぞれのタスクを逐次処理しようが、それは並行処理って言うんだが。 いや、単純に考えて、処理に依存関係があると、並行処理できないだろ。 実際OSなんかは各スレッド間に依存関係が無いものと見なして並行処理しているわけで。
667 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 11:52:30 ID:8u/3vapK] >>658 それが実質直列だってことは分かるんだけど。 とりあえず、俺が何を考えているのかと言うと、 動き方が実質直列であっても、それぞれ別のスタック領域を持ってる点が違うだろ? 別々のコンテキストを持っている。 その辺を区別するのに「実行効率ゼロの並行」も俺は並行と呼んでただの直列と区別していた。 要するに俺はコアが何個でそのPCがどこ指してるのって部分だけで並行か並列かって言ってた。 んで、一般的定義はどうなのと思ってググった先を見てみると、 コンテキストがどうのというのは論点じゃ無いような気がしてきた。 もうちょい調べてみるわ。
668 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 12:05:02 ID:cewi3IDn] >>666 > いや、単純に考えて、処理に依存関係があると、並行処理できないだろ。 あんたの「並行処理」について持ってる勝手なイメージは知らんが、 優先順位がついていてそれぞれのタスクを逐次的に処理していく場合も (そのタスクが終了後に消滅しないなら)「並行処理」と呼ぶ。 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 「並行プログラムは、それぞれの計算プロセスを実行箇所をインターリーブしながら シングルプロセッサによって逐次的に実行される」 計算プロセス間の依存性とか、効率とかそんなことは並行処理の定義とは 何ら関係がない。 ・実行箇所をインターリーブしながら(タスクからリターンしてもタスクは 通例存在していて) ・シングルプロセッサによって(ある瞬間を見たときにつねにひとつの プロセッサしかタスクを実行していない) この二つを満たしているなら、並行処理。
669 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 12:09:24 ID:ZZNOCL1s] >ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。 どこにそんな定義があるんだ?
670 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 12:10:23 ID:cewi3IDn] >>667 何を言いたいのかよくわからないが、>>668 の説明は理解できる?
671 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 12:11:16 ID:cewi3IDn] >>669 >>668
672 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 12:26:24 ID:ZZNOCL1s] 並行計算 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の人は分かってないみたいですよ。 注意してきたらどうなんですかね。
673 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 12:42:43 ID:ZZNOCL1s] >>668 >計算プロセス間の依存性とか、効率とかそんなことは並行処理の定義とは >何ら関係がない。 だから、並行処理では処理の依存性は考えない=依存性は扱わない=依存性は扱えない。 扱わないのは扱えないから扱わないの。 実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。 各スレッドを並行と見なして実行する。 処理に依存性がある場合はプログラマが自前で同期オブジェクトとかつかってシコシコやる。 一方、タスクシステムでは処理の依存を優先順位という形で明示的に扱うのが一般的。 各タスクを並行とみなしているわけではない。
674 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 12:44:25 ID:92TsYx3X] いつのまにか 並行・並列処理の単語の定義のスレになってるな。 自然言語の単語の定義なんてどこまでいっても曖昧なのに… 自分の言う「臭い」と他人の言う「臭い」が同じという保障なんて誰にも出来んよ 確かなのは人工言語で書かれたソースのみ。
675 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 12:44:25 ID:cewi3IDn] >>672 ざっと見たけど日本語のwikipediaのほうは、ひどいな。 これとか > 並行性のための構造を備えた最も一般的な言語はJavaとC#である。 なんでだよと突っ込みを入れたくなる。 これ書いてる奴は、thread生成が出来るからJavaとC#を入れてるんだろうけどひどいにもほどがある。 C#のyieldによるcontinuationは確かに並行スレッドなんだが、それならJavaを含めるのはおかしい。 日本語のwikipediaの「並行性」の項目もひどいな。なんだよこれ。 ちょっとwikipedia行って暴れてくるわ。
676 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 12:47:15 ID:cewi3IDn] >>674 > 自然言語の単語の定義なんてどこまでいっても曖昧なのに… 専門用語は、限りなくstrictに定義されてるべき。 そうじゃなきゃ論文とか意味のないものになってしまう。
677 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 12:50:58 ID:ZZNOCL1s] >>668 wikipediaを引用しているようだが、途中で切れているようだが。 >「並行プログラムは、それぞれの計算プロセスを実行箇所をインターリーブしながら >シングルプロセッサによって逐次的に実行される」 の後ろには、実際には 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. が続いている。 自分の都合の良いところだけを掻い摘んで引用する根性の悪さ。 結局、 >並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が >単一か複数かの差のみ。そんなことは誰でもわかっている。 は間違い。
678 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 12:52:11 ID:cewi3IDn] >>673 > 実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。 それはダウト。 実際のOSにはプロセスのpriorityがあって、それに従ってスケジューリングされる。 割り込みなんか特にそう。あるプロセスの実行が他プロセスの実行より優先されることは多々ある。 キーボードイベントが発生したら、その処理が優先される。そこには明確な実行順序がある。 そんな機能すらない、もっとprimitiveなOSの話をしているなら、まあそれはそれでいいけど 「実際のOS」と書かれるとWindowsやらLinuxやらを想定しているのかと俺は思ってしまう。
679 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 13:02:13 ID:ZZNOCL1s] >>675 お前がひどいという日本語版の、 「並行性のための構造を備えた最も一般的な言語はJavaとC#である。」 は英語版のページにある 「Today, the most commonly used programming languages that have specific constructs for concurrency are Java and C#. 」 の訳なわけだが。 そしてその英語版のページを引用して、 「これが並行処理の定義だ!」と言っていたのがお前なのだが。 さらにその引用も自分の都合のいいところだけを引用するという正確の悪さ。 「〜又は〜」と書いてあるのに、「又は」以降をバッサリカット。
680 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 13:05:44 ID:ZZNOCL1s] >>678 プロセスのプライオリティーは必ずしも守られるわけではない。 あれは、CPUリソースに対する優先順位であって、処理に対する依存関係を表すものではない。 現にマルチプロセス環境だと、プライオリティーの高いものと低いものが同時に実行される。
681 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 13:05:45 ID:cewi3IDn] >>677 それなぁ、「executed in parallel」以下は敢えて省略した。 これを「根性の悪さ」と言われるのはわからないではないが、いま俺が問題としているのは、 「concurrent thread」 とか「parallel thread」というときのconcurrentとparallelの意味の違いだ。 「concurrent computing」という学問分野があって、その学問分野は広範で いわゆる分散コンピューティングみたいなことまで研究対象としている。 本来、concurrentの定義にparallelとか出てくるのはおかしいのだが(それだとconcurrentとparallelとの 差が無くなってしまう)、「concurrent computing」の分野においては、「concurrent program」の意味は、 かなり拡大解釈されている。だから、その部分をはしょった。 「concurrent computing」のconcurrentを援用するのがあまり良くなかったと言われれば、まあ、それはそうなのだが。
682 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 13:09:34 ID:Fbn5zOAB] 並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。 並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。 んじゃないの? 独立した概念(関連はあるけど)なんだから、>>660 の >ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。 はおかしいと思う。 concurrentに作っておけば、parallelに実行しやすいんだし。
683 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 13:17:17 ID:cewi3IDn] >>680 うむ、それは正しい。 >>682 ああ、そうか。そういう意味では、660はおかしいし、書き方が悪いな。 これについては反省。すまんかった。> ID:ZZNOCL1s
684 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 13:19:11 ID:ZZNOCL1s] 用語の定義をめぐって、wikipediaと格闘するような人とは議論したくない。
685 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 13:20:00 ID:ZZNOCL1s] お互い疲れたと見える
686 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 13:24:11 ID:cewi3IDn] >>682 > 並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。 > 並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。 この定義に基づいて古典的なタスクシステムのタスクについて語ると ・古典的なタスクシステムのタスクは、「並行」。 ・実行順序に厳しい制約があるとみなすなら、「並列」化はできない。 ところが実際のゲームでは、タスク間に依存関係がない部分が結構あるので 部分的に「並列」化できる。 この「並列」化によって、コア数N×0.7ぐらいのパフォーマンスは出る。 で、この「並列」化を古典的タスクシステムを進化(?)させて書けるようにすれば いいということだな。
687 名前:並列さん ◆dPfetnROQg mailto:sage [2009/03/07(土) 13:24:58 ID:cewi3IDn] >>684 俺のことは、NGリストに入れておいてくれ。 最初に682のように書いてもらえれば、俺はすぐに理解できたのだが。
688 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 14:32:04 ID:NOayWFQU] これにて一件落着
689 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 14:39:01 ID:ZZNOCL1s] おれは、>>682 と同じ意見ではない。 >並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。 これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、 必要だと考えている。 並行性 ja.wikipedia.org/wiki/%E4%B8%A6%E8%A1%8C%E6%80%A7 だから、 1.並行でなければ並列化できない。 2.タクスの処理順位を考慮するようなタスクシステムは、すべてのタスクが互いに並行というわけではない。 3.ゆえに、タスクシステムを並列化するならば、並行なタスク同士を抽出する必要がある。 と考え、 さらに、タクスの処理順位を考慮するようなタスクシステムは「並行でない」と考える。
690 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 15:29:42 ID:8u/3vapK] >並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。 俺もこう思ってた。 んでそうハッキリ書いてある資料を探してるんだけど、見つからない。 >並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、必要 次からこっちの定義で話すわ。
691 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 15:37:28 ID:92TsYx3X] >>689 >さらに、タクスの処理順位を考慮するようなタスクシステムは「並行でない」と考える。 MTフレームワークは処理順の依存の有無でタスク分けてマルチコアで同時に複数タスク動かしてるけど これは処理順位を考慮するシステムだから「並行でない」のかな?
692 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 15:42:35 ID:ZZNOCL1s] だいたいちょっと考えれば分かることだが、並行の定義が、 >並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。 だと、いわゆるオブジェクトと呼ばれるものは全部並行ってことになっちまうだろ。 コンテキストが同時に存在できないオブジェクトなんて、まあ無いからな。 言葉としての意味が無くなる。
693 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 15:56:08 ID:ZZNOCL1s] >>691 もしはじめから並行なら、MTフレームワーク自体いらないでしょ。
694 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 16:00:29 ID:92TsYx3X] >>693 >もしはじめから並行なら どこにそんな前提が?
695 名前:名前は開発中のものです。 [2009/03/07(土) 16:36:27 ID:E0xOAlNR] >>689 >これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、 ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの? >並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。 と同じ事を言ってるだけのような。 >1.並行でなければ並列化できない。 は違うと思う。 並行でない命令列も、依存関係が無ければ並列化できる。 現にCPUの中でシリアルセマンティクスを満たしつつ並列実行が普通におこなわれている。 そういう命令列は本質的に並行だった?違うでしょ?スーパースカラで並列に実行される命令は、 異なるコンテクストを持ってるわけじゃないんだから。 あと細かいことだけど、順位と順序は全然意味違うんだから、 ちゃんと使い分けてくれないと読み辛いよ。
696 名前:名前は開発中のものです。 [2009/03/07(土) 18:22:05 ID:UcXZ5wF9] でも依存関係があるかないかなんて並列で実行してんのにどうやってわかんだろね くる値によって依存関係があるかもわからんしないかもわからん ごった煮だとそういうソースになってしまうな
697 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 18:30:21 ID:rbzzI5lu] ID:UcXZ5wF9 ↑(・∀・)↑ ウンコちゃんインしたお
698 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 18:34:25 ID:ryll+mdy] >>695 > >これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、 > ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの? > >並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。 > と同じ事を言ってるだけのような。 例えば、コンテクストが共有されている場合などでは、 コンテクストは同時に存在できるが、同時に実行はできない。 具体的には、オブジェクトAがオブジェクトBの参照を内部に保持している場合など。 オブジェクトAはオブジェクトBとコンテキストを共有しているということになり、 オブジェクトAとオブジェクトBは同時に存在できるが、同時に実行は出来ない。 >並行でない命令列も、依存関係が無ければ並列化できる。 並行でない命令列の中でも、依存関係が無い並行な部分だけは並列化できる。 並列化とは、並行に処理することだから、並行な処理しか並列化できない。 自動並列化 ja.wikipedia.org/wiki/%E4%B8%A6%E5%88%97%E5%8C%96 >プロセッサで「並行」に実行されるようにする。 スーパースカラ 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 >プロセッサ内の冗長な実行ユニットを使って「並行」して処理される。
699 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 18:39:37 ID:ryll+mdy] >>694 ヒント:背理法
700 名前:698 mailto:sage [2009/03/08(日) 19:26:02 ID:ryll+mdy] 訂正するけど、 コンテクストが共有されていても、read-onlyな場合は並列化可能だね。 書き込みするとアウトだけど。
701 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 19:27:58 ID:0j+yjPij] >>698 なんか色々と変だよ。 >例えば、コンテクストが共有されている場合などでは、 >コンテクストは同時に存在できるが、同時に実行はできない。 共有されているのに同時に存在するってどういう意味? コンテクストはいくつあるの? >具体的には、オブジェクトAが(以下この段落略) オブジェクトとコンテクストがごっちゃになってる。 オブジェクトAがオブジェクトBへの参照を内部に保持していても、 コンテクストがいくつあるのかという問題とは関係無いよ。 オブジェクトAとBを同時に実行はできない?オブジェクトを実行するってどういう意味? この辺は、>>692 の勘違いと同じ匂いがする。 てか>>692 さんなのかな。
702 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 19:30:14 ID:0j+yjPij] んが。改行多過ぎ言われた。 701の続き。 >並行でない命令列の中でも、依存関係が無い並行な部分だけは並列化できる。 「依存関係が無い部分」を「並行な部分」とは呼ばないよ。 いや呼ぶのは自由だけど、少なくとも聞いたことないよ。 いや聞いたことないだけかもしれないけど。 >並列化とは、並行に処理すること(以下略) ×。 もうちょっと詳しく言うと・・・ 「並列化とは、並行に処理すること」 という言葉それだけを見るなら、○。 でも、そこに出てくる「並行」という言葉は、並列という言葉を説明するための 「(同時)並行」という意味であって、このスレでここまで長々と議論してきた 並行(concurrent)とは意味が違うよ。 (「並列」を説明するのに「並列」と言っても仕方が無いからね) 二つ挙げてくれたwikipediaの説明に出てくる「並行」も、同じように「並列」を 説明するための「並行」であって、ここに引っ張り出してきても意味が無いよ。
703 名前:名前は開発中のものです。 [2009/03/09(月) 12:41:05 ID:2btSBxrR] 大変だ!タスク信者が息してないぞ!
704 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:31:41 ID:+h98nuCN] つまらん煽りイラネ
705 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 14:16:42 ID:EugqMYhT] 本人は面白いと思って書いてんだろ
706 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/10(火) 01:19:32 ID:W7jNDZ1N] 厨は『並行処理』という言葉を使ったけど、ノートを読み返したら『並行動作』となっていた。 =『擬似並列動作』のことを云いたかったの!微妙に書き間違えてた?と書こうと思ったら >>637-以降で怖いおじちゃん達が深夜の泥沼バトルが展開されてあれよあれよと言う間に みんな深淵の彼方へ飛んでいってしまった。ニーチェの警告に耳を傾けない者はみんな 闇に飲まれちゃうんだ。恐ろしいことだ
707 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/10(火) 01:20:59 ID:W7jNDZ1N] 俺は元々>>2 の話をしてて、これはどこをどうひっくり返しても逐次処理・直列処理してる。 ところが>>632 のタスクシステムは直列処理ではなくどっちかっつーと『並列』らしい。 たぶん>>632 の云うタスクシステムは>>2 とは別物か、あるいは並列ではなくて 『擬似並列動作』とか『並行動作』のことをいってるのかなーとESPした。それが>>635 >>2 の『システム(笑)』部分が提供するものは ・粗末な侵入式の連結リスト ・それを周期的にナメナメしてディスパッチするショボイ仕掛け だけ。>>2 はこの『システム』部分をユーザー定義の逐次処理・直列処理に使ってるけど ユーザー定義の並行動作に使うこともできるっちゃできる 例えば組み込みシステムでは、異なる割り込みハンドラからの指示でスリープ状態から 復帰するタスクとかあるからね
708 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/10(火) 01:36:39 ID:W7jNDZ1N] あるいは、敵をやっつけた時の爆発エフェクト。これの破片・パーティクルの一個一個を タスクとして登録してるとする。(そんな無駄なことしたくないけど、する奴もいるだろう) 破片・パーティクルのタスクは他のタスクとの作用なんてないとする。ならばこれらは 確実に並行動作してる 逐次処理・直列処理で並列動作してる。だが並列動作じゃない
709 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/10(火) 01:37:17 ID:W7jNDZ1N] >>708 ×逐次処理・直列処理で並列動作してる。だが並列動作じゃない ○逐次処理・直列処理で並行動作してる。だが並列動作じゃない
710 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/10(火) 02:18:01 ID:W7jNDZ1N] >>2 のシステム(笑)はなんで並列動作できないの? 一本の連結リストにみんなチャンポンにしてぶち込んでる時点で 別スレッドで同時並行的に弄繰り回されるということを考えてないだろ タスク間通信に必要な同期のメカニズムを提供していないのもそう シングルスレッドで逐次処理するという前提だからバッサリ省いてる 次に、>>2 のTCB(笑)とかいう構造体のプライオリティというパラメータは priority-rankingではなくpriority-sequenceとして使われており、異様。 これは処理順序を表しており、この順序でソートして順次処理される そういう前提でタスク(ジョブ)の内容を記述してる。順序が狂ったら動かない
711 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 12:53:53 ID:GPL7IZe+] >>707 >ユーザー定義の並行動作に使うこともできるっちゃできる できるっちゃできる、じゃなくて、ゲームオブジェクトの並行動作を記述することが そもそもタスクシステムの目的なんじゃないの? オブジェクトごとのデータとコンテクストをひとまとめにして自律的な行動を 自然(←人によって感じ方は違うだろうけど)な形で書ける(気分になれるw)ことと、 オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること、 の2点を、素朴な形で実装したのがタスクシステムの良い点だったと思うんだけど。 >>710 >>>2 のシステム(笑)はなんで並列動作できないの? 特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、 それらを並列動作させることはできるんじゃないの? (そういう番号をプライオリティと呼ぶことの是非は別として) 別に誰も、全てのタスクを並列動作させることなんか最初から期待してないと思うけど。 かなり上の方に出てた自動的に並列動作させる云々の話も、そういうプライオリティの タスクに限って、プロセッサ数に合わせて並列でディスパッチするような拡張も考えられる のではないか、という話だったと理解してたんだけど。
712 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 14:14:14 ID:arIRXx6m] pc.watch.impress.co.jp/docs/2009/0305/kaigai493.htm > ゲームプログラム本体のコードは、OSのコードと同じように、 > 整数演算中心で小さな範囲での並列しかできず、 > 基本的には逐次実行しなければならないコードがほとんどだ。 これが古臭いタスクのことを指しているとは考えられないし 並列ネタはタスク関係無くね?
713 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 17:38:59 ID:DtkxsGym] マルチプロセッサでマルチスレッドしたいならそう拡張すればいいんとちゃう? シングルプロセッサが前提の時代に書かれた物に難癖つけるのも大人げないと思う ていうか俺は現在でもマルチスレッドなんてやりたくない
714 名前:名前は開発中のものです。 [2009/03/10(火) 18:22:37 ID:9N7ATqdV] 別にマルチスレッドなんて必要ならやりゃいいじゃん 裏でローディングしながらゲーム動かすなんて別に難しくもなんともねーし ただ、ゲームオブジェクトにやる意味は無さそうだけどね
715 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 18:42:31 ID:+MsrlA3X] そういやフルにディスクアクセスしてても重たくなったりカクついたりしないのかね?
716 名前:名前は開発中のものです。 [2009/03/10(火) 19:16:57 ID:9N7ATqdV] >>715 やってみりゃいいじゃん
717 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 19:47:23 ID:+MsrlA3X] >>716 やってみた ガックガクになった
718 名前:名前は開発中のものです。 [2009/03/10(火) 20:01:50 ID:9N7ATqdV] そうか市販のゲームは普通にできてるのに不思議だな
719 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 21:27:13 ID:LXtgug0h] 裏でローディングなんてDMA時代からとっくにやってます。
720 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 22:07:24 ID:OHC3eltB] >715 普通非同期アクセスするだろ。 JK
721 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 22:48:52 ID:GPL7IZe+] >>711 >特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、 は、オブジェクト群じゃなくてタスク群と書くべきだったね。 なんか混ざっちゃった。 >>715 自分も昔から気になってた。 ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、 消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。 それともDMAとかで消費されるバンド幅は、割と安定して予測できるもんなんだろうか。 その辺を実際にいじった経験が無いし、Web上でも情報を見た覚えが無いから分からないんだ・・・。
722 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 23:19:25 ID:DFTfic3i] >>721 > ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、 > 消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。 もちろん、なる。 だから RPG のように「どうしても間に合わなかったらフレーム描画をスキップしてもおk」な ゲームでは使うが、対戦格闘とかだと避ける。
723 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 23:58:04 ID:OHC3eltB] フルにディスクアクセス行ったところで、光学ドライブからの転送量なんてたかが知れてるからな。
724 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/11(水) 00:28:43 ID:xmrBPpjK] >>711 厨はそもそものタスクシステムなんて知らないから、そもそもの目的も知らない 厨が目にすることができる資料から分かること。それは ジョブ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 の『システム』部分がやってくれること
725 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/11(水) 00:38:10 ID:xmrBPpjK] >>724 これだけ見ると協調的に並行動作させることが「できる」仕組みと分かる でも、>>2 で紹介されるこれの使い方のお手本、つまりタスクの中身を見ると 何か怪しげなことしてる。走査回数とメモリ消費をケチるためにプライオリティ というものを使ってる。以前に出てた話だけど、something(t+Δt)を求めるために 参照する外部情報が狂ってる。上図の横方向の前後関係に依存させてしまってる 本来なら並行であるはずの関係を直列の関係にしてるというか、なんていうの? 並列化してリプレイ情報を食わせたら結果が変わってしまうでしょ 並行動作というかフェイク並行動作してるんだよね
726 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/11(水) 00:58:38 ID:xmrBPpjK] >>711 >オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること これって何?GCしてるの?どういうタイミングで? それってメモリアロケータの都合じゃないの?関係ねー気がする
727 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/11(水) 01:12:12 ID: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世紀にもなってタラタラ書くなバーカって思う。寝る
728 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/11(水) 02:02:53 ID:xmrBPpjK] 起きた。なんか間違えた。まぁいいや。逐次処理って違うや。もういい
729 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 02:51:56 ID:QLymkmBo] >>724 >厨はそもそものタスクシステムなんて知らないから、そもそもの目的も知らない えっとまず始めに確認したいんだけど、「厨」ってのはID:EEKBitmgさんのことでいいのかな?(違ってたらゴメン) で、「そもそものタスクシステム」の話なんてしてないよ。知ってても知らなくてもどうでもいいよ。 でも「そもそもの目的」は>>2 を見れば理解できるでしょ。どれもすごく丁寧で分かりやすい記事だし。 以降、改行箇所は適宜勝手に変更する。ごめん。 >>725 >走査回数とメモリ消費をケチるためにプライオリティというものを使ってる。 いや、走査回数とメモリ消費をケチるためにプライオリティを使ってるわけじゃないと思うんだけど・・・。 >以前に出てた話だけど、something(t+Δt)を求めるために >参照する外部情報が狂ってる。上図の横方向の前後関係に依存させてしまってる これはつまり、タスクAの処理結果を見てタスクBの処理をしないといけない場合、タスクシステムだと AとBのどちらが先(>>724 の図で言えば左)にくるのか分からないので困る、って意味かな?(違うかな?) でもタスクシステムには、Aを必ずBより先に実行させる方法があるよね。それは分かってるよね? で、タスクBがタスクAに依存してるのだとしたら、それはタスクBの問題(あるいは性質)であって、 タスクシステムの問題とは全く別の話だよ。 >並列化してリプレイ情報を食わせたら結果が変わってしまうでしょ なんで突然、並列化の話が出てくるの? タスクシステムの目的は並行動作だよね。 これは>>710 のおかしい点でもあるんだけど、>>2 では最初から並列動作なんか考えてないんだから、 同期処理とかが組み込まれてないのは当たり前だよね。 >並行動作というかフェイク並行動作してるんだよね 並行とフェイク並行の違いって何なんだろう。なんか並行と並列の違いを理解してない匂いがする。
730 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 02:53:04 ID:QLymkmBo] 続き。 >>726 >これって何?GCしてるの?どういうタイミングで? え、ちょっと待って、>>2 の話をしてるんだよね? 本当に>>2 読んだ?? ID:EEKBitmgさんの言う>>2 って、>>2 のうちのどれのこと? >>2 を読んだのかどうかって話で思い出した。>>464 の、この部分。 >『型システムを否定している。コンパイラによる最適化を阻害してる。自作ジャンプテーブルで条件分岐は > 高速化されるという先人のチョイテク・豆知識を天下り式に真似ているのではないか。それは太古の簡素な > CPUアーキテクチャに依存した公式に過ぎない。定理ではない』 断言してもいいけど、ID:EEKBitmgさんとこの助教授さんは>>2 をちゃんと読んでないか、あるいは 頭のネジが足りてないよ。それとも助教授ってこんなもんなのか。知り合いにいないから知らんけど。 ところで課題レポートはちゃんと提出した? >>727 >タスクシステムとか仰々しい名前の割りに、それが提供する機能を分析すると ちっとも分析できてないよ・・・。 >↑みたいな、限りなくどうでもいいことしかしてないということがわかる 全く分かってないよ・・・。
731 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 04:20:03 ID:yoM2Y43z] HSPくんは厨房のくせになかなかどうして要点を押さえてるのう 若干正確さに欠ける点に目をつむって処理を端しょってたことに勘付いたか
732 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 07:22:34 ID:nhOwJy5w] まぁ、学生さんが理想を追い求めるのは悪いことじゃない。 ただ、現実はそれに立ちはだかると言うことは知っておいた方がいい。
733 名前:名前は開発中のものです。 [2009/03/11(水) 07:26:19 ID:NK6nIuY5] タスクシステム完全に終わったな
734 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 08:32:00 ID:74bG+9We] タスクシステムのプレゼン動画 ttp://www.nicovideo.jp/watch/sm2078250
735 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 13:15:27 ID:wSuVQdvJ] ていうか細切れに順番に処理してくれるシステムなら何でもいいんじゃね? 適当にクラス作ってリストにして順番に実行 内部では各自カウンタとステート持って勝手にやる、死んだり生きたりはおかしなことにならないようにシステムでええ感じに処理してねー とまぁ簡単なものならこんなのでいいじゃろ 複雑なのはしらん
736 名前:名前は開発中のものです。 [2009/03/12(木) 07:22:55 ID:7byKm2pB] 誰もそんな話してないし
737 名前:名前は開発中のものです。 mailto:sage [2009/03/12(木) 11:49:54 ID:Rx7RnDpA] しろよ
738 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/12(木) 23:06:36 ID:SEPBaONy] >>729-730 >なんで突然、並列化の話が出てくるの? それは『ボクのタスクシステムはどっちかっつーと並列!』と言っていた >>632 のおじちゃんに言ってよね。CodeZineなんて初っ端で並列処理と言い切ってる。 あと生協で逆引きゲームプログラミングとかいう本をパラパラーっと立ち読みしたら 『並列動作システム』とか書いてあったし。『並列処理動作』してるんだって。ゲラゲラゲラー もうさ、ハッタリかましすぎだよね。説明してる内容と、それを一言で表現するときに どこかから引っ張ってきた用語が全く一致してないんだよね。厨房を騙くらかそうと必死でしょ 今さっき覚えてきた単語をとりあえずあててみました。みたいな。ちょっとね、おかしいとおもう その点Logician Lord、White Paper、けんもほろろのページは並列なんて一言も言ってない 上に比べたらまだマシな部類なのかなーと思える。タスクシステム解説つっても千差万別だね
739 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/12(木) 23:11:52 ID:SEPBaONy] ただ、まともっつってもなんか変なんだよね。組み込みシステムか何かから引っ張ってきた 知識を広めた人がいたんだろう、というのは厨の俺でもなんとなくわかる。それがギョーカイ とかいうよく分かんない謎の秘密結社みたいな世界で伝播する過程でおかしなことになって ミュータントみたいになっちゃってるんじゃない?この人たちが言ってるTCBとかタスクとか ちょっと変わってるよね TCBって、ゲーム機よりショボい組み込み機器でもプログラムカウンタとかスタック アドレスが入ってる。リエントラントな仕組みを提供すんだよね。だから周期タスクは periodictask() { while(1){ dosomething(); rot_rdq(); } } みたいな感じで書く。タスクは並行動作できるんだ。でも>>2 の『タスク』はできない。 サブルーチンの処理を全て完了しないと処理を返せない。タスク同士は完全に 逐次処理なんだ。擬似並列動作ができない
740 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/12(木) 23:24:44 ID:SEPBaONy] でも>>2 の言うタスクってのは、ジョブを時間領域で分割したものだから タスクの作り方によっては、複数のジョブ同士の並行動作はできるかもね >タスクシステムの目的は並行動作だよね。 >>2 の話?んなこと俺が知るかっつーカンジ 俺は>>632 のどっちかっつーと並列とかいう謎のタスクシステムが 並行動作してるのかなーとESPしてみただけだしー。推測でしかないしー >>2 はふたを開けてみればゲームオブジェクトのUpdateメソッドのディスパッチャー 単なるレディキューだからどうとでも使えるわけだしー このメソッドの分け方次第で並行動作もできるんだろうね。でも ゲームオブジェクト一個につきタスク一個とか言ってるページもあるから ちょっと怪しいね。Update()一個じゃあ、>>725 で書いた矛盾にぶつかると思う
741 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/12(木) 23:39:16 ID:SEPBaONy] >385 名前:名前は開発中のものです。 投稿日:2009/02/10(火) 01:05:40 D1ATM4io >>384 >厳密にやるならワークをそれぞれ2つ持って、フレームごとにフリップだろ。 >面倒だったら一つ一つ更新して、n+1がnを参照してもn+1を参照しても対して問題が無い様にするさ。 >どこまで誤差を容認できるか知らんけど。 なんか臭いなぁ、と思ってたのがここ。CodeZineはこの誤差を容認するほうを選んでるよね。 具体的にはEnemyとMyShotの関係。これタスクリストとかいうものの中でごちゃ混ぜになってるでしょ 当たり判定のときに、自機弾って移動速度速いからさ、敵と当たったり当たらなかったりすると思うよ ぜったい気持ち悪い現象が起きる理不尽ゲーになると思う
742 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/12(木) 23:53:29 ID:SEPBaONy] >>741 × 当たり判定のときに、自機弾って移動速度速いからさ ○ 自機弾って移動速度速いからさ この不快な現象を発生させたくないなら EnemyとMyShotの実行順序をごちゃ混ぜにしちゃ駄目でしょ ごちゃ混ぜのままならせめて当たり判定タスクと移動タスクを分けないと あとさ、必要は無いけど、外部参照されるパラメータは前フレームの状態を 保持したほうがいいよ 例えばロックオンして置き撃ちするときに、targetposition(t)を得るか targetposition(t+Δt)を得るかがpriorityとかいうものによって変わるって おかしいでしょ
743 名前:ID:EEKBitmg ◆HSP4mee/SU mailto:sage [2009/03/13(金) 00:03:15 ID:w7sHy3uX] >>742 × priorityとかいうものによって変わる ○ タスクリストの前後関係とかpriorityとかいうものによって変わる >>730 >>これって何?GCしてるの?どういうタイミングで? >え、ちょっと待って、>>2 の話をしてるんだよね? 本当に>>2 読んだ?? >ID:EEKBitmgさんの言う>>2 って、>>2 のうちのどれのこと? 俺と同い年の人が書いたと思しき記事だからボコりたくなかったけど 流れでそうなっちゃったから堰を切ったように書いてるけどさ CodeZineの記事は他と比べて相当違うんだよね メモリ割り当てなんて関係ないのにさ、糞みたいなGCかましてるし STGであんな処理をかますフレームが不定期に存在するって変でしょ 糞みたいな自前のメモリ割り当てやってるからあんなGCが必要に なるんでしょ。何のための自前アロケータなんだか分からない 厨的には、あんな糞実装は氏んじゃえって思う
744 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 00:16:52 ID:kkRWD5W+] タスクシステム擁護派じゃないけどさ・・・ 雰囲気つかむだけのサンプルにアホとか言っちゃうのはどうよ? こういうものは思想だけ頂いて自分の好きなように組んでくれって物じゃないのかね・・・ GCがどうのっていうのも処理落ちしたときにはじめて考えればいい所だし、 ただたんに自分の流儀に合わないから貶すと見えますよ。