トップページgamedev
1001コメント504KB

タスクシステム総合スレ part5

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2009/02/19(木) 02:21:01ID:k4ODtuXP
タスクシステムについての議論、相談、質問、雑談などのスレです

part4 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」と明示してください
 そうでない場合はカスタム版タスクであることを明示してください

・人を憎んで言語を憎まず
0617名前は開発中のものです。2009/03/05(木) 21:49:16ID:/7Ei5x6Q
>>616
そういうツールありますから
あなたの方がnoobですよ
0618ID:EEKBitmg2009/03/05(木) 21:51:32ID:CwokJJKn
あー、わかったぞ
並列君は銃弾も人も同じエンティティとして平等に扱うのか
マジで狂ってるな。どんだけ無駄なことすりゃ気が済むんだよ
0619名前は開発中のものです。2009/03/05(木) 21:54:16ID:eQbdbaUx
>>618
だから効率を求めてるんじゃなくて、並列でどうやって対処するか議論してるんだってば
0620ID:EEKBitmg2009/03/05(木) 21:57:28ID:CwokJJKn
>>619
は?誰だよお前。名無しに用はねーんだよ
効率を度外視した糞システムなんてみんな糞だ
お前らタスクバカはそうやって何でもツクールを目指すバカだから
並列処理も効率度外視とかウンコくさい話をしたがるんだろ

バカは氏ね。思想レベルで詰んでる
0621名前は開発中のものです。2009/03/05(木) 22:03:48ID:okJUxEhs
≡≡≡≡≡≡.   
日 ▽ U 日    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
≡≡≡≡≡≡   | IDさん今日は荒れてるなあ。
V ∩ []    。〇 \____________
____ ∧∧゚______
     □ (    )
―――― |   ヽ――――――
      (____)〜
━┳━   ━┳━   ━┳━
 ̄┻  ̄ ̄ ̄┻ ̄ ̄ ̄ ┻ ̄ ̄
0622ID:EEKBitmg2009/03/05(木) 22:07:27ID:CwokJJKn
>>2が時代錯誤的な直列処理してっからブッ叩かれ、それを気にして
カッとなって、今度は極度に逆方向にふれて究極の並列コードを
目指すし始めた一部の先進次世代タスクバカ。>>510が代表だな

お前らタスクバカはさ、いい加減『ナニを作るのか』具体的に書けよ
何でもツクール目指すから『ナニを作るのか』書けません、だとか
ミラクルドリーマーみたいな事をほざくなよ
0623ID:EEKBitmg2009/03/05(木) 22:19:07ID:CwokJJKn
>>621
俺、一応未成年だからお酒でそういう大人っぽいお店にいって
酩酊してウサ晴らすとかそういうことできないんだよね

これは芸風だから。昨日の並列君のお前らみんなバカ宣言
に対する報復である
0624ID:EEKBitmg2009/03/05(木) 22:20:46ID:CwokJJKn
×お酒でそういう大人っぽいお店にいって酩酊して
○そういう大人っぽいお店にいってお酒で酩酊して
06255612009/03/06(金) 00:00:33ID:4YMxwutE
惚れた
0626名前は開発中のものです。2009/03/06(金) 07:47:43ID:+3ldVLU9
>>622
そんなの無理だろ
タスク信者は動いてるプログラムにタスクウィルスを入れて
自分しかメンテできないようにして、自分の居場所を確保する
犬の小便的行動が本来の目的なんだから
0627ID:EEKBitmg2009/03/06(金) 10:06:54ID:xP4A6jxv
いやー、昨日も面白い池沼がいて楽しかったわ
これだからこのスレはやめられないw
0628名前は開発中のものです。2009/03/06(金) 13:01:17ID:FjTUznzx
銃弾の事は外野の俺がネタで言ってみただけだお…><
0629名前は開発中のものです。2009/03/06(金) 14:33:08ID:YCUPWfAP
>>625
>427

>>626
そのくらいで地位を守れるなら失うよりはずっとマシだと真剣に思う、この不況。無職を叩く側から叩かれる側になるなんてやだもん。
0630名前は開発中のものです。2009/03/06(金) 18:02:43ID:+3ldVLU9
ついにタスク信者自身が自分がクソを入れてることを認めたか
0631並列さん ◆dPfetnROQg 2009/03/06(金) 18:18:57ID:oTJ018DT
なんじゃそりゃ
0632名前は開発中のものです。2009/03/06(金) 19:15:57ID:oLiuTYVi
>>622
タスクシステムが直列処理だとは思わんが。
どっちかっていうと、並列かと。
0633ID:EEKBitmg ◆HSP4mee/SU 2009/03/06(金) 23:46:34ID:aRzhzssB
>>627
ちょっとー。何なのおまえ誰なのおまえそこへ直れよおまえ!このイジメっ子ザザ虫!
平日の朝っぱら10時から暇そうに2ちゃんで厨のIDコテ使って何ふんぞり返ってるの?
イイ歳した大人が虎の威ならぬ厨の威を借りて一段高くなれるの?低くならないの?恥ずかしくない?

お前、今まで俺のことをHSPしか使えない基地外とか繰り返し叫んでたウンコ君でしょ?
気になるあの子が振り向いてくれないからって、あの子の目の前であの子の名札つきの
体操服を着てあの子のピアニカをチュアパチュパしゃぶりながらあの子のリコーダーに
ポークビッツを差し込んで教室で待ち構えて本人登場したらポークビッツが健気に膨張
圧迫されて抜けなくなって保健室に運ばれちゃう変態、超ド変態の子供時代を繰り返すの?

タスクバカのことをバカバカエンガチョって指差してきたけど流石にトリップ無しIDコテ厨を
騙るほど堕ちちゃいないだろうと信用してたのに買いかぶりだったみたい。もう大嫌い

0634並列さん ◆dPfetnROQg 2009/03/06(金) 23:55:00ID:oTJ018DT
>>633

>627は偽物だったのか・・。まあ、もとより俺には、本物が誰なのかよくわからないのだが。

>633を見る限り、なんか内容は支離滅裂だが、それでもあんたの日本語は他の奴よりは
断然読みやすいのでまだ許せる。

日本語の不自由な奴は、ゲームなんか作ってる場合じゃなくて、
もっと先に勉強すべきことがあるだろ、とか思うんだけどな。
0635ID:EEKBitmg ◆HSP4mee/SU 2009/03/06(金) 23:56:33ID:aRzhzssB
>>632
正確には並行処理じゃないの?
0636ID:EEKBitmg ◆HSP4mee/SU 2009/03/06(金) 23:59:28ID:aRzhzssB
寮に帰って2ちゃん見てワナワナプルプルしながら顔真っ赤に怒ってるから
支離滅裂なんだ!ちなみに昨日の書き込みには大変な矛盾があるので
訂正したかったが、>>627は俺らしいから彼にやらせてみようと思う
0637名前は開発中のものです。2009/03/07(土) 00:46:01ID:ZZNOCL1s
>>635
優先順位がつくばあいもあるから正確には並列とは言えないだろうな。
0638並列さん ◆dPfetnROQg 2009/03/07(土) 00:55:26ID:cewi3IDn
>>637
その理屈はおかしい。
マルチスレッドのプログラミングでもセマフォで他のスレッド待ったり普通にするじゃん。

処理に順序があろうが無かろうが、並列なものは並列だ。

>>635が並行と言ってるのは、タスクを実行しているスレッド(プロセス)が通例、
1つだけだという理由からだろう。
0639名前は開発中のものです。2009/03/07(土) 01:06:43ID:ZZNOCL1s
>処理に順序があろうが無かろうが、並列なものは並列だ。

並列さんの言ってることは意味が分からん。
処理に順序があれば、同時に実行できないのだから、並列でないだろ。
マルチスレッド≠並列。

煽り専門と名のってたが、嘘ばかりを書き込んでスレの機能を麻痺させる気?
名前変えたら?
0640並列さん ◆dPfetnROQg 2009/03/07(土) 01:17:59ID:cewi3IDn
>>639
> マルチスレッド≠並列

言葉の定義の問題だから、まあどうでもいいが、まあ普通は
マルチスレッドで実行されている以上、並列だし、あるスレッドが他のスレッドを
待っていてスループットが悪かろうが、並列なものは並列。

処理順序が厳密に定められていて、まったく逐次実行しか出来ないなら、
シングルスレッドと同じか、それ以下のパフォーマンスしか出ないけどな。

実際はゲームのタスクはそこまで処理順序に関しては制約が厳しくないので
いくらでも並列化できる。
0641名前は開発中のものです。2009/03/07(土) 01:37:59ID:ZZNOCL1s
>マルチスレッドで実行されている以上、並列だし、
並列ではない。並列な部分もあるってだけ。
今は、「正確には並行処理じゃないの?」と問われていたわけで、
純粋に並列でないなら、正確には並列とは言えない。

だいたい、マルチスレッド云々は実装レベルでの話しだし。
タスクシステムがアーキテクチャ的に並列処理かどうかとは関係ない。
0642名前は開発中のものです。2009/03/07(土) 01:42:09ID:ZZNOCL1s
コーヒー牛乳は牛乳か→YES
コーヒー牛乳は正確には牛乳か→NO

タスクシステムは並列的か?→YES
タスクシステムは正確には並列か?→NO
0643並列さん ◆dPfetnROQg 2009/03/07(土) 01:58:35ID:cewi3IDn
>>641
> 今は、「正確には並行処理じゃないの?」と問われていたわけで、
> 純粋に並列でないなら、正確には並列とは言えない。

この文章、意味不明だ。この文章、俺の解釈では↓こうだ。

 今は、「正確には並行処理じゃないの?」と問われている。

 スループットが1以下の並列実行なんて並列実行には含まれないので
 「正確には並列」とは言えないので、単なる「並行処理」と見なすべきだから、
 この「正確には並行処理じゃないの?」は正しい。

もし、そういう意味で書いているなら、俺は別に反対意見は唱えていない。

しかしそれなら>>637の書き方が悪い。
「優先順位がつくばあいもあるから正確には並列とは言えない」
だと、「優先順位がときどき偶発的について、そのときに限り並列性が落ちるから
並列とは言えない」と読める。だから俺は>>638のように反論した。
>>637は、正しくは
「優先順位がつく場合、並列化が難しく、並列度が極端に低下して、単一スレッドで実行
しているのと変わらないから、並列と呼ぶべきではない」と言うべきだっただろう。

しかし、俺はそうは思わない。
処理に優先順位がついていようが並列度を上げることは十分可能だからだ。
0644名前は開発中のものです。2009/03/07(土) 02:03:29ID:LbywpZ2h
コーヒー牛乳は牛乳か→NO
0645名前は開発中のものです。2009/03/07(土) 02:08:20ID:cMprZFoi
>>643
見苦しいです
0646並列さん ◆dPfetnROQg 2009/03/07(土) 02:10:52ID:cewi3IDn
>>645
見苦しいか?ふむ。

それなら、日本語の不自由そうな奴に絡むのはもうやめるわ。疲れるだけだ。
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
>>647
> タスクシステムは正確には並列か?という命題に対して、

だが、あんたは、>>635を誤解している。

635は
> 正確には並行処理じゃないの?
と書いてあって、並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。

635を書いた本人は、「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので
「並行処理と呼ぶほうが正しいのではないか」と言ってるわけ。

それなのにそれに対する受け答えとして、あんたは、>637で「スループットがN倍になっていなければ
pureな並列とは呼べないので並行ではない」と言っている。あんたが「並列度1.0(そんなもの現実的に
存在しないんだが)ではない並列」を「並列」とみなさないのはあんたの勝手だが、635に対する返答として
637は、おかしい。
0650並列さん ◆dPfetnROQg 2009/03/07(土) 02:52:08ID:cewi3IDn
>>648
> 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/3vapK
なんか良く分からんが、お前らの並列と並行の定義はこれで合ってるの?
http://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
http://journal.mycom.co.jp/articles/2006/05/15/bsd3/
俺はこっちかな。
0655名前は開発中のものです。2009/03/07(土) 10:43:57ID:8u/3vapK
>>652 >>654
同じだとおもうけどw

>順序がある処理は並行ではない。
いや、順序があっても並行は並行だろう。

ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、
仰々しく「並行」だの「並列」だの言うな、と主張しているように見えるなあ。
ID:ZZNOCL1sは実践的な話をしていて、
並列さんは字面通りの一般的な並列の定義に沿って話しているだけに見える。

というのは深夜の時点で並列さんも悟っているように見える。
0656名前は開発中のものです。2009/03/07(土) 10:53:23ID:ZZNOCL1s
>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
>「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので

並行化によって待ち時間が減ったりするので、スループットは向上するが、
1倍の基準点が不明。
0657並列さん ◆dPfetnROQg 2009/03/07(土) 10:57:38ID:cewi3IDn
>>653
> というか、むしろ今まで並行の意で並列と言っていたのだが。

あんたは、全然話にもならない。

専門用語を勝手に本来と違う意味で使っておいて
相手に日本語が読めないだの何だの言うのは本当、勘弁して欲しい。
0658名前は開発中のものです。2009/03/07(土) 11:06:08ID:ZZNOCL1s
>いや、順序があっても並行は並行だろう。
順序がある処理は並行化できないよ。
例えば、処理Aと処理Bがあって、
BはAの後でないと実行不可だとする。
この場合、AとBを並行に処理することは出来ない。
0659名前は開発中のものです。2009/03/07(土) 11:06:20ID:cMprZFoi
>>655
> ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、
そんな話じゃないでしょうに…

あと
>並列さん
>悟っている
なんか気持ち悪いです
0660並列さん ◆dPfetnROQg 2009/03/07(土) 11:13:36ID:cewi3IDn
>>658
> 順序がある処理は並行化できないよ。

それぞれのタスクを逐次処理しようが、それは並行処理って言うんだが。
ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。

本当、専門用語を勝手に意味を作り替えんなと言いたい。

>>659
気持ち悪いのはお前。お前はいらない子だから死んでくれ。
0661名前は開発中のものです。2009/03/07(土) 11:17:08ID:ZZNOCL1s
>>657
お前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。

>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
↑何に対する1倍かはしらないがな。
0662並列さん ◆dPfetnROQg 2009/03/07(土) 11:25:40ID:cewi3IDn
>>661
>>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
>↑何に対する1倍かはしらないがな。

そこが読めてないのお前だけだろう。

「concurrentな処理は、Nコアであっても、単一コアで実行したときの1倍以上のスループットが出ない」の意味。
0663並列さん ◆dPfetnROQg 2009/03/07(土) 11:31:14ID:cewi3IDn
>>661
> お前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。

どこをどうやればそう読めるのか俺は知りたい。

並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が
単一か複数かの差のみ。そんなことは誰でもわかっている。

その用語を勝手に違う意味に使ってたのはあんただろ。
俺には、頭がおかしいとしか思えない。

その頭のおかしいあんたを唯一擁護しているのは ID:cMprZFoi だけ。

こいつは、あんたが書き込みした直後にしか出てこない。どうせこれもあんただろ。
0664名前は開発中のものです。2009/03/07(土) 11:36:14ID:92TsYx3X
カプコンのMTフレームワークみたいなマルチコアでのパフォーマンスに特化した設計の
フレームワークなら並列云々の話になると思うが…

あれもタスク進化系の一種なのか?ちょっとタスクって守備範囲広すぎ。

あれはコア数がパフォーマンスに直結する造りだね。
順序の依存性のある処理と無い処理をグループ分けして、並列で問題ないケースは複数コアで同時計算。
順序の依存性がある処理との同期スケジューリングをフレームワークが管理って感じで。

ゲーム中には依存性のある処理と無い処理があるから、まぁ複数コアを有効に使おうと思うと
こんな感じな設計に行き着くんだろうね。
0665並列さん ◆dPfetnROQg 2009/03/07(土) 11:40:55ID:cewi3IDn
ID:EEKBitmg ◆HSP4mee/SUはまだ良かった。

HSP使いのプログラミング経験の浅い世間知らずのクルクルパーだが、
そのわりには用語の使い方はまともだし、勉強もよくしていると思っていた。

俺は専門用語を勝手に俺解釈の用語とすり替えて話す奴とは
面倒くさいので話をしたくない。

このスレはどうせみんな常駐してるようなもんなんだから、みんなコテハン
にすればいい。それそれぞれが嫌な奴をNGリストに入れておけばいいと思うんだがな。

そんなわけで ID:ZZNOCL1sは俺をNGリストに入れておいてくれ。
お前と話をするのは疲れる。
0666名前は開発中のものです。2009/03/07(土) 11:49:53ID:ZZNOCL1s
>それぞれのタスクを逐次処理しようが、それは並行処理って言うんだが。
いや、単純に考えて、処理に依存関係があると、並行処理できないだろ。
実際OSなんかは各スレッド間に依存関係が無いものと見なして並行処理しているわけで。
0667名前は開発中のものです。2009/03/07(土) 11:52:30ID:8u/3vapK
>>658
それが実質直列だってことは分かるんだけど。

とりあえず、俺が何を考えているのかと言うと、
動き方が実質直列であっても、それぞれ別のスタック領域を持ってる点が違うだろ?
別々のコンテキストを持っている。
その辺を区別するのに「実行効率ゼロの並行」も俺は並行と呼んでただの直列と区別していた。

要するに俺はコアが何個でそのPCがどこ指してるのって部分だけで並行か並列かって言ってた。

んで、一般的定義はどうなのと思ってググった先を見てみると、
コンテキストがどうのというのは論点じゃ無いような気がしてきた。

もうちょい調べてみるわ。
0668並列さん ◆dPfetnROQg 2009/03/07(土) 12:05:02ID:cewi3IDn
>>666
> いや、単純に考えて、処理に依存関係があると、並行処理できないだろ。

あんたの「並行処理」について持ってる勝手なイメージは知らんが、
優先順位がついていてそれぞれのタスクを逐次的に処理していく場合も
(そのタスクが終了後に消滅しないなら)「並行処理」と呼ぶ。

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
>ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。
どこにそんな定義があるんだ?
0670並列さん ◆dPfetnROQg 2009/03/07(土) 12:10:23ID:cewi3IDn
>>667
何を言いたいのかよくわからないが、>>668の説明は理解できる?
0671並列さん ◆dPfetnROQg 2009/03/07(土) 12:11:16ID:cewi3IDn
>>669
>>668
0672名前は開発中のものです。2009/03/07(土) 12:26:24ID:ZZNOCL1s
並行計算
http://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
>>668
>計算プロセス間の依存性とか、効率とかそんなことは並行処理の定義とは
>何ら関係がない。

だから、並行処理では処理の依存性は考えない=依存性は扱わない=依存性は扱えない。
扱わないのは扱えないから扱わないの。
実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。
各スレッドを並行と見なして実行する。
処理に依存性がある場合はプログラマが自前で同期オブジェクトとかつかってシコシコやる。

一方、タスクシステムでは処理の依存を優先順位という形で明示的に扱うのが一般的。
各タスクを並行とみなしているわけではない。
0674名前は開発中のものです。2009/03/07(土) 12:44:25ID:92TsYx3X
いつのまにか
並行・並列処理の単語の定義のスレになってるな。

自然言語の単語の定義なんてどこまでいっても曖昧なのに…
自分の言う「臭い」と他人の言う「臭い」が同じという保障なんて誰にも出来んよ

確かなのは人工言語で書かれたソースのみ。
0675並列さん ◆dPfetnROQg 2009/03/07(土) 12:44:25ID:cewi3IDn
>>672
ざっと見たけど日本語のwikipediaのほうは、ひどいな。

これとか
> 並行性のための構造を備えた最も一般的な言語はJavaとC#である。
なんでだよと突っ込みを入れたくなる。

これ書いてる奴は、thread生成が出来るからJavaとC#を入れてるんだろうけどひどいにもほどがある。
C#のyieldによるcontinuationは確かに並行スレッドなんだが、それならJavaを含めるのはおかしい。

日本語のwikipediaの「並行性」の項目もひどいな。なんだよこれ。

ちょっとwikipedia行って暴れてくるわ。
0676並列さん ◆dPfetnROQg 2009/03/07(土) 12:47:15ID:cewi3IDn
>>674
> 自然言語の単語の定義なんてどこまでいっても曖昧なのに…

専門用語は、限りなくstrictに定義されてるべき。

そうじゃなきゃ論文とか意味のないものになってしまう。
0677名前は開発中のものです。2009/03/07(土) 12:50:58ID: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.

が続いている。
自分の都合の良いところだけを掻い摘んで引用する根性の悪さ。

結局、

>並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が
>単一か複数かの差のみ。そんなことは誰でもわかっている。

は間違い。
0678並列さん ◆dPfetnROQg 2009/03/07(土) 12:52:11ID:cewi3IDn
>>673
> 実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。

それはダウト。

実際のOSにはプロセスのpriorityがあって、それに従ってスケジューリングされる。
割り込みなんか特にそう。あるプロセスの実行が他プロセスの実行より優先されることは多々ある。

キーボードイベントが発生したら、その処理が優先される。そこには明確な実行順序がある。

そんな機能すらない、もっとprimitiveなOSの話をしているなら、まあそれはそれでいいけど
「実際のOS」と書かれるとWindowsやらLinuxやらを想定しているのかと俺は思ってしまう。
0679名前は開発中のものです。2009/03/07(土) 13:02:13ID:ZZNOCL1s
>>675
お前がひどいという日本語版の、
「並行性のための構造を備えた最も一般的な言語は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
>>678
プロセスのプライオリティーは必ずしも守られるわけではない。
あれは、CPUリソースに対する優先順位であって、処理に対する依存関係を表すものではない。
現にマルチプロセス環境だと、プライオリティーの高いものと低いものが同時に実行される。
0681並列さん ◆dPfetnROQg 2009/03/07(土) 13:05:45ID:cewi3IDn
>>677
それなぁ、「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
並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。
んじゃないの?

独立した概念(関連はあるけど)なんだから、>>660
>ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。
はおかしいと思う。
concurrentに作っておけば、parallelに実行しやすいんだし。
0683並列さん ◆dPfetnROQg 2009/03/07(土) 13:17:17ID:cewi3IDn
>>680
うむ、それは正しい。

>>682
ああ、そうか。そういう意味では、660はおかしいし、書き方が悪いな。
これについては反省。すまんかった。> ID:ZZNOCL1s
0684名前は開発中のものです。2009/03/07(土) 13:19:11ID:ZZNOCL1s
用語の定義をめぐって、wikipediaと格闘するような人とは議論したくない。
0685名前は開発中のものです。2009/03/07(土) 13:20:00ID:ZZNOCL1s
お互い疲れたと見える
0686並列さん ◆dPfetnROQg 2009/03/07(土) 13:24:11ID:cewi3IDn
>>682
> 並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
> 並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。

この定義に基づいて古典的なタスクシステムのタスクについて語ると

・古典的なタスクシステムのタスクは、「並行」。
・実行順序に厳しい制約があるとみなすなら、「並列」化はできない。

ところが実際のゲームでは、タスク間に依存関係がない部分が結構あるので
部分的に「並列」化できる。

この「並列」化によって、コア数N×0.7ぐらいのパフォーマンスは出る。

で、この「並列」化を古典的タスクシステムを進化(?)させて書けるようにすれば
いいということだな。
0687並列さん ◆dPfetnROQg 2009/03/07(土) 13:24:58ID:cewi3IDn
>>684
俺のことは、NGリストに入れておいてくれ。

最初に682のように書いてもらえれば、俺はすぐに理解できたのだが。
0688名前は開発中のものです。2009/03/07(土) 14:32:04ID:NOayWFQU
これにて一件落着
0689名前は開発中のものです。2009/03/07(土) 14:39:01ID:ZZNOCL1s
おれは、>>682と同じ意見ではない。

>並行(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
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。

俺もこう思ってた。
んでそうハッキリ書いてある資料を探してるんだけど、見つからない。

>並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、必要

次からこっちの定義で話すわ。
0691名前は開発中のものです。2009/03/07(土) 15:37:28ID:92TsYx3X
>>689
>さらに、タクスの処理順位を考慮するようなタスクシステムは「並行でない」と考える。
MTフレームワークは処理順の依存の有無でタスク分けてマルチコアで同時に複数タスク動かしてるけど
これは処理順位を考慮するシステムだから「並行でない」のかな?
0692名前は開発中のものです。2009/03/07(土) 15:42:35ID:ZZNOCL1s
だいたいちょっと考えれば分かることだが、並行の定義が、
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
だと、いわゆるオブジェクトと呼ばれるものは全部並行ってことになっちまうだろ。
コンテキストが同時に存在できないオブジェクトなんて、まあ無いからな。
言葉としての意味が無くなる。
0693名前は開発中のものです。2009/03/07(土) 15:56:08ID:ZZNOCL1s
>>691
もしはじめから並行なら、MTフレームワーク自体いらないでしょ。
0694名前は開発中のものです。2009/03/07(土) 16:00:29ID:92TsYx3X
>>693
>もしはじめから並行なら
どこにそんな前提が?
0695名前は開発中のものです。2009/03/07(土) 16:36:27ID:E0xOAlNR
>>689
>これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの?
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
と同じ事を言ってるだけのような。

>1.並行でなければ並列化できない。
は違うと思う。
並行でない命令列も、依存関係が無ければ並列化できる。
現にCPUの中でシリアルセマンティクスを満たしつつ並列実行が普通におこなわれている。
そういう命令列は本質的に並行だった?違うでしょ?スーパースカラで並列に実行される命令は、
異なるコンテクストを持ってるわけじゃないんだから。


あと細かいことだけど、順位と順序は全然意味違うんだから、
ちゃんと使い分けてくれないと読み辛いよ。
0696名前は開発中のものです。2009/03/07(土) 18:22:05ID:UcXZ5wF9
でも依存関係があるかないかなんて並列で実行してんのにどうやってわかんだろね
くる値によって依存関係があるかもわからんしないかもわからん
ごった煮だとそういうソースになってしまうな
0697名前は開発中のものです。2009/03/07(土) 18:30:21ID:rbzzI5lu
ID:UcXZ5wF9
↑(・∀・)↑
ウンコちゃんインしたお
0698名前は開発中のものです。2009/03/08(日) 18:34:25ID:ryll+mdy
>>695
> >これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
> ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの?
> >並行(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
>>694
ヒント:背理法
07006982009/03/08(日) 19:26:02ID:ryll+mdy
訂正するけど、
コンテクストが共有されていても、read-onlyな場合は並列化可能だね。
書き込みするとアウトだけど。
0701名前は開発中のものです。2009/03/08(日) 19:27:58ID:0j+yjPij
>>698
なんか色々と変だよ。


>例えば、コンテクストが共有されている場合などでは、
>コンテクストは同時に存在できるが、同時に実行はできない。
共有されているのに同時に存在するってどういう意味?
コンテクストはいくつあるの?

>具体的には、オブジェクトAが(以下この段落略)
オブジェクトとコンテクストがごっちゃになってる。
オブジェクトAがオブジェクトBへの参照を内部に保持していても、
コンテクストがいくつあるのかという問題とは関係無いよ。
オブジェクトAとBを同時に実行はできない?オブジェクトを実行するってどういう意味?

この辺は、>>692の勘違いと同じ匂いがする。
てか>>692さんなのかな。
0702名前は開発中のものです。2009/03/08(日) 19:30:14ID:0j+yjPij
んが。改行多過ぎ言われた。
701の続き。


>並行でない命令列の中でも、依存関係が無い並行な部分だけは並列化できる。
「依存関係が無い部分」を「並行な部分」とは呼ばないよ。
いや呼ぶのは自由だけど、少なくとも聞いたことないよ。
いや聞いたことないだけかもしれないけど。

>並列化とは、並行に処理すること(以下略)
×。

もうちょっと詳しく言うと・・・
 「並列化とは、並行に処理すること」
という言葉それだけを見るなら、○。
でも、そこに出てくる「並行」という言葉は、並列という言葉を説明するための
「(同時)並行」という意味であって、このスレでここまで長々と議論してきた
並行(concurrent)とは意味が違うよ。
(「並列」を説明するのに「並列」と言っても仕方が無いからね)

二つ挙げてくれたwikipediaの説明に出てくる「並行」も、同じように「並列」を
説明するための「並行」であって、ここに引っ張り出してきても意味が無いよ。
0703名前は開発中のものです。2009/03/09(月) 12:41:05ID:2btSBxrR
大変だ!タスク信者が息してないぞ!
0704名前は開発中のものです。2009/03/09(月) 13:31:41ID:+h98nuCN
つまらん煽りイラネ
0705名前は開発中のものです。2009/03/09(月) 14:16:42ID:EugqMYhT
本人は面白いと思って書いてんだろ
0706ID:EEKBitmg ◆HSP4mee/SU 2009/03/10(火) 01:19:32ID:W7jNDZ1N
厨は『並行処理』という言葉を使ったけど、ノートを読み返したら『並行動作』となっていた。
=『擬似並列動作』のことを云いたかったの!微妙に書き間違えてた?と書こうと思ったら
>>637-以降で怖いおじちゃん達が深夜の泥沼バトルが展開されてあれよあれよと言う間に
みんな深淵の彼方へ飛んでいってしまった。ニーチェの警告に耳を傾けない者はみんな
闇に飲まれちゃうんだ。恐ろしいことだ
0707ID:EEKBitmg ◆HSP4mee/SU 2009/03/10(火) 01:20:59ID:W7jNDZ1N
俺は元々>>2の話をしてて、これはどこをどうひっくり返しても逐次処理・直列処理してる。
ところが>>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
>>708
×逐次処理・直列処理で並列動作してる。だが並列動作じゃない
○逐次処理・直列処理で並行動作してる。だが並列動作じゃない
0710ID:EEKBitmg ◆HSP4mee/SU 2009/03/10(火) 02:18:01ID:W7jNDZ1N
>>2のシステム(笑)はなんで並列動作できないの?

一本の連結リストにみんなチャンポンにしてぶち込んでる時点で
別スレッドで同時並行的に弄繰り回されるということを考えてないだろ
タスク間通信に必要な同期のメカニズムを提供していないのもそう
シングルスレッドで逐次処理するという前提だからバッサリ省いてる

次に、>>2のTCB(笑)とかいう構造体のプライオリティというパラメータは
priority-rankingではなくpriority-sequenceとして使われており、異様。
これは処理順序を表しており、この順序でソートして順次処理される
そういう前提でタスク(ジョブ)の内容を記述してる。順序が狂ったら動かない
0711名前は開発中のものです。2009/03/10(火) 12:53:53ID:GPL7IZe+
>>707

>ユーザー定義の並行動作に使うこともできるっちゃできる
できるっちゃできる、じゃなくて、ゲームオブジェクトの並行動作を記述することが
そもそもタスクシステムの目的なんじゃないの?
オブジェクトごとのデータとコンテクストをひとまとめにして自律的な行動を
自然(←人によって感じ方は違うだろうけど)な形で書ける(気分になれるw)ことと、
オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること、
の2点を、素朴な形で実装したのがタスクシステムの良い点だったと思うんだけど。


>>710

>>2のシステム(笑)はなんで並列動作できないの?
特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、
それらを並列動作させることはできるんじゃないの?
(そういう番号をプライオリティと呼ぶことの是非は別として)
別に誰も、全てのタスクを並列動作させることなんか最初から期待してないと思うけど。

かなり上の方に出てた自動的に並列動作させる云々の話も、そういうプライオリティの
タスクに限って、プロセッサ数に合わせて並列でディスパッチするような拡張も考えられる
のではないか、という話だったと理解してたんだけど。
0712名前は開発中のものです。2009/03/10(火) 14:14:14ID:arIRXx6m
http://pc.watch.impress.co.jp/docs/2009/0305/kaigai493.htm
> ゲームプログラム本体のコードは、OSのコードと同じように、
> 整数演算中心で小さな範囲での並列しかできず、
> 基本的には逐次実行しなければならないコードがほとんどだ。

これが古臭いタスクのことを指しているとは考えられないし
並列ネタはタスク関係無くね?
0713名前は開発中のものです。2009/03/10(火) 17:38:59ID:DtkxsGym
マルチプロセッサでマルチスレッドしたいならそう拡張すればいいんとちゃう?
シングルプロセッサが前提の時代に書かれた物に難癖つけるのも大人げないと思う
ていうか俺は現在でもマルチスレッドなんてやりたくない
0714名前は開発中のものです。2009/03/10(火) 18:22:37ID:9N7ATqdV
別にマルチスレッドなんて必要ならやりゃいいじゃん
裏でローディングしながらゲーム動かすなんて別に難しくもなんともねーし
ただ、ゲームオブジェクトにやる意味は無さそうだけどね
0715名前は開発中のものです。2009/03/10(火) 18:42:31ID:+MsrlA3X
そういやフルにディスクアクセスしてても重たくなったりカクついたりしないのかね?
0716名前は開発中のものです。2009/03/10(火) 19:16:57ID:9N7ATqdV
>>715
やってみりゃいいじゃん
■ このスレッドは過去ログ倉庫に格納されています