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

・人を憎んで言語を憎まず
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
やってみりゃいいじゃん
0717名前は開発中のものです。2009/03/10(火) 19:47:23ID:+MsrlA3X
>>716
やってみた

ガックガクになった
0718名前は開発中のものです。2009/03/10(火) 20:01:50ID:9N7ATqdV
そうか市販のゲームは普通にできてるのに不思議だな
0719名前は開発中のものです。2009/03/10(火) 21:27:13ID:LXtgug0h
裏でローディングなんてDMA時代からとっくにやってます。
0720名前は開発中のものです。2009/03/10(火) 22:07:24ID:OHC3eltB
>715
普通非同期アクセスするだろ。
JK
0721名前は開発中のものです。2009/03/10(火) 22:48:52ID:GPL7IZe+
>>711
>特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、
は、オブジェクト群じゃなくてタスク群と書くべきだったね。
なんか混ざっちゃった。


>>715
自分も昔から気になってた。
ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、
消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。
それともDMAとかで消費されるバンド幅は、割と安定して予測できるもんなんだろうか。
その辺を実際にいじった経験が無いし、Web上でも情報を見た覚えが無いから分からないんだ・・・。
0722名前は開発中のものです。2009/03/10(火) 23:19:25ID:DFTfic3i
>>721
> ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、
> 消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。
もちろん、なる。

だから RPG のように「どうしても間に合わなかったらフレーム描画をスキップしてもおk」な
ゲームでは使うが、対戦格闘とかだと避ける。
0723名前は開発中のものです。2009/03/10(火) 23:58:04ID:OHC3eltB
フルにディスクアクセス行ったところで、光学ドライブからの転送量なんてたかが知れてるからな。
0724ID:EEKBitmg ◆HSP4mee/SU 2009/03/11(水) 00:28:43ID: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の『システム』部分がやってくれること
0725ID:EEKBitmg ◆HSP4mee/SU 2009/03/11(水) 00:38:10ID:xmrBPpjK
>>724
これだけ見ると協調的に並行動作させることが「できる」仕組みと分かる
でも、>>2で紹介されるこれの使い方のお手本、つまりタスクの中身を見ると
何か怪しげなことしてる。走査回数とメモリ消費をケチるためにプライオリティ
というものを使ってる。以前に出てた話だけど、something(t+Δt)を求めるために
参照する外部情報が狂ってる。上図の横方向の前後関係に依存させてしまってる
本来なら並行であるはずの関係を直列の関係にしてるというか、なんていうの?

並列化してリプレイ情報を食わせたら結果が変わってしまうでしょ
並行動作というかフェイク並行動作してるんだよね
0726ID:EEKBitmg ◆HSP4mee/SU 2009/03/11(水) 00:58:38ID:xmrBPpjK
>>711
>オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること

これって何?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:xmrBPpjK
起きた。なんか間違えた。まぁいいや。逐次処理って違うや。もういい
0729名前は開発中のものです。2009/03/11(水) 02:51:56ID:QLymkmBo
>>724
>厨はそもそものタスクシステムなんて知らないから、そもそもの目的も知らない
えっとまず始めに確認したいんだけど、「厨」ってのは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
HSPくんは厨房のくせになかなかどうして要点を押さえてるのう
若干正確さに欠ける点に目をつむって処理を端しょってたことに勘付いたか
0732名前は開発中のものです。2009/03/11(水) 07:22:34ID:nhOwJy5w
まぁ、学生さんが理想を追い求めるのは悪いことじゃない。
ただ、現実はそれに立ちはだかると言うことは知っておいた方がいい。
0733名前は開発中のものです。2009/03/11(水) 07:26:19ID:NK6nIuY5
タスクシステム完全に終わったな
0734名前は開発中のものです。2009/03/11(水) 08:32:00ID:74bG+9We
タスクシステムのプレゼン動画
ttp://www.nicovideo.jp/watch/sm2078250
0735名前は開発中のものです。2009/03/11(水) 13:15:27ID:wSuVQdvJ
ていうか細切れに順番に処理してくれるシステムなら何でもいいんじゃね?

適当にクラス作ってリストにして順番に実行
内部では各自カウンタとステート持って勝手にやる、死んだり生きたりはおかしなことにならないようにシステムでええ感じに処理してねー

とまぁ簡単なものならこんなのでいいじゃろ
複雑なのはしらん
0736名前は開発中のものです。2009/03/12(木) 07:22:55ID:7byKm2pB
誰もそんな話してないし
0737名前は開発中のものです。2009/03/12(木) 11:49:54ID:Rx7RnDpA
しろよ
0738ID:EEKBitmg ◆HSP4mee/SU 2009/03/12(木) 23:06:36ID:SEPBaONy
>>729-730
>なんで突然、並列化の話が出てくるの?

それは『ボクのタスクシステムはどっちかっつーと並列!』と言っていた
>>632のおじちゃんに言ってよね。CodeZineなんて初っ端で並列処理と言い切ってる。
あと生協で逆引きゲームプログラミングとかいう本をパラパラーっと立ち読みしたら
『並列動作システム』とか書いてあったし。『並列処理動作』してるんだって。ゲラゲラゲラー
もうさ、ハッタリかましすぎだよね。説明してる内容と、それを一言で表現するときに
どこかから引っ張ってきた用語が全く一致してないんだよね。厨房を騙くらかそうと必死でしょ
今さっき覚えてきた単語をとりあえずあててみました。みたいな。ちょっとね、おかしいとおもう

その点Logician Lord、White Paper、けんもほろろのページは並列なんて一言も言ってない
上に比べたらまだマシな部類なのかなーと思える。タスクシステム解説つっても千差万別だね
0739ID:EEKBitmg ◆HSP4mee/SU 2009/03/12(木) 23:11:52ID:SEPBaONy
ただ、まともっつってもなんか変なんだよね。組み込みシステムか何かから引っ張ってきた
知識を広めた人がいたんだろう、というのは厨の俺でもなんとなくわかる。それがギョーカイ
とかいうよく分かんない謎の秘密結社みたいな世界で伝播する過程でおかしなことになって
ミュータントみたいになっちゃってるんじゃない?この人たちが言ってるTCBとかタスクとか
ちょっと変わってるよね
TCBって、ゲーム機よりショボい組み込み機器でもプログラムカウンタとかスタック
アドレスが入ってる。リエントラントな仕組みを提供すんだよね。だから周期タスクは
periodictask()
{
 while(1){
  dosomething();
  rot_rdq();
 }
}
みたいな感じで書く。タスクは並行動作できるんだ。でも>>2の『タスク』はできない。
サブルーチンの処理を全て完了しないと処理を返せない。タスク同士は完全に
逐次処理なんだ。擬似並列動作ができない
0740ID:EEKBitmg ◆HSP4mee/SU 2009/03/12(木) 23:24:44ID:SEPBaONy
でも>>2の言うタスクってのは、ジョブを時間領域で分割したものだから
タスクの作り方によっては、複数のジョブ同士の並行動作はできるかもね

>タスクシステムの目的は並行動作だよね。

>>2の話?んなこと俺が知るかっつーカンジ
俺は>>632のどっちかっつーと並列とかいう謎のタスクシステムが
並行動作してるのかなーとESPしてみただけだしー。推測でしかないしー

>>2はふたを開けてみればゲームオブジェクトのUpdateメソッドのディスパッチャー
単なるレディキューだからどうとでも使えるわけだしー
このメソッドの分け方次第で並行動作もできるんだろうね。でも
ゲームオブジェクト一個につきタスク一個とか言ってるページもあるから
ちょっと怪しいね。Update()一個じゃあ、>>725で書いた矛盾にぶつかると思う
0741ID:EEKBitmg ◆HSP4mee/SU 2009/03/12(木) 23:39:16ID:SEPBaONy
>385 名前:名前は開発中のものです。 投稿日:2009/02/10(火) 01:05:40 D1ATM4io
>>384
>厳密にやるならワークをそれぞれ2つ持って、フレームごとにフリップだろ。
>面倒だったら一つ一つ更新して、n+1がnを参照してもn+1を参照しても対して問題が無い様にするさ。
>どこまで誤差を容認できるか知らんけど。

なんか臭いなぁ、と思ってたのがここ。CodeZineはこの誤差を容認するほうを選んでるよね。
具体的にはEnemyとMyShotの関係。これタスクリストとかいうものの中でごちゃ混ぜになってるでしょ
当たり判定のときに、自機弾って移動速度速いからさ、敵と当たったり当たらなかったりすると思うよ
ぜったい気持ち悪い現象が起きる理不尽ゲーになると思う
0742ID:EEKBitmg ◆HSP4mee/SU 2009/03/12(木) 23:53:29ID:SEPBaONy
>>741
× 当たり判定のときに、自機弾って移動速度速いからさ
○ 自機弾って移動速度速いからさ

この不快な現象を発生させたくないなら
EnemyとMyShotの実行順序をごちゃ混ぜにしちゃ駄目でしょ
ごちゃ混ぜのままならせめて当たり判定タスクと移動タスクを分けないと
あとさ、必要は無いけど、外部参照されるパラメータは前フレームの状態を
保持したほうがいいよ

例えばロックオンして置き撃ちするときに、targetposition(t)を得るか
targetposition(t+Δt)を得るかがpriorityとかいうものによって変わるって
おかしいでしょ


0743ID:EEKBitmg ◆HSP4mee/SU 2009/03/13(金) 00:03:15ID:w7sHy3uX
>>742
× priorityとかいうものによって変わる
○ タスクリストの前後関係とかpriorityとかいうものによって変わる

>>730
>>これって何?GCしてるの?どういうタイミングで?
>え、ちょっと待って、>>2の話をしてるんだよね? 本当に>>2読んだ??
>ID:EEKBitmgさんの言う>>2って、>>2のうちのどれのこと?

俺と同い年の人が書いたと思しき記事だからボコりたくなかったけど
流れでそうなっちゃったから堰を切ったように書いてるけどさ
CodeZineの記事は他と比べて相当違うんだよね
メモリ割り当てなんて関係ないのにさ、糞みたいなGCかましてるし
STGであんな処理をかますフレームが不定期に存在するって変でしょ
糞みたいな自前のメモリ割り当てやってるからあんなGCが必要に
なるんでしょ。何のための自前アロケータなんだか分からない
厨的には、あんな糞実装は氏んじゃえって思う
0744名前は開発中のものです。2009/03/13(金) 00:16:52ID:kkRWD5W+
タスクシステム擁護派じゃないけどさ・・・

雰囲気つかむだけのサンプルにアホとか言っちゃうのはどうよ?
こういうものは思想だけ頂いて自分の好きなように組んでくれって物じゃないのかね・・・

GCがどうのっていうのも処理落ちしたときにはじめて考えればいい所だし、
ただたんに自分の流儀に合わないから貶すと見えますよ。
0745ID:EEKBitmg ◆HSP4mee/SU 2009/03/13(金) 00:24:04ID:w7sHy3uX
>>729
>>2では最初から並列動作なんか考えてないんだから、
>同期処理とかが組み込まれてないのは当たり前だよね。

性格悪いレスになるけど書いちゃえ!
ぶっぶー。並列動作じゃないから同期処理が要らないってのは間違い

>>730
CodeZineの記事のコードってさ、生存中のゲームオブジェクトのアドレスが不定期に変わっちゃうんだよね
あのサンプルってさ、あるゲームオブジェクトのレーダーシステムが特定の目標をロックオンして追跡するとき
どうすんの?

例えばあのサンプルの敵弾ってさ、毎回Playerをタスクリストから探してるんだよね。バカだからさ
priority=1.0のPlayerはタスクリストの一番最後に入ってるのに、先頭からナメて探すの。バカだよね

こんな調子で、ロックオンターゲットも、毎フレーム、タスクリストから探し出すわけ?
多目標同時対処能力を保有する機体が入り乱れたら愉快な処理量になりそうだね

こんなアホなことになるのはさ、糞アロケータの都合で不定期に糞GCかますからでしょ?
あんた>>711で『デフラグができること』を取り上げて
これを素朴な形で実装したのがタスクシステムだとか言ってるけど、素朴って何よ?
明らかに必要ねーことしてるし。バカじゃねーのくたばれバーカバーカって言いたかったけど
ずっと我慢して黙ってたんだ。でももう書いちゃった。

0746ID:EEKBitmg ◆HSP4mee/SU 2009/03/13(金) 00:30:00ID:w7sHy3uX
>>744
だからずっと黙ってたんじゃん。心情的にはCodeZineの記事は
放置したかったんだけど、擁護派がデフラグデフラグとかいうから
書かざるを得なくなった。HSP使いとしては同じ厨を攻撃するのは遺憾
遺憾の意です。本意じゃありません。ごめんなさい><
0747名前は開発中のものです。2009/03/13(金) 00:40:01ID:idYT2cwA
>746
> だからずっと黙ってたんじゃん。

バカには現実を突きつけてやるしかないんだよ。
0748名前は開発中のものです。2009/03/13(金) 00:45:14ID:9zwO86zu
>>747
突きつけても、見えない or 見ようとしないけどな。大抵。
0749名前は開発中のものです。2009/03/13(金) 01:00:19ID:bP/yrlKM
ID:EEKBitmgはCodeZineの記事の作者と同じにほいがする。
ID:EEKBitmgの方が筋は良さそうだが。

>>744
CodeZineの記事は昔論争になったことがあって擁護派らしき人からの批判も多かった。
批判の方が多かったような。
とにかく駄目なものを技術的な説明を沿えて駄目と言うのは良いでしょう。
0750名前は開発中のものです。2009/03/13(金) 07:26:08ID:2Nwh1Ok5
とりあえず並列化の話はやめろよ
この仕組みじゃどう味付けしたって並列化なんてできやしねぇから
0751名前は開発中のものです。2009/03/13(金) 10:49:20ID:t4cURNWA
なんでもタスクで一元管理
まとまってていいね!
ぐらいの感覚なんじゃないの?
腕である人ならいい感じにまとめられるでしょうに
ギャーギャー噛み付くほどのものかねぇ
もしかして、今時のゲームにも導入されたりして被害被ってるの?
0752名前は開発中のものです。2009/03/13(金) 12:37:20ID:2Nwh1Ok5
腕のある人はこんなもん使わないから(笑)
0753並列さん ◆dPfetnROQg 2009/03/13(金) 16:18:33ID:nlP2vU3h
>>745
> priority=1.0のPlayerはタスクリストの一番最後に入ってるのに、先頭からナメて探すの。バカだよね

それは別にhash使えばO(1)で検索できるんだし、本質的な欠陥じゃないと思うが。

> これを素朴な形で実装したのがタスクシステムだとか言ってるけど、素朴って何よ?
> 明らかに必要ねーことしてるし。

まあターゲット環境とゲームの規模によるけど、何らかの形でデフラグはあったほうがいいと思うよ。

working setを縮小したほうがプロセッサのcache効率が上がるのが普通だし、
タスクシステムはプライオリティ順にタスクに対してアクセスしていくのだから
プライオリティ順にメモリ上に配置されて、アクセスするメモリが連続しているほうが
(memory cacheの観点から見て)断然速い。

タスクシステムどうのという話はおいとくとして、ひょっとして、みんなmemoryのcompactionとか処理を書いてないの?
これを無用の長物みたいに言われると、もう議論の前提が違うとしか言いようがないんだけど。
0754名前は開発中のものです。2009/03/13(金) 21:00:36ID:kAszbGcI
>>738
タスクシステムの構造を見れば、これは並行動作を目的としたものだと分かるよね?(分からない?)
その文脈で「並列」という言葉が出てきても、それは並行のことを意味しているとは思わないのかな?
それを書いた人が勘違いしてるのかもしれないし、意識してないのかもしれないし、並行と並行の違いを
知らないのかもしれないし、あるいは文脈上区別の必要が無いと判断したのかもしれない。
いずれにせよ、「並列って言ってるけど並列じゃないじゃん」という批判は、「並列」という言葉を
持ち出した人に対しては当たるかもしれないけど、タスクシステムへの批判としては的外れだよね。
それともID:EEKBitmgさんは、誰かがタスクシステムのことを並列だと書いただけで、タスクシステムの
目的が並列動作だと考えたのかな?
それってタスクシステムのことを理解したうえで批判していると言えるのかな?

あと、用語の使い方が適切でないという点に関しては、ID:EEKBitmgさんも全く人のこと言えないよ。
私自身のスタンスとしては、他人が多少変な言葉を使ったとしてもできるだけその意を汲もうとするし、
逆に自分の言葉はできるだけ分かりやすく正確になるようにしていつもり(あくまでつもりw)だけど、
ID:EEKBitmgさんは全く逆のスタンスなのだろうか? 言葉が不正確なのに、他人の言葉尻は捕らえるよね。


>>739
マルチタスクOS等におけるタスクと、タスクシステムのタスクは設計も目的も意味も違うのに、
それを混同してしまっている、のか混同させようとしているのか分からないけど、このレスはまるまる無意味。
擬似並列動作とかいう怪しげな言葉の意味も分からない。
0755名前は開発中のものです。2009/03/13(金) 21:03:23ID:kAszbGcI
>>740
>>タスクシステムの目的は並行動作だよね。
>>2の話?んなこと俺が知るかっつーカンジ
>俺は>>632のどっちかっつーと並列とかいう謎のタスクシステムが(以下略)
つまり>>2を読んでも、タスクシステムの目的が理解できなかったってこと?
というか、この話の流れを>>729,>>725,>>724,>>711と遡っていけばID:EEKBitmgさんが>>2の話を
しているのは明らかなのに、いきなり>>632を引っ張り出してきて言い訳するのは見苦しいと思う。
それとも単に文脈を追えてないの?何の話をしているのか分かってないの?

>>725で書いた矛盾にぶつかると思う
矛盾ってどれのことだろう。最後の二行のこと?
だとしたらやっぱりタスクシステムの動作を理解できてないよね・・・。
0756名前は開発中のものです。2009/03/13(金) 21:04:17ID:kAszbGcI
>>741 >>742
全体的に言えることだけど、ID:EEKBitmgさんは>>2のサンプルコード個別の事例を批判したいんだろうか。
それともタスクシステムのことを批判したいんだろうか。サンプルコードは、単なるサンプルなんだから
色々な不具合や足りない部分があって当たり前だよね。実際に使いたい人が、実際に使えるように
直せばいいだけで。それができないような構造的な欠陥であれば、タスクシステム自体が駄目だという話に
なるのだろうけど。(そういう話が聞きたいんだけどなぁ・・・。)
で、>>729に答えてもらえなかったから改めて聞くけど、EnemyとMyShotの実行順序をごちゃ混ぜに
したくないなら、ちゃんと順序つけてごちゃ混ぜにしないようにタスクシステムを使うことはできるよね。
その仕組みがちゃんとタスクシステムにはあるよね。それは分かってる?分かってないの?どっち?
0757名前は開発中のものです。2009/03/13(金) 21:10:36ID:2Nwh1Ok5
なんでタスクシステムなんて使わなきゃいけないの?
メリットを説明してよ
0758756の続き2009/03/13(金) 21:35:33ID:gk02bKgy
>>745
>性格悪いレスになるけど書いちゃえ!
>ぶっぶー。並列動作じゃないから同期処理が要らないってのは間違い
詭弁。
「並列動作じゃないから同期処理が要らないってのは間違い」という言葉だけは一般論として正しいけど、
「並列動作じゃないから同期処理が要らない」なんて話は誰もしてないよ。並列動作を前提としていないから
並列動作のための同期処理は書かれていない。一般論としては、並列でなくとも同期処理が必要な場合も
あり得るけど、>>2においてはそういう同期処理も必要無いから書かれていない。それだけの話。

詭弁と分かって書いているのなら、確かに性格が悪いね。
これで反論の体をなしているとでも思っているのなら、悪いのは性格ではなくて頭の方。
0759名前は開発中のものです。2009/03/13(金) 21:38:57ID:gk02bKgy
>こんなアホなことになるのはさ、糞アロケータの都合で不定期に糞GCかますからでしょ?
>あんた>>711で『デフラグができること』を取り上げて
>これを素朴な形で実装したのがタスクシステムだとか言ってるけど、素朴って何よ?
うーん確かに、CodeZineの実装は>>749さんの言うとおり、賛否両論起こるだろうことは分かる。
一応、>>2を前提にスレが進んでると思ったから、デフラグもタスクシステムの利点に入れちゃったけど、
得失もあることだし、単純にタスクシステムの利点として挙げるのは無理があったかな。
というかずっと昔に初めてタスクシステムを知ったときには、デフラグの仕組みは無かったなそういえば。
てなわけで>>711での「タスクシステムの良い点」の記述からは、デフラグの件は除くよう訂正させてください。
素朴って何よ?と言われると困るなぁ・・・。特に高度な管理や複雑な手法を使わず、メモリを直接
いじくりまわすあたりを素朴だと感じたんだけど。人によっては全然素朴だとは感じないかもね。
あと余談というか一つ忠告だけど、GCとコンパクションはきちんと区別した方がいいよ。
ここでならいいだろうけど、真面目な議論の場で混同してたらバカと言われちゃうよ。

>明らかに必要ねーことしてるし。バカじゃねーのくたばれバーカバーカって言いたかったけど
得失の「得」の部分も考えずに、明らかに必要無いとしてしまうのは、考えが足りてないからだよ。
0760名前は開発中のものです。2009/03/13(金) 21:43:42ID:gk02bKgy
うーわーもうダメだ。つっこみどころが多過ぎて収拾がつかない。
これ以降はちょっと自重します。みなさん長々と書いてごめんなさい。

あと今読み返して気付いたけど、>>754の「並行と並行の違い」は「並行と並列の違い」の書き間違いです。
恥ずかしw
0761名前は開発中のものです。2009/03/13(金) 21:54:09ID:2Nwh1Ok5
タスクシステムのメリットを説明してよ
0762名前は開発中のものです。2009/03/13(金) 21:59:22ID:idYT2cwA
本人がメリットだと思わなければ、他人が何を説明したところで無駄な話だ。
0763名前は開発中のものです。2009/03/13(金) 22:59:53ID:IbELy54y
>>757,761
>427
0764ID:EEKBitmg ◆HSP4mee/SU 2009/03/14(土) 01:05:18ID:lcPBznJ3
>>753
ごめんなさい><
厨房はガベージコレクションとコンパクションを混同してた。ご指摘どうもありがとう

>それは別にhash使えばO(1)で検索できるんだし、

そうだろ?メモリコンパクションの重要な目的のひとつがリニアアクセスによる高速化ならば
その利得を殺すようなGetTask()の実装じゃお話にならないよね。初心者用ったってありゃないよ
無い方がマシな盲腸みたいな機能付けといて初心者向けサンプルもへったくれもない
サンプルってのは反面教師じゃない。サンプルってのはゴミじゃない

あのサンプルはPC用。OSはページング方式で仮想アドレスに実アドレスを割り当ててる
ページサイズは4KB単位?で、CPUのキャッシュはキャッシュラインサイズってのがあって
これがL3だのL2だのL1だのでいろいろあるんだよね?実際、仮想アドレス上でバランバランでも
うろたえるほどの速度低下はない。むしろゴマ粒みたいな小さな処理をごちゃ混ぜ連結リストに
投げ込んで、リストを走査しながら関数アドレスで処理を呼び出すっていう仕組みを捨てる
ほうが高速化する
0765ID:EEKBitmg ◆HSP4mee/SU 2009/03/14(土) 01:13:57ID:lcPBznJ3
>>764
×むしろゴマ粒みたいな
○高速化したいなら、むしろゴマ粒みたいな
0766ID:EEKBitmg ◆HSP4mee/SU 2009/03/14(土) 01:25:14ID:lcPBznJ3
だいたいさ、あーいう小粒なSTG作るときに、どうしても自作アロケータ用意したいなら
固定長メモリプールでいいじゃん。boost::poolとかさ
0767ID:EEKBitmg ◆HSP4mee/SU 2009/03/14(土) 01:46:18ID:lcPBznJ3
>>758
つーかお前、前>>510だろ。当たってる?当たってたらなんご褒美ちょうだい
チョー陰険だし、やたらどうでもいいことで噛み付いてくるし、顔真っ赤になると
言ってること滅茶苦茶になるから多分当たってるだろ。な。陰険アマチュア野郎。タスクシステム=DB君。

俺が性格悪い?まぁアンタほどじゃないよ
>>730みたいな内容ゼロのハッタリゴミクズチンカスレスして悦に浸る中年には適わないね
俺が頭悪い?それ既出ジャン?>>355で既に認めてっからよく嫁カス。何今更言ってんだ

>>2では最初から並列動作なんか考えてないんだから

ま、この点でアンタとの争点ないのは分かってるから。せいぜい無視したら?
あんたさ、それが分かってるのに何でそこんとこで噛み付くの?俺が気に入らないだけだろ
0768ID:EEKBitmg ◆HSP4mee/SU 2009/03/14(土) 02:33:21ID:lcPBznJ3
>>766続き
連結リストのメモリ配置を整えましたー。速くなりましたーっていうけどさ
そんなことするならいっそのこと配列にしてダブルバッファリングしたほうがいい
0769名前は開発中のものです。2009/03/14(土) 02:33:35ID:nYYNsR/2
処理の順番追うだけでもうやる気なくなるわー。擬似タスクとか死ねばいいのに。
0770名前は開発中のものです。2009/03/14(土) 02:44:33ID:JpSKv17w
構造が単純なのでゲーム毎の仕様にあったカスタマイズがしやすい、ってのもタスクのメリットの一つかなぁ
でもこの辺のメリットは”知る”ものじゃなくて”理解”するものだから、実際にゲーム作った経験の無い人には
分からないかもしれん。

なんかアンチタスクって独身スレにいる「結婚のメリット教えてくれ!」ってのと同じ感じ。
「絶対に幸せになる保証が無い限り結婚しない!」ってのがいたけど、あれととても似ている…

タスクはゲーム作るときに使うもので、ゲーム作らないならタスクにこだわる必要ないし
実際にタスク以外の方法でゲームつくってるならそれはそれでタスクなんて気にしなくてよい。
アンチはなんでタスクシステムに粘着してるんだろう?
0771名前は開発中のものです。2009/03/14(土) 03:17:55ID:wqRDNWfr
>>770
プロ気取りがしたり顔で出鱈目いっちゃ駄目よん
0772並列さん ◆dPfetnROQg 2009/03/14(土) 03:19:14ID:Nif8vd+k
>>764
> 実際、仮想アドレス上でバランバランでもうろたえるほどの速度低下はない。

その部分に限って言えば、バランバランにメモリをアクセスするのと、
リニアにアクセスするのとでは数倍以上変わると思うけど。

全体に占める割合は…ゲームによるけど、何万パーティクルも表示するつもりなら致命的だと思うけど。

なんか同人規模のシューティングとかしか作ったことのない人が何か言っても説得力ないよ。
0773名前は開発中のものです。2009/03/14(土) 03:29:59ID:wqRDNWfr
厨房のHSP大好き君は発言内容が粗削りだが目の付け所はまずまずだ
ゲームをよく作ってる感じがするのねん
0774名前は開発中のものです。2009/03/14(土) 06:17:22ID:QgvbbJg3
>>773
なんでおまえはそんな偉そうなんだよw

このスレで一番あてにならないのは具体的なことは言わないくせに
妙に偉そうにしてるやつだとおも
擁護アンチ問わず
0775名前は開発中のものです。2009/03/14(土) 13:16:45ID:nGWrBYC8
>>770
タスクシステムを使って書かれたプログラムを引き継ぐ羽目になって(バグが収束せずに
メインプログラマ交代)、散々苦労した。
0776名前は開発中のものです。2009/03/14(土) 16:42:18ID:TdAuyVy6
>>767
>つーかお前、前>>510だろ。当たってる?当たってたらなんご褒美ちょうだい

 ぶっぶー。チョー陰険だから前510だろってのは間違い!

初出は>>682で、以下ID:E0xOAlNR、ID:0j+yjPij、ID:GPL7IZe+、ID:QLymkmBo、
ID:kAszbGcI、ID:gk02bKgy、かな。抜けてるかもしんないけど多分こんだけ。

てか、あらためてスレを斜め読みしてみたら、ID:EEKBitmgさんて高専の人だったのね。
道理で、知識だけはあっても、考え方も物言いも子供っぽいわけだ・・・。
なんかもうすでにガキの喧嘩の捨て台詞みたいなレスになっちゃってるから、>>767
いちいち突っ込むのはやめるけど・・・「俺が気に入らないだけだろ」みたいに、
下らない衝動を私に投影するのはやめてね。
上のリスト見れば分かると思うけど、おかしなことを書いてると思った人に対して
それはおかしいんじゃない?って書き込みしてるだけだよ。
0777名前は開発中のものです。2009/03/14(土) 18:34:28ID:rFb0Dzvp
ごちゃごちゃいいわけはいいからタスクシステムのメリットぐらい説明しろよ
0778名前は開発中のものです。2009/03/14(土) 19:02:02ID:DOdjkrEe
メリットはリンスインシャンプーがあることだろ常考・・・
0779名前は開発中のものです。2009/03/14(土) 19:07:02ID:C4Fq/WX8
>>777
>763
0780名前は開発中のものです。2009/03/14(土) 20:18:24ID:JpSKv17w
>>775
”タスクシステム”を”C言語”とか”ポインタ”に置き換えても成立するな。
バグが収束せずにメインプログラマ交代って時点で既に…
0781名前は開発中のものです。2009/03/14(土) 21:24:01ID:QgvbbJg3
CG板だと、タスクシステムを Shade とか sai に置き換えても違和感無いんだぜ?
0782名前は開発中のものです。2009/03/14(土) 22:13:43ID:DOdjkrEe
>バグが収束せず
ただ単にコーディングレベルの問題ではないか?w
0783名前は開発中のものです。2009/03/15(日) 00:16:39ID:fq8JV7Q3
>>779
は?何もかいてないけど?
馬鹿がわかりもしないでレスつけないでくれない?
07845102009/03/15(日) 02:45:36ID:4et5xcyh
タスクシステムが並列化に向く向かないで盛り上がっているようだが。
書いてみればすぐ分かること。

タスクシステム並列化版
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8978.zip

各スレッドでタスク群の添え字をInterlockedIncrementしつつループまわすだけ。

なお、並列化に関係ない部分は手抜き実装。
07855102009/03/15(日) 02:57:48ID:4et5xcyh
処理順序だとかプライオリティーだとか色々議論しているが、
並列化に処理順序の話を持ち込むのはナンセンスだと考えるが。
並列化しないからといって、処理順序がどうでも良いというわけではない。
0786名前は開発中のものです。2009/03/15(日) 06:19:12ID:fq8JV7Q3
これ並列動作しねぇって
VTuneでも使って一度みてみろマジで
0787名前は開発中のものです。2009/03/15(日) 08:59:48ID:Osu85aea
おいおい お口チャックマンだぜ?
07885102009/03/15(日) 09:15:14ID:4et5xcyh
いや、並列で動くことは動くんだが、他のところがバグってるね。
0789名前は開発中のものです。2009/03/15(日) 11:45:56ID:a+EQhixt
完璧に余談ですが

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <cassert>
#include <vector>
#include <pstade/oven/parallel_for_each.hpp>
#include <pstade/oven/forall.hpp>
struct test_task{
int m_counter;
test_task() : m_counter(0) {}
};
int main(int argc, char *argv[]){
namespace ov = pstade::oven;
namespace ll = boost::lambda;
const size_t N = 10000;
const size_t THREADS_SIZE = 4;
std::vector<test_task> v(N);
ov::parallel_for_each(THREADS_SIZE, v, ll::bind(&test_task::m_counter, ll::_1) += 1);
assert( ov::forall(v, ll::bind(&test_task::m_counter, ll::_1) == 1) );
ov::parallel_for_each(THREADS_SIZE, v, ll::bind(&test_task::m_counter, ll::_1) += 2);
assert( ov::forall(v, ll::bind(&test_task::m_counter, ll::_1) == 3) );
return 0;
}
>>784のmainの動作を真似するだけなら、boostやovenを使ってこう書けたりする。
んで、並行動作するオブジェクト間の依存を上手く消してTBB等のparallel algorithmで一発というのが、
一番簡単な並行プログラミングだろうなと思った。
boost threadはただのマルチスレッドだけどTBBのだと強烈な並列化もしてくれるみたいだしね。
しかし、こういうのは参照透明性の保証が容易な関数型言語の十八番のように思うわ。
0790名前は開発中のものです。2009/03/16(月) 00:25:10ID:zPsQiR9l
そもそも、なんでタスクとやらを並列化したがるかな。

ゲームに限らんが、並列化しやすい部分としにくい部分がある。描画周りとかパーティクルなどの
エフェクト系、モーション計算とかを並列化したほうが、依存関係が複雑で仕様変更が多発する
プレイヤーやら何やらを並列化するよりよほど現実的だと思うんだが。
0791名前は開発中のものです。2009/03/16(月) 00:41:01ID:4SuKIn/y
並列化は別で話してほしい。
優先順位とグローバル変数(シングルトン含めて)問題の冴えたやりかたを検討しようぜ
0792ID:EEKBitmg ◆HSP4mee/SU 2009/03/16(月) 02:18:40ID:9YyKMei6
>>784
ちょっとちょっとちょっとー。ハッタリ自動並列メタボDBオヤジは本当に大丈夫なの?

  『ボクが作ったこのコードにもタスクシステムって名前付けたからこれもタスクシステムですし
   ついでに言うとこれDBですし自動並列処理もできますしお前らはボクのコードが並列化に
   向いてないって言いたいんだろうけどそれは全くの誤りだしどうしてそれが分からないの?』

こういうことなの?頭の中がお花畑なの?公序良俗に反するポピーの花が自生してるの?
お前がひりだしたウンコがどう陳列され得るかなんていう前衛美術の話なんて誰もしてないから
安心していいよ

それとオッサン、あんたは何で配列にぶち込んだ1万個の鼻糞みたいなちっさな処理を一個一個
処理する度にsleepしたりクリティカルセクションかまして次に処理する要素番号をゲットすんの?
スレッドの数で配列を等分して粗粒度並列化でもしときなさいよ
sleepなんか噛ましたらインストラクションレベルの自動最適化の妨げになっちゃうじゃないの

あんたのコード使うくらいなら直列番長の>>2のほうがまだ速いよ
0793ID:EEKBitmg ◆HSP4mee/SU 2009/03/16(月) 02:40:43ID:9YyKMei6
あとさ、同一フレーム内で終わらせないといけない処理なのに
イベント(シグナル)で同期とったりするのは何の冗談なの?
ベンチ取った?アホ?

もしかしてワーカースレッドが目覚める前にメインスレッドが全部処理
しちゃったりしてない?あとさ、最初のTASK1(hage)が終わって
次のTASK1(hoge)が始まる頃には何ms経過してるの?

なんかもう自動並列とか以前に足元がグラグラのヘボヘボな気がする
おやすみ
0794ID:EEKBitmg ◆HSP4mee/SU 2009/03/16(月) 02:44:52ID:9YyKMei6
あと、TASK1(hogehoge)の度にスレッド作るのはサンプルだから?
ウソだろ?サンプルだからってこれはないと思う。聳え立つウンコだ
0795ID:EEKBitmg ◆HSP4mee/SU 2009/03/16(月) 08:13:22ID:McZ+hNsy
>>794
よく見たらtasksystemはグローバル変数だからスレッドは使い回してるから
そびえ立つウンコてのは言い過ぎか
0796名前は開発中のものです。2009/03/16(月) 13:07:05ID:ah3HB55u
おっさん言う奴は自分は若いと思ってる20代後半から30代前半の独身男性だな
0797名前は開発中のものです。2009/03/16(月) 21:21:55ID:JRonhFLP
タスクシステムってあれだろ
雑魚とドラム缶を合わせて4つまでしか画面に表示しないように制限するシステム
0798名前は開発中のものです。2009/03/16(月) 22:00:19ID:/VT9KBYC
大体お前の頭の中身と同じだな。
0799ID:EEKBitmg ◆HSP4mee/SU 2009/03/16(月) 22:53:40ID:McZ+hNsy
>>796
俺そんなに大人びて見えるか?もしかして俺褒められてる?
このマス掻き童貞夜更かししてないでエロゲでシコって糞して寝てろ、とか
罵倒されるんじゃないかとビクビクしてたんだけど杞憂だったのかな
0800名前は開発中のものです。2009/03/17(火) 00:41:33ID:0PbiXi36
「新装版 大規模C++ソフトウェアデザイン」って本を昨日から読み始めたんだけど、
1章を読んだだけでタスクシステムのだめな点が指摘されているような気がした。

「継承」対「階層化」では階層化の勝ちで、
理由は階層化の方がはるかに一般的=依存性が少ないからって話みたい。
タスクシステム(なんちゃってC++版)のタスクは継承使ってるよね。

タスクの次にどこに進めばいいか分からないとか、
抽象的な話に飽きた、デザパタとか眉唾ーって人は
これ読むとおもしろいかもよ。おれはおもしろい。当たり前のことが書いてある。
0801名前は開発中のものです。2009/03/17(火) 01:59:53ID:kxFrGMdG
包含と継承のことだな。

まあ多態性を使わない場面ならすべて包含でいける。
包含だと結合が緩やかだから見通しが良いって話だなそれは。

何段も深くなければよいんじゃないかね?
0802名前は開発中のものです。2009/03/17(火) 07:25:27ID:VzljBEPw
なんでもかんでも機能を突っ込もうとするからだ。

delegateのリストでも使っとけ。
0803名前は開発中のものです。2009/03/17(火) 11:28:02ID:b6S1HRLy
タスクシステムいいじゃん。
範囲指定で自殺してくれるの最高。
0804名前は開発中のものです。2009/03/17(火) 13:49:55ID:hOnodYrQ
>>803
その範囲は何を意味してるの?
何かの値なんだろうけど。
0805名前は開発中のものです。2009/03/17(火) 14:04:47ID:eriEEpX/
親殺せば子も死ぬってことじゃね?
0806名前は開発中のものです。2009/03/17(火) 17:56:34ID:zLwES14L
タスクシステム関係無いじゃん
0807名前は開発中のものです。2009/03/17(火) 21:56:42ID:kxFrGMdG
>>802
タスクシステムのExecやRunやProcなんかは
まさにそういう用途の窓口じゃないのかね?
■ このスレッドは過去ログ倉庫に格納されています