09/03/04 02:40:49 hHE159vF
>>448 の者だが、
タスク進化系がいまだにコンシューマゲーム開発の現場で生き残っているのは単純に無駄が無いから、ってのも理由の一つ。
スーファミからPS1へ、PS1からPS2へ、PS2からPS3へ移行するたびに、こんな大量のメモリ使い切れん、と思ったものだが
なぜかマスター寸前の修羅場になるといつもメモリも速度も足りなくなりチューニングに明け暮れる日々が続く。
これはメモリ128Kのスーファミ時代から256MBのPS3まで、コンシューマ開発では変わらん定例行事。
そして常にメモリとコードの無駄を減らす圧力にさらされるんだけど、タスクみたいに毎フレーム相当数呼ばれる処理に
無駄が見つかると真っ先に削られる。
この修羅場では「可読性が…」とか「OOP的に…」なんて甘い理由よりも少しでも軽量なコードで動かすことが優先される。
で、PS3時代にもタスク進化系が生き残ってる、というわけだね。
仮想メモリつんでてスペックはユーザ毎にばらばらのPC環境では特定ハード向けにガリガリにチューニングなんて意味ないので
PC環境でしか作ったことの無い人間には理解できんだろうけど、
コンシューマ開発や組み込み系とみたいに固有のハード性能を120%使い切る開発スタイルではよくあること。
530:名前は開発中のものです。
09/03/04 02:55:00 43lD+2sK
>>529
なるほど。全くコンシューマーを知らないけれど、説得力がある
では潤沢過ぎる程のメモリと、無限の演算能力がもしあったとしたら
喜んでタスクシステムは棄て去る?
531:ID:EEKBitmg
09/03/04 03:04:13 vv/UkwCS
ありえない仮定を持ち出すとかスゲェな
厨だけどさすがにこれは真似できないな
お前は凄い。俺は頭痛がしてきた。寝る
532:名前は開発中のものです。
09/03/04 03:13:07 43lD+2sK
突込みがあったので補足。
>>530は、タスクシステムが貧困な環境で使えるという>>529に対して、
ならば、十分豊かな環境だったらそうではないのか?という質問。
無限~は *話を簡単にするため* の誇張した表現。
533:名前は開発中のものです。
09/03/04 03:29:05 hHE159vF
>>530
無限のメモリと無限の演算能力があったら…?
それでも小規模なアクションゲーム系1人で作るならタスク進化系の管理システム使うと思う。
タスク系は下手に使うとバグの温床になるけど使いどころを間違えなければ便利だし。
まぁこれは慣れの問題なので、この手のゲームならこの手法で…とかだいたいやり方の想像つくし
タスク系固有のバグで苦しんだ結果、バグの温床にならない作り方が出来るようになってるから、ってのもある。
慣れた人間にとっては開発効率いいんだよね、あれ。
まぁでも新人込みのプログラマ数十人で大規模オンラインゲームを作る、とかならたぶん違う方法取るけどね。
534:名前は開発中のものです。
09/03/04 04:55:07 ll33Ou9u
>>533
無限の資源があってもリスクと教育コスト考えれば結局C++使うだろうねー
無限の納期と無限の人材があるなら・・・遊んで暮らすだろうなー
535:名前は開発中のものです。
09/03/04 05:47:21 kXQL8zXx
タスクシステムってソースがタスクなわけで
プロセスがタスクじゃないのね
ではマルチプロセス対応というのは真っ赤な嘘になるわけだ
536:名前は開発中のものです。
09/03/04 06:56:53 m+X+Qg7j
>>527
タスクシステムはsingletonじゃねぇぞ。
タスクのなかに別のタスクシステムをcompositionで配置してタスクを
階層化できるが、お前本当にOOPわかってんのか?
537:名前は開発中のものです。
09/03/04 07:31:28 NGMxgsfO
そんなの全く意味がないじゃん
だいたいそんなのやるならはじめから分けてもてよ
538:名前は開発中のものです。
09/03/04 07:34:46 NGMxgsfO
並列化はどう考えても嘘
並列にするなら少なくとも並列にするデータは分けないと動かない
ごった煮でできるわけない
539:名前は開発中のものです。
09/03/04 08:44:10 mN9/jFMx
>>529
メモリ使用量の大半を占めるのはテクスチャ・モデル・モーションなどのデータで、
CPU使用時間の大半を占めるのはヒット判定や AI 処理。
いわゆるゲームオブジェクト (プレイヤーとか) で多少削ったところで、誤差にもならない。
540:名前は開発中のものです。
09/03/04 08:48:07 m+X+Qg7j
>>537
> そんなの全く意味がないじゃん
そんなこたあ、ない。
541:名前は開発中のものです。
09/03/04 08:49:26 2ryo6+k/
数人で作るレベルなら擬似タスクでいいよ。
でもそれを超えると破綻すると思う。
542:名前は開発中のものです。
09/03/04 08:49:27 m+X+Qg7j
>>538
阿呆すぎて泣ける。
前スレ510のプログラム、あれ並列化できないの?
本当に1行でもプログラム書けるの?
タスクシステム使わなくていいから、前スレ510のプログラム、並列化してみなよ。
543:名前は開発中のものです。
09/03/04 08:51:55 m+yO0HqN
>>508
彼を養護してるアンチはいないようだが
そこまでして印象操作したいの?
544:名前は開発中のものです。
09/03/04 08:52:16 m+X+Qg7j
>>526
> それなら、最初からふつーにメンバ変数で持たせて終わりじゃない?
そのメンバ変数が指しているオブジェクトが生きていることを誰がどうやって保証するんだ?
545:名前は開発中のものです。
09/03/04 08:54:00 m+X+Qg7j
>>543
このスレのアンチタスカーのレベルが総じて低すぎる。
タスクシステムに限らずフレームワークなんて、使える範囲で使えばいいだけのことなのに
完全否定する奴は完全肯定する奴と同罪で、頭おかしい。
546:名前は開発中のものです。
09/03/04 08:55:29 mN9/jFMx
>>542
> 前スレ510のプログラム、あれ並列化できないの?
そもそも、あれは名前がタスクなだけで、>>2 と設計全然違うけど。
いずれにせよ、データに依存性があり並列化はできない。
> m_vx = m_vx*m_m/(m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(m_m+Star2.m_m);
> m_vy = m_vy*m_m/(m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(m_m+Star2.m_m);
たとえばこのコード、複数の Star インスタンスの m_vx, m_vy を同時に読み書きしている。
複数スレッドで走らせた場合、値が保障できなくなる。
547:名前は開発中のものです。
09/03/04 08:57:09 m+yO0HqN
>>545
> 完全否定する奴は完全肯定する奴と同罪で、頭おかしい。
つ鏡
548:名前は開発中のものです。
09/03/04 09:08:31 mN9/jFMx
>>544
526のコードは、ポインタではなく実体で持たせているから、保障も何も要らんと思うが。
いずれにせよハンドルクラス (整数値とインスタンスの対応付け) は用意したほうが
便利だが、その場合でもプレイヤー・敵は別の ID 体系にしておくな。
たとえば、最大 2 プレイヤー同時プレイ可能なゲームで、プレイヤーに向かって
進む敵を作りたい場合。
class PlayerID { int id_; friend class Scene; }; class EnemyID { int id_; friend class Scene; };
class EnemyEnv {
virtual ~EnemyEnv() {};
virtual PLAYER_ID GetNearestPlayer(ENEMY_ID enemy_id) const = 0;
virtual Vec3 GetPlayerPos(PLAYER_ID player_id) const = 0;
};
class Scene : public EnemyEnv {
Player player_[2];
std:::list<Enemy> enemies_;
public:
void Update() { player_.Update(*this); enemy_.Update(*this); }
virtual PLAYER_ID GetNearestPlayer() const { ... }
virtual bool GetPlayerPos(PLAYER_ID player_id, Vec3* pos) const {
// 実際には、ここで player_id.id の値チェックを行い、生存していなかったら false 返す
*pos = player_[player_id.id_].GetPos(); return false;
}
}
void Enemy::Update(EnemyEnv& env) {
PLAYER_ID player_id = env.GetNearestPlayer(this.GetID());
Vec3 pos = env.GetPlayerPos(player_id);
// あとは pos に向かって自分の位置を調整
}
549:名前は開発中のものです。
09/03/04 09:09:02 m+X+Qg7j
>>546
> たとえばこのコード、複数の Star インスタンスの m_vx, m_vy を同時に読み書きしている。
その言い方は不正確だし、並列化の本質をわかっていない。
そのコード、そもそも元コードがすこしおかしいのだが、タスクシステムを使おうと使うまいと
Starオブジェクトの集合から任意の2体を取り出して、その振る舞いを書きたいとする。
foreach(var star1 , star2 in stars)
{
star1.m_vx = star1.m_vx*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(star1.m_m+Star2.m_m);
star1.m_vy = star1.m_vy*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(star1.m_m+Star2.m_m); }
}
これは、次のようにかきかえる。
foreach(var star1 , star2 in stars)
{
star1.m_vx_new = star1.m_vx*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(star1.m_m+Star2.m_m);
star1.m_vy_new = star1.m_vy*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(star1.m_m+Star2.m_m);
}
foreach(var star in stars)
{
star1.m_vx = star1.m_vx_new;
star1.m_vy = star1.m_vx_new;
}
これは、コリジョン判定とそれに対するアクションを切り離すときもそう。
これをきちんと切り離しておかないと並列化できない。
前スレでコリジョン判定は並列化できないとか言ってた馬鹿がいたけど、アクションを切り離さないから出来ない。
550:名前は開発中のものです。
09/03/04 09:11:17 mN9/jFMx
>>549
その指摘は正しいが、前スレ 510 を使うかどうかとまったく無関係だよね。
タスクとやらを使ったから並列化できるようになるわけじゃないし、並列化が
楽になるわけでさえない。
けっきょく、同じ労力を咲く必要がある。
551:名前は開発中のものです。
09/03/04 09:11:22 m+X+Qg7j
>>548
> いずれにせよハンドルクラス (整数値とインスタンスの対応付け) は用意したほうが
そんなものあえて作る意味があるか?boost::weak_ptrで済むだろ。
そもそも、548のソースは典型的なタスクシステムで記述するよりはるかに複雑なんだが、
あんたは、タスクシステムの否定派なのか肯定派なのか何なんだ?
552:名前は開発中のものです。
09/03/04 09:15:37 m+X+Qg7j
>>550
> タスクとやらを使ったから並列化できるようになるわけじゃないし、並列化が
> 楽になるわけでさえない。
それは違うね。タスクシステムの側に並列化する部分を担当してもらう。
タスクシステムを使う側は、それを利用すればいいだけ。
タスクシステムは底辺の馬鹿プログラマが書かなくとも、別の、もっと優秀なプログラマが書けばいい。
並列化効率とか、メモリcacheとか、シェーダーに対するタスクの分配とか、そういうのを考慮して効率の
いい並列化プログラムを書ける奴がな。
こうして、はじめてゲームの分業が成立するんだが。
あんたはちょっとはまともなプログラマに見えるが、大規模なゲーム開発に取り組んだことはないのか?
553:名前は開発中のものです。
09/03/04 09:17:40 m+X+Qg7j
>こうして、はじめてゲームの分業が成立するんだが。
脱字。「ゲーム開発における分業」の間違い。
いま読み返したら549は
>foreach(var star in stars)
>{
> star1.m_vx = star1.m_vx_new;
> star1.m_vy = star1.m_vx_new;
>}
ここ、左辺はstar1ではなくstarだ。ごめん。
554:名前は開発中のものです。
09/03/04 09:24:16 mN9/jFMx
>>551
> そもそも、548のソースは典型的なタスクシステムで記述するよりはるかに複雑なんだが、
以前から同じようなコード例書いてるんだけどな。前スレ 748 とか。
・コンポジションで良いじゃん
・規模が大きいプログラムだと、どのタイミングで何が呼ばれるか、変更されるかが
分かることが重要。
この例だと Enemy::Update 時には EnemyEnv 経由で Scene のメンバ関数が呼ばれる
だけと確定する。Enemy::Draw みたいな処理があったときに、EnemyEnv const& 使うか
別のクラスを用意するかは要検討(場合による)。
> そんなものあえて作る意味があるか?boost::weak_ptrで済むだろ。
スクリプトと連携するときに楽
boost::shared_ptr 使ってるとは限らない
別に weak_ptr 使える場合には、使えば良いと思うけど。
555:名前は開発中のものです。
09/03/04 09:25:22 mN9/jFMx
>>552
> タスクシステムの側に並列化する部分を担当してもらう。
名前がタスクシステムなだけで、前スレ 510 とも >>2 ともまったく違う設計・実装について
語ってるということで FA?
556:名前は開発中のものです。
09/03/04 09:26:54 m+X+Qg7j
結局、並列化の本質は>>549なんだ。もう少し抽象化して書けば、こう。
foreach(var star1 , star2 in stars)
{
star1の新しく情報を書き込む領域 ← star1とstar2相互計算によって得る。
}
foreach(var star in stars)
{
starの新しく情報を書き込んだ領域をcommitする。
}
で、これをタスクシステム側に並列化する部分を受け持ってもらう。
例えば>>546であれば、次のように書けば上のプログラム(>>549)と等価になる構文を用意する。
foreach_parallel (var star1 , star2 in stars)
{
star1.m_vx = star1.m_vx*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vx*Star2.m_m/(star1.m_m+Star2.m_m);
star1.m_vy = star1.m_vy*star1.m_m/(star1.m_m+Star2.m_m) + Star2.m_vy*Star2.m_m/(star1.m_m+Star2.m_m);
}
このとき、左辺は、shadow(m_vx_new , m_vy_new ) に対してアクセスしていて、実際はforeachを抜けてから
foreach(var star in stars)
{
star.m_vx = star1.m_vx_new;
star.m_vy = star1.m_vx_new;
}
これが実行される。この仕組みをタスクシステム側に提供してもらう。これなら簡単に並列化できる。
ゲームで使うコリジョン判定などはたいていこのように並列化できる。
557:名前は開発中のものです。
09/03/04 09:31:11 m+X+Qg7j
>>555
> 名前がタスクシステムなだけで、前スレ 510 とも >>2 ともまったく違う設計・実装について
> 語ってるということで FA?
並列化とタスクシステムとは直交する概念だから、例えば>>2のタスクシステムを並列化することも出来るし
前スレ510のタスクシステムを並列化することも出来る。
どちらかと言えば、前スレ510のほうが>>2よりはある型のオブジェクト集合のうち任意の2体に対する
振る舞いが書けるのでその部分が並列化する価値が高いだけのこと。
そもそも、タスクに対して列挙したり、任意の型の2体を取り出したりする仕組みがどこにもない状態で
並列化なんて出来ないだろう。
俺がタスクシステムと呼んでいるのは、最低限、タスクシステムと名がつくなら、タスクに対する基底
クラスが存在して、それくらいの機能はあるんじゃねーの?と思うからだ。
558:名前は開発中のものです。
09/03/04 09:32:48 m+X+Qg7j
>>554
>> そんなものあえて作る意味があるか?boost::weak_ptrで済むだろ。
>スクリプトと連携するときに楽
ふむ、それならok。
559:510
09/03/04 11:11:12 5viq5cgM
>>556
shadowのアイデアもーらい。
transaction( hoge )//shadow初期化
{
task2_parallel( hoge, hoge )
{
_hoge1.x += hoge2.x;//例えば、変数の頭にアンダーバーがついていたらshadowとか。
//rollback;//ロールバックも出来るよ
}
task_parallel_end;
}
commit;//shadowコミット
あと、何か頭が統合ヘッダ?の人が来てたみたいだけど、
アップロードしたプログラムのヘッダファイルがごった煮だったのは
単にサンプルプログラムだったからだ。
560:510
09/03/04 11:23:44 5viq5cgM
shadowは書き込みさきより参照元の方が良いな。
561:名前は開発中のものです。
09/03/04 11:43:23 4u8TV8ZG
>>557
>俺がタスクシステムと呼んでいるのは、最低限、タスクシステムと名がつくなら、タスクに対する基底
>クラスが存在して、それくらいの機能はあるんじゃねーの?と思うからだ。
あー、やはりな。以下の内容は煽り抜きだから気を悪くしないでくれ
結局これはローカル用語の解釈を巡る相違でしかない
例えばウチの社内ではあんたの解釈を振りかざしても
意思疎通はうまくいかないだろう
ここでは色んな名無しが俺定義・俺解釈のローカル用語を
公衆の場に持ち出して一人相撲してる。あんたもそう
タスクシステムは権威不在の定義不明瞭なローカル用語だ
ということをまず再確認し、意思疎通を円滑にするために
それぞれがより確かな一般的な計算機用語に換言する努力を
すべきだ。でなければ、この実に不毛なすれ違いは無くならない
562:510
09/03/04 11:50:03 5viq5cgM
俺はソースコードアップしてその上で、これが俺のタスクシステムだって言ってるんだから良いんだよな。
皆各々ソースコードアップすればよいと思うよ。
563:名前は開発中のものです。
09/03/04 12:38:40 4u8TV8ZG
>>562
君のコードにはもっと相応しい個性的でカッコイイ名前を付けてあげなさい
手垢で汚れたタスクシステムなんて臭い名前では>>2と勘違いされてしまう
君のコードは泣いているぞ。不敏でならない
エターナル自動並列ブリザードデータベースでもなんでもいい
革新的であることを世の馬鹿共に知らしめる努力をすべきだ
564:並列さん ◆dPfetnROQg
09/03/04 15:46:36 m+X+Qg7j
>>559
なかなかいいね。
俺、そろそろコテハンにしとくわ。
ちなみに前スレ510に対して、C++としては素人の書き方だと指摘したのは俺な。
原則煽り専門だから、よろしく。
565:名前は開発中のものです。
09/03/04 18:27:15 NGMxgsfO
で?
ごった煮でどうやってヒット判定の並列化をするって?
値を後で更新すると折角優先順位をつけても古い値でヒット判定をすることになるからおすすめできない
並列化を狙うならオクツリーにして位置で切らないと多分無理
566:名前は開発中のものです。
09/03/04 18:45:20 4u8TV8ZG
演算器いっぱいのベクトルプロセッサにやらせる場合
移動フェーズと衝突検出フェーズと衝突応答フェーズに
分割してそれぞれのフェーズでいっせーのーせでやる
物理エンジンなんかもそう
もちろん空間領域分割もする
567:名前は開発中のものです。
09/03/04 18:51:51 NGMxgsfO
駄目
衝突は即座に補正かけないとそれだけでバグる
移動して衝突判定をすぐにしないと壁の向こうの敵と接触することになるぞ
しかし壁の当たりの優先順位はおそらく最後だろ?
でないと抜けるしね
しかしそうすると壁の向こうの敵と接触する
この辺をタスク縛りにするのは正直うまくない
やるならなにはなくともオクツリー
568:名前は開発中のものです。
09/03/04 19:02:10 sCGilUsr
なんで衝突判定中に衝突以外の判定を入れるの?馬鹿なの?
569:名前は開発中のものです。
09/03/04 19:02:19 TXLFx8i5
それでバグらないようにする手法も研究されてるだろうね
考えるならなにはなくともまずはサーベイ
570:名前は開発中のものです。
09/03/04 19:04:26 F+dIxfjw
並列化とタスクと絡めて話してるのは極一部で
しかもタスクを使えば並列化できると主張してる人はいない。
今の話は並列化に対応したタスクがもし作れるとするなら
どんなものになるかという感じ。並列化に関する部分は一般論をしてる。
つか並列化はそろそろ別スレ立てた方がいいんじゃね。
並列化が目的でタスクは手段に過ぎないんでしょ。
571:名前は開発中のものです。
09/03/04 19:08:59 4u8TV8ZG
>>567
上のは(Id Software系のエンジンでいうところの)エンティティ対エンティティ
のみに絞った話。相互作用。
壁抜けや床抜けに対するケア、これはブラシとの衝突(相互ではなく一方的作用)は
当然これは即座に補正される
572:名前は開発中のものです。
09/03/04 19:18:42 4u8TV8ZG
>>571
即座に、ではなく、衝突検出フェーズにおいて、ブラシとの作用が先に反映される
だな
573:並列さん ◆dPfetnROQg
09/03/04 19:25:13 m+X+Qg7j
>>567
> 衝突は即座に補正かけないとそれだけでバグる
俺物理エンジン書いたことあるが、そんなこたぁない。
どうせお前のプログラム、移動させて同時に衝突判定してぶつかってたら逆方向に移動とか
阿呆なことやってんだろ。本当、このスレは底辺プログラマ集まってんのな。
574:名前は開発中のものです。
09/03/04 19:26:40 4u8TV8ZG
>>572
ついでに、高速移動体に対するケアの話もここでは割愛している
あと、俺は強烈なアンチだ
575:並列さん ◆dPfetnROQg
09/03/04 19:30:44 m+X+Qg7j
ああ、ID:4u8TV8ZGは底辺プログラマではないな。俺的に除外しとく。
しかし、ID:NGMxgsfOは、底辺以下だな。俺的には、ゴミ扱い。
タスクシステムを使うと総合ヘッダが必要になるとか言ってる基地外と一緒。
ああ、ID:NGMxgsfOがその基地外なのか?
576:並列さん ◆dPfetnROQg
09/03/04 19:33:21 m+X+Qg7j
>>574
あんたは、強烈なアンチなのか。それは意外だ。
俺はじゃあ、強烈なタスク信者ってことでヨロシク!
まあ、あんたとは仲良くできそうだけどな。
577:名前は開発中のものです。
09/03/04 19:44:25 4u8TV8ZG
>>576
俺とあんたとの間に争点があるとすれば、それはタスクシステムという呼称だろうな
俺はあのローカル用語から発せられる腐敗臭が大嫌いなんだ
578:名前は開発中のものです。
09/03/04 19:50:16 sCGilUsr
タスク(自分の信じる、おそらく誰とも同じものを指していない)信者
と
強烈なアンチ(なにに対してなのか自分でも解っていない)
か。
579:並列さん ◆dPfetnROQg
09/03/04 20:28:42 m+X+Qg7j
>>577
ああ、それは同感。
まあ、俺のなかでは、タスクシステムは少なくともstd::listよりは少しはマシなことが
出来るように工夫してあんだろ、みたいな思い込みはある。
std::list以下のものなら、タスクシステムなんて大層な名前つけなくても黙って
std::list使っときゃいいわけで。
580:名前は開発中のものです。
09/03/04 23:21:38 m+yO0HqN
>>549
結局パフォーマンス向上しないだろコレ
581:名前は開発中のものです。
09/03/04 23:55:44 NGMxgsfO
全くしない(笑)
何を並列化したのかさっぱりわからん
あたりでやるとしたら全く関わることのない範囲を同時に・・・
ぐらいしかないけどな
こんなパラ単位で並列化なんて意味ねーよ
582:名前は開発中のものです。
09/03/05 00:22:53 eF6P+SnV
>>580
foreach の部分を OpenMP とかで並列処理できれば、まぁ多少は。
しかし、そもそも並列化するならゲームロジックが絡むところより、モーション計算
とかエフェクト(特にパーティクル)だろう。ゲームロジックは依存関係がキツいし、
仕様変更が頻繁に起こりうるからリスク大きすぎる。
もっとも PS2 のときから、技術力があるところは VU1 に持っていってたけどな。
583:名前は開発中のものです。
09/03/05 01:46:15 EYYtQjTl
ああくそ!
ID:NIkO1+LI祭に乗り遅れた!
書き込み規制が憎い
584:並列さん ◆dPfetnROQg
09/03/05 07:31:17 2NL1rK1f
>>580
するよ。
>>581
阿呆すぎて泣ける。どこの阿呆かと思ったら、
「衝突は即座に補正かけないとそれだけでバグる」とか言ってた阿呆か。
全然話にならんわ。
まともな物理エンジンのソース見たことないんだろうな。
585:名前は開発中のものです。
09/03/05 07:49:58 DNYGW2s8
でも実際動いたら補正かけないと壁の向こうの敵に当たる
間に壁がないかみて判定しなきゃならんときもある
この辺をタスク縛りにされるのは正直やりにくいにも程がある
ゲームやオブジェクトによってすり抜けがどうでもいいものもあるだけに一般化はできない
リングアウトだけ起こらないでは済まない場合は結構多い
べつに速度がとんでもない場合じゃなくても問題は起こる
586:並列さん ◆dPfetnROQg
09/03/05 08:24:43 2NL1rK1f
>>585
あんたは、ID:NGMxgsfOか?
それとも、ID:NGMxgsfO級の阿呆が何人もいるのか?
いい加減、コテハンにしてくれ。
まともな幾何的なconstraint solverを書いたことすらない奴が物理エンジンを語るなよ。
587:名前は開発中のものです。
09/03/05 09:31:58 eF6P+SnV
>>586
ここで物理エンジン語るのも、どうかと思うが。
588:名前は開発中のものです。
09/03/05 09:41:46 NLOFzCy8
>>586
何故 >>585 の問題が起こらないのか教えて欲しい
589:名前は開発中のものです。
09/03/05 09:52:09 W/Wu7C9w
>>585,588
タスク以外でも585の問題をどうやって解決しているのか知りたい。
結局両方の例が無いと比較できないし評価を下すこともできない。
590:名前は開発中のものです。
09/03/05 10:27:56 rvhMBE/z
壁との当り判定&補正処理をした後で
敵との当り判定を取れば良いだろ。
591:並列さん ◆dPfetnROQg
09/03/05 10:33:57 2NL1rK1f
>>588-589
何度でも言うが阿呆共はコテハンつれてくれ。
>>590
そんなことをするとコリジョン判定を並列化できない。
592:名前は開発中のものです。
09/03/05 10:56:14 rvhMBE/z
壁との当り判定&補正処理と、敵との当り判定を、それぞれ別々に並列化すればよいだろ。
parallel { 壁との当り判定&補正処理 }
parallel { 敵との当り判定 }
593:名前は開発中のものです。
09/03/05 11:00:40 eQbdbaUx
さすがに優先度の在る処理を並列化する馬鹿は居ないだろ。
594:並列さん ◆dPfetnROQg
09/03/05 11:53:25 2NL1rK1f
>>592
素人すぎて話にならん。なんだよ、壁と敵って。動くか動かないかでわけてんの?馬鹿じゃねーの。
595:名前は開発中のものです。
09/03/05 13:24:53 rvhMBE/z
動くか動かないとか、誰も言ってないのに。
壁=動かない、敵=動く、という固定観念でもおあり?
>>592 は、
あらかじめ、物理的に問題の無い状態に落ち着けてから、
あらためて、ゲーム進行上ひつような当り判定を行う。
ということ。
596:名前は開発中のものです。
09/03/05 13:26:57 rvhMBE/z
並列さんも結局あてにならないんだよなぁ・・・
597:並列さん ◆dPfetnROQg
09/03/05 13:50:52 2NL1rK1f
>>595
> 壁=動かない、敵=動く、という固定観念でもおあり?
この議論の大元となっているのは、>>155で、そこには
> 衝突解決には、たとえば「壁は動かない」「プレイヤーが壁に当たったら押し戻される」
と書いてあるから俺はその定義に従っただけなのだが。
この流れで、オレオレ定義の「壁」とか「敵」を持ち出すなら、言葉の定義ぐらい先に書いて欲しいんだが。
598:名前は開発中のものです。
09/03/05 14:02:23 TJw/foDe
あてになるかどうかというより基本的な部分で意志の疎通ができてないんじゃ。
共通認識を積み上げる作業をさぼったらコミュニケーション取れんよ。
そんな面倒なことは省略して結果を気にせずに出会い頭の辻切り対辻切り
みたいなやりとりを日常的にしてるのが2chでもあるけど。
599:名前は開発中のものです。
09/03/05 14:03:36 rvhMBE/z
どんだけ悔しかったのか知らないが、12日も前のレス持ち出して弁解ですか。
>>592の壁とか敵はオレオレ定義ではなく、>>585で出現しているそれ。
7つ上のレスも見れない池沼さんですか?
で、揚げ足取りは結構なんだけど、本文への反論は?
600:並列さん ◆dPfetnROQg
09/03/05 14:18:31 2NL1rK1f
>>599
> >>592の壁とか敵はオレオレ定義ではなく、>>585で出現しているそれ。
>>585に定義らしきことは書いてないじゃん。
> で、揚げ足取りは結構なんだけど、本文への反論は?
「壁」と「敵」についてきちんと定義を書いてくれ。話はそれからだ。
601:名前は開発中のものです。
09/03/05 14:45:45 eQbdbaUx
>>600
こいつは何を並列処理しようとしてるの?
602:名前は開発中のものです。
09/03/05 14:56:23 rvhMBE/z
(あ、また、
自分は7レス前の今朝の関係のあるレスも見れないのに、
他人には439レス前の12日前の無関係なレスを覚えていることを要求する並列さんが何か言ってるな)
>>600
ちょっともう、どうしたらよいの?国語やりなおせとしか言いようが無いのだが。。
>>585をよめば、
・壁とは、敵との当りを防ぐもの。
・敵とは、当たりをとる対象。
ということぐらい普通分かるだろ。
同時に、>>155が今件になんら関係ないことも分かるだろ。
結論から言うと、お前が一人で勘違いして勝手に煽ったりファビョったり一人相撲してただけだ。
603:名前は開発中のものです。
09/03/05 15:05:28 rvhMBE/z
文章が読めない奴ばかりだから、もう一度書き込むぞ。
>>585は、
衝突解決の途中でゲーム進行用の当たり判定を取ると、
ゲーム進行用の当たり判定がバグる、
と主張し、
それに対して俺は、
衝突解決が完了してからゲーム進行用の当たり判定を取ればよい、
と主張をしている。
予め言っておくが、衝突解決の優先順位の問題とは全く別の話。
604:並列さん ◆dPfetnROQg
09/03/05 15:17:15 2NL1rK1f
>>602
> ・壁とは、敵との当りを防ぐもの。
> ・敵とは、当たりをとる対象。
> ということぐらい普通分かるだろ。
それはわかるが、敵同士は重なっている状態が許容されるかどうかが>>585からはわからない。
もし許容されないなら、敵とか壁とか分けて考える必要はなく、どちらも対等な単なるオブジェクトだから
用語をわざわざ分ける必要がない。
それを >>592 のように処理を分けているというのは、あんたが勝手に敵同士の交差は許容されると
>>585 から解釈したとしか思えない。要するに>>585を拡大解釈しているのはあんただろ。
605:並列さん ◆dPfetnROQg
09/03/05 15:20:29 2NL1rK1f
>>603
> 衝突解決が完了してからゲーム進行用の当たり判定を取ればよい、
「ゲーム進行用の当たり判定」なんて、誰も話題にしてなくて
幾何的に重なりをもつ状態をいかに防ぎつつ処理を並列化するかしか
問題にしてないと思うんだが。
あんたは日本語が不自由以前に頭が不自由みたいなんで、
俺はあんたの相手はしないことにする。
606:名前は開発中のものです。
09/03/05 15:41:13 eQbdbaUx
まとめ
ID:2NL1rK1f が正しい。
ID:rvhMBE/z は間違っている。
なぜならここはタスクシステム(^^;)スレだから。
今は並列処理(笑)をどこまでシステムを組み込めるか議論する場なので、(たとえば整数のみで実数計算するにはどうするのが一番いいかのような)
ID:rvhMBE/zのように並列処理(笑)を使わない最も効率的で扱いやすい無駄の無い設計はスレ違い。
みんなそれが最善手段と知ってる上で議論している。
(まぁ>>604の敵同士の交差がどうこうというのは並列処理(笑)時の話であって交差しようがしまいが別に処理させているID:rvhMBE/zの設計に対するツッコミ(ボケ?)は意味不明だが)
607:名前は開発中のものです。
09/03/05 15:51:13 rvhMBE/z
本当に文章が読めないんだな。どうしようもない。
>>585にはプレイヤーという主語が抜けてるんだよ。
それぐらい行間読めよな。
だから、
>敵同士は重なっている状態が許容されるかどうか
は関係ない。
さかのぼってみれば、>>567が発端で、これは、
>演算器いっぱいのベクトルプロセッサにやらせる場合
>移動フェーズと衝突検出フェーズと衝突応答フェーズに
>分割してそれぞれのフェーズでいっせーのーせでやる
に対してレスされている。
内容は、それぞれのフェーズの呼び出し順が固定だから、
衝突検出フェーズ内で拾う値は必ず補正前の値になってしまうので、
壁の向こうの敵に接触してしまうなどの不具合が出る、というもの。
つまり、古典的タスクシステム固有の問題で、実は並列化は関係がない。
608:名前は開発中のものです。
09/03/05 16:09:30 Ld676bZP
速度がでてないのに壁の向こうの敵にあたるって
壁薄くね?
609:並列さん ◆dPfetnROQg
09/03/05 16:37:36 2NL1rK1f
>>608
実際は、紙みたいな壁も存在して、単なる衝突判定でやってしまうと
次フレームでは通り抜けてることもある。
だから、まともな物理エンジンでは、そういうオブジェクトに対しては、
連続体として扱うようになっているのだが、この取り扱いは結構難しい。
これに関しては最近、いろいろ論文が発表されるなど、比較的hotなテーマだ。
610:名前は開発中のものです。
09/03/05 18:58:37 /7Ei5x6Q
君らってRogue Spear 知らないの?
URLリンク(www.youtube.com)
そんな古臭い話が最近の論文なんて信じられないが
論文あるならソースだしてくれよ
多分読めないが
話変わって >>2 のタスクシステムのソースって
慣れてないと難しいね
拡張も慣れが必要
ちょっと自分流の方が早い気がしてきた
611:ID:EEKBitmg
09/03/05 19:12:57 CwokJJKn
このスレは直列番長の>>2をボコるスレだろ
612:ID:EEKBitmg
09/03/05 19:50:12 CwokJJKn
>>607
>つまり、古典的タスクシステム固有の問題で
なんでそうなるんだよ
613:ID:EEKBitmg
09/03/05 20:33:20 CwokJJKn
>>567はcontinuous collision detectionの話がしたいのか?
壁とか言ってるから違うだろ。隣部屋同士の誤判定の話くさいんだけど
空間分割された隣部屋同士なら『ドア(窓)を経由しない限り当たらない』
ドア(窓)を経由して侵入してくる疑いがある奴は移動フェーズの時点で
バレてんだから、移動フェーズが終わった時点で同期的処理かませれば
いいだけだろ。バカくせ
614:ID:EEKBitmg
09/03/05 20:40:46 CwokJJKn
ドア(窓)を経由しないでポータルの外を飛び出るかもとか
そんなクズシステムの話を持ち出す時点で駄目だ
タスクバカ=>>2信者=直列バカはやっぱりバカだ
615:名前は開発中のものです。
09/03/05 20:52:25 LpIMNDbi
銃弾は壁も突き抜けるぜ!
616:ID:EEKBitmg
09/03/05 20:54:34 CwokJJKn
そうか。>>567は銃弾の話をしてるのか。そうなのか?
そういや壁抜きでぶっ殺したら升使ってるとか言われたな
これだからnoobは困る
617:名前は開発中のものです。
09/03/05 21:49:16 /7Ei5x6Q
>>616
そういうツールありますから
あなたの方がnoobですよ
618:ID:EEKBitmg
09/03/05 21:51:32 CwokJJKn
あー、わかったぞ
並列君は銃弾も人も同じエンティティとして平等に扱うのか
マジで狂ってるな。どんだけ無駄なことすりゃ気が済むんだよ
619:名前は開発中のものです。
09/03/05 21:54:16 eQbdbaUx
>>618
だから効率を求めてるんじゃなくて、並列でどうやって対処するか議論してるんだってば
620:ID:EEKBitmg
09/03/05 21:57:28 CwokJJKn
>>619
は?誰だよお前。名無しに用はねーんだよ
効率を度外視した糞システムなんてみんな糞だ
お前らタスクバカはそうやって何でもツクールを目指すバカだから
並列処理も効率度外視とかウンコくさい話をしたがるんだろ
バカは氏ね。思想レベルで詰んでる
621:名前は開発中のものです。
09/03/05 22:03:48 okJUxEhs
≡≡≡≡≡≡.
日 ▽ Ⅱ 日 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
≡≡≡≡≡≡ | IDさん今日は荒れてるなあ。
Ⅲ ∩ [] 。〇 \____________
____ ∧∧゚______
□ ( )
―― | ヽ―――
(____)~
━┳━ ━┳━ ━┳━
 ̄┻  ̄ ̄ ̄┻ ̄ ̄ ̄ ┻ ̄ ̄
622:ID:EEKBitmg
09/03/05 22:07:27 CwokJJKn
>>2が時代錯誤的な直列処理してっからブッ叩かれ、それを気にして
カッとなって、今度は極度に逆方向にふれて究極の並列コードを
目指すし始めた一部の先進次世代タスクバカ。>>510が代表だな
お前らタスクバカはさ、いい加減『ナニを作るのか』具体的に書けよ
何でもツクール目指すから『ナニを作るのか』書けません、だとか
ミラクルドリーマーみたいな事をほざくなよ
623:ID:EEKBitmg
09/03/05 22:19:07 CwokJJKn
>>621
俺、一応未成年だからお酒でそういう大人っぽいお店にいって
酩酊してウサ晴らすとかそういうことできないんだよね
これは芸風だから。昨日の並列君のお前らみんなバカ宣言
に対する報復である
624:ID:EEKBitmg
09/03/05 22:20:46 CwokJJKn
×お酒でそういう大人っぽいお店にいって酩酊して
○そういう大人っぽいお店にいってお酒で酩酊して
625:561
09/03/06 00:00:33 4YMxwutE
惚れた
626:名前は開発中のものです。
09/03/06 07:47:43 +3ldVLU9
>>622
そんなの無理だろ
タスク信者は動いてるプログラムにタスクウィルスを入れて
自分しかメンテできないようにして、自分の居場所を確保する
犬の小便的行動が本来の目的なんだから
627:ID:EEKBitmg
09/03/06 10:06:54 xP4A6jxv
いやー、昨日も面白い池沼がいて楽しかったわ
これだからこのスレはやめられないw
628:名前は開発中のものです。
09/03/06 13:01:17 FjTUznzx
銃弾の事は外野の俺がネタで言ってみただけだお…><
629:名前は開発中のものです。
09/03/06 14:33:08 YCUPWfAP
>>625
>427
>>626
そのくらいで地位を守れるなら失うよりはずっとマシだと真剣に思う、この不況。無職を叩く側から叩かれる側になるなんてやだもん。
630:名前は開発中のものです。
09/03/06 18:02:43 +3ldVLU9
ついにタスク信者自身が自分がクソを入れてることを認めたか
631:並列さん ◆dPfetnROQg
09/03/06 18:18:57 oTJ018DT
なんじゃそりゃ
632:名前は開発中のものです。
09/03/06 19:15:57 oLiuTYVi
>>622
タスクシステムが直列処理だとは思わんが。
どっちかっていうと、並列かと。
633:ID:EEKBitmg ◆HSP4mee/SU
09/03/06 23:46:34 aRzhzssB
>>627
ちょっとー。何なのおまえ誰なのおまえそこへ直れよおまえ!このイジメっ子ザザ虫!
平日の朝っぱら10時から暇そうに2ちゃんで厨のIDコテ使って何ふんぞり返ってるの?
イイ歳した大人が虎の威ならぬ厨の威を借りて一段高くなれるの?低くならないの?恥ずかしくない?
お前、今まで俺のことをHSPしか使えない基地外とか繰り返し叫んでたウンコ君でしょ?
気になるあの子が振り向いてくれないからって、あの子の目の前であの子の名札つきの
体操服を着てあの子のピアニカをチュアパチュパしゃぶりながらあの子のリコーダーに
ポークビッツを差し込んで教室で待ち構えて本人登場したらポークビッツが健気に膨張
圧迫されて抜けなくなって保健室に運ばれちゃう変態、超ド変態の子供時代を繰り返すの?
タスクバカのことをバカバカエンガチョって指差してきたけど流石にトリップ無しIDコテ厨を
騙るほど堕ちちゃいないだろうと信用してたのに買いかぶりだったみたい。もう大嫌い
634:並列さん ◆dPfetnROQg
09/03/06 23:55:00 oTJ018DT
>>633
>627は偽物だったのか・・。まあ、もとより俺には、本物が誰なのかよくわからないのだが。
>633を見る限り、なんか内容は支離滅裂だが、それでもあんたの日本語は他の奴よりは
断然読みやすいのでまだ許せる。
日本語の不自由な奴は、ゲームなんか作ってる場合じゃなくて、
もっと先に勉強すべきことがあるだろ、とか思うんだけどな。
635:ID:EEKBitmg ◆HSP4mee/SU
09/03/06 23:56:33 aRzhzssB
>>632
正確には並行処理じゃないの?
636:ID:EEKBitmg ◆HSP4mee/SU
09/03/06 23:59:28 aRzhzssB
寮に帰って2ちゃん見てワナワナプルプルしながら顔真っ赤に怒ってるから
支離滅裂なんだ!ちなみに昨日の書き込みには大変な矛盾があるので
訂正したかったが、>>627は俺らしいから彼にやらせてみようと思う
637:名前は開発中のものです。
09/03/07 00:46:01 ZZNOCL1s
>>635
優先順位がつくばあいもあるから正確には並列とは言えないだろうな。
638:並列さん ◆dPfetnROQg
09/03/07 00:55:26 cewi3IDn
>>637
その理屈はおかしい。
マルチスレッドのプログラミングでもセマフォで他のスレッド待ったり普通にするじゃん。
処理に順序があろうが無かろうが、並列なものは並列だ。
>>635が並行と言ってるのは、タスクを実行しているスレッド(プロセス)が通例、
1つだけだという理由からだろう。
639:名前は開発中のものです。
09/03/07 01:06:43 ZZNOCL1s
>処理に順序があろうが無かろうが、並列なものは並列だ。
並列さんの言ってることは意味が分からん。
処理に順序があれば、同時に実行できないのだから、並列でないだろ。
マルチスレッド≠並列。
煽り専門と名のってたが、嘘ばかりを書き込んでスレの機能を麻痺させる気?
名前変えたら?
640:並列さん ◆dPfetnROQg
09/03/07 01:17:59 cewi3IDn
>>639
> マルチスレッド≠並列
言葉の定義の問題だから、まあどうでもいいが、まあ普通は
マルチスレッドで実行されている以上、並列だし、あるスレッドが他のスレッドを
待っていてスループットが悪かろうが、並列なものは並列。
処理順序が厳密に定められていて、まったく逐次実行しか出来ないなら、
シングルスレッドと同じか、それ以下のパフォーマンスしか出ないけどな。
実際はゲームのタスクはそこまで処理順序に関しては制約が厳しくないので
いくらでも並列化できる。
641:名前は開発中のものです。
09/03/07 01:37:59 ZZNOCL1s
>マルチスレッドで実行されている以上、並列だし、
並列ではない。並列な部分もあるってだけ。
今は、「正確には並行処理じゃないの?」と問われていたわけで、
純粋に並列でないなら、正確には並列とは言えない。
だいたい、マルチスレッド云々は実装レベルでの話しだし。
タスクシステムがアーキテクチャ的に並列処理かどうかとは関係ない。
642:名前は開発中のものです。
09/03/07 01:42:09 ZZNOCL1s
コーヒー牛乳は牛乳か→YES
コーヒー牛乳は正確には牛乳か→NO
タスクシステムは並列的か?→YES
タスクシステムは正確には並列か?→NO
643:並列さん ◆dPfetnROQg
09/03/07 01:58:35 cewi3IDn
>>641
> 今は、「正確には並行処理じゃないの?」と問われていたわけで、
> 純粋に並列でないなら、正確には並列とは言えない。
この文章、意味不明だ。この文章、俺の解釈では↓こうだ。
今は、「正確には並行処理じゃないの?」と問われている。
スループットが1以下の並列実行なんて並列実行には含まれないので
「正確には並列」とは言えないので、単なる「並行処理」と見なすべきだから、
この「正確には並行処理じゃないの?」は正しい。
もし、そういう意味で書いているなら、俺は別に反対意見は唱えていない。
しかしそれなら>>637の書き方が悪い。
「優先順位がつくばあいもあるから正確には並列とは言えない」
だと、「優先順位がときどき偶発的について、そのときに限り並列性が落ちるから
並列とは言えない」と読める。だから俺は>>638のように反論した。
>>637は、正しくは
「優先順位がつく場合、並列化が難しく、並列度が極端に低下して、単一スレッドで実行
しているのと変わらないから、並列と呼ぶべきではない」と言うべきだっただろう。
しかし、俺はそうは思わない。
処理に優先順位がついていようが並列度を上げることは十分可能だからだ。
644:名前は開発中のものです。
09/03/07 02:03:29 LbywpZ2h
コーヒー牛乳は牛乳か→NO
645:名前は開発中のものです。
09/03/07 02:08:20 cMprZFoi
>>643
見苦しいです
646:並列さん ◆dPfetnROQg
09/03/07 02:10:52 cewi3IDn
>>645
見苦しいか?ふむ。
それなら、日本語の不自由そうな奴に絡むのはもうやめるわ。疲れるだけだ。
647:名前は開発中のものです。
09/03/07 02:23:08 ZZNOCL1s
>「優先順位がつくばあいもあるから正確には並列とは言えない」
>だと、「優先順位がときどき偶発的について、そのときに限り並列性が落ちるから
>並列とは言えない」と読める。
優先順位がときどき偶発的について、そのときに限り並列性が落ちることがあるから、
正確には並列とは言えない、であってるよ。
タスクシステムは正確には並列か?という命題に対して、
タスクに優先順位が付く場合を判例に挙げたまで。
処理に優先順位が付く場合、理論的にピュアな並列処理とは言えないからな。
完全な並列性とは、なにをどの順で実行しても構わない場合のみ。
648:名前は開発中のものです。
09/03/07 02:47:03 ZZNOCL1s
>それなら、日本語の不自由そうな奴に絡むのはもうやめるわ。疲れるだけだ。
自分がまともに日本語を扱えないくせに。
>>643とか、これ日本語ですか?
Q:タスクシステムは正確には並列か?
A:タスクの処理の優先順位をサポートするタスクシステムの場合には、
タスクの処理に順序が出来るので、この場合は正確には並列とは言えない。
たったこれだけのことが何で分からないのか。
彼はこの問題を実装レベルの並列度の話に持ち込もうとするが、
そもそも、すべてのタスクを同時に実行できるハードが存在しない現状で、
実装レベルでの並列性をもってして、
「タスクシステムが正確には並列かどうか」を判断するのはナンセンス。
なぜならタスクシステム自体による制限よりも、
ハードウェアによる制限の方が先に現れるから。
649:並列さん ◆dPfetnROQg
09/03/07 02:49:57 cewi3IDn
>>647
> タスクシステムは正確には並列か?という命題に対して、
だが、あんたは、>>635を誤解している。
635は
> 正確には並行処理じゃないの?
と書いてあって、並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
635を書いた本人は、「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので
「並行処理と呼ぶほうが正しいのではないか」と言ってるわけ。
それなのにそれに対する受け答えとして、あんたは、>637で「スループットがN倍になっていなければ
pureな並列とは呼べないので並行ではない」と言っている。あんたが「並列度1.0(そんなもの現実的に
存在しないんだが)ではない並列」を「並列」とみなさないのはあんたの勝手だが、635に対する返答として
637は、おかしい。
650:並列さん ◆dPfetnROQg
09/03/07 02:52:08 cewi3IDn
>>648
> Q:タスクシステムは正確には並列か?
> A:タスクの処理の優先順位をサポートするタスクシステムの場合には、
> タスクの処理に順序が出来るので、この場合は正確には並列とは言えない。
> たったこれだけのことが何で分からないのか。
Qが間違っている。誰もそんなQをしていない。詳しくは>>649
651:並列さん ◆dPfetnROQg
09/03/07 03:03:47 cewi3IDn
俺、もう寝る。
どうか、ID:EEKBitmg ◆HSP4mee/SU は、 ID:ZZNOCL1sの相手をしてやって欲しい。
ID:EEKBitmg ◆HSP4mee/SU の書く内容は、技術的に間違ってることも多々あるし、態度も生意気だけど、
日本語は意味明瞭だし、技術用語の使い方も比較的正しいので俺としてはかなり好感が持てる。
まあ、勉強熱心なんだろうな・・。
652:名前は開発中のものです。
09/03/07 10:03:00 8u/3vapK
なんか良く分からんが、お前らの並列と並行の定義はこれで合ってるの?
URLリンク(docs.sun.com)
653:名前は開発中のものです。
09/03/07 10:21:13 ZZNOCL1s
まず並行でないなら並列化できないわけで。
逆に、並列化不可能なら、並行でない。
というか、むしろ今まで並行の意で並列と言っていたのだが。
>スループットがN倍になっていなければ
>pureな並列とは呼べないので並行ではない
は正しい。
順序がある処理は並行ではない。
654:名前は開発中のものです。
09/03/07 10:22:50 ZZNOCL1s
URLリンク(journal.mycom.co.jp)
俺はこっちかな。
655:名前は開発中のものです。
09/03/07 10:43:57 8u/3vapK
>>652 >>654
同じだとおもうけどw
>順序がある処理は並行ではない。
いや、順序があっても並行は並行だろう。
ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、
仰々しく「並行」だの「並列」だの言うな、と主張しているように見えるなあ。
ID:ZZNOCL1sは実践的な話をしていて、
並列さんは字面通りの一般的な並列の定義に沿って話しているだけに見える。
というのは深夜の時点で並列さんも悟っているように見える。
656:名前は開発中のものです。
09/03/07 10:53:23 ZZNOCL1s
>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
>「タスクシステムの構造ではスループットは1倍を絶対に超えない」ので
並行化によって待ち時間が減ったりするので、スループットは向上するが、
1倍の基準点が不明。
657:並列さん ◆dPfetnROQg
09/03/07 10:57:38 cewi3IDn
>>653
> というか、むしろ今まで並行の意で並列と言っていたのだが。
あんたは、全然話にもならない。
専門用語を勝手に本来と違う意味で使っておいて
相手に日本語が読めないだの何だの言うのは本当、勘弁して欲しい。
658:名前は開発中のものです。
09/03/07 11:06:08 ZZNOCL1s
>いや、順序があっても並行は並行だろう。
順序がある処理は並行化できないよ。
例えば、処理Aと処理Bがあって、
BはAの後でないと実行不可だとする。
この場合、AとBを並行に処理することは出来ない。
659:名前は開発中のものです。
09/03/07 11:06:20 cMprZFoi
>>655
> ID:ZZNOCL1sは効率的でない並行/並列は役に立たないんだから、
そんな話じゃないでしょうに…
あと
>並列さん
>悟っている
なんか気持ち悪いです
660:並列さん ◆dPfetnROQg
09/03/07 11:13:36 cewi3IDn
>>658
> 順序がある処理は並行化できないよ。
それぞれのタスクを逐次処理しようが、それは並行処理って言うんだが。
ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。
本当、専門用語を勝手に意味を作り替えんなと言いたい。
>>659
気持ち悪いのはお前。お前はいらない子だから死んでくれ。
661:名前は開発中のものです。
09/03/07 11:17:08 ZZNOCL1s
>>657
お前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。
>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
↑何に対する1倍かはしらないがな。
662:並列さん ◆dPfetnROQg
09/03/07 11:25:40 cewi3IDn
>>661
>>並行ということはconcurrentなのだから、スループットは1倍を絶対に超えない。
>↑何に対する1倍かはしらないがな。
そこが読めてないのお前だけだろう。
「concurrentな処理は、Nコアであっても、単一コアで実行したときの1倍以上のスループットが出ない」の意味。
663:並列さん ◆dPfetnROQg
09/03/07 11:31:14 cewi3IDn
>>661
> お前も、並列処理は並行処理の部分集合だということをおさえられていなかっただろ。
どこをどうやればそう読めるのか俺は知りたい。
並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が
単一か複数かの差のみ。そんなことは誰でもわかっている。
その用語を勝手に違う意味に使ってたのはあんただろ。
俺には、頭がおかしいとしか思えない。
その頭のおかしいあんたを唯一擁護しているのは ID:cMprZFoi だけ。
こいつは、あんたが書き込みした直後にしか出てこない。どうせこれもあんただろ。
664:名前は開発中のものです。
09/03/07 11:36:14 92TsYx3X
カプコンのMTフレームワークみたいなマルチコアでのパフォーマンスに特化した設計の
フレームワークなら並列云々の話になると思うが…
あれもタスク進化系の一種なのか?ちょっとタスクって守備範囲広すぎ。
あれはコア数がパフォーマンスに直結する造りだね。
順序の依存性のある処理と無い処理をグループ分けして、並列で問題ないケースは複数コアで同時計算。
順序の依存性がある処理との同期スケジューリングをフレームワークが管理って感じで。
ゲーム中には依存性のある処理と無い処理があるから、まぁ複数コアを有効に使おうと思うと
こんな感じな設計に行き着くんだろうね。
665:並列さん ◆dPfetnROQg
09/03/07 11:40:55 cewi3IDn
ID:EEKBitmg ◆HSP4mee/SUはまだ良かった。
HSP使いのプログラミング経験の浅い世間知らずのクルクルパーだが、
そのわりには用語の使い方はまともだし、勉強もよくしていると思っていた。
俺は専門用語を勝手に俺解釈の用語とすり替えて話す奴とは
面倒くさいので話をしたくない。
このスレはどうせみんな常駐してるようなもんなんだから、みんなコテハン
にすればいい。それそれぞれが嫌な奴をNGリストに入れておけばいいと思うんだがな。
そんなわけで ID:ZZNOCL1sは俺をNGリストに入れておいてくれ。
お前と話をするのは疲れる。
666:名前は開発中のものです。
09/03/07 11:49:53 ZZNOCL1s
>それぞれのタスクを逐次処理しようが、それは並行処理って言うんだが。
いや、単純に考えて、処理に依存関係があると、並行処理できないだろ。
実際OSなんかは各スレッド間に依存関係が無いものと見なして並行処理しているわけで。
667:名前は開発中のものです。
09/03/07 11:52:30 8u/3vapK
>>658
それが実質直列だってことは分かるんだけど。
とりあえず、俺が何を考えているのかと言うと、
動き方が実質直列であっても、それぞれ別のスタック領域を持ってる点が違うだろ?
別々のコンテキストを持っている。
その辺を区別するのに「実行効率ゼロの並行」も俺は並行と呼んでただの直列と区別していた。
要するに俺はコアが何個でそのPCがどこ指してるのって部分だけで並行か並列かって言ってた。
んで、一般的定義はどうなのと思ってググった先を見てみると、
コンテキストがどうのというのは論点じゃ無いような気がしてきた。
もうちょい調べてみるわ。
668:並列さん ◆dPfetnROQg
09/03/07 12:05:02 cewi3IDn
>>666
> いや、単純に考えて、処理に依存関係があると、並行処理できないだろ。
あんたの「並行処理」について持ってる勝手なイメージは知らんが、
優先順位がついていてそれぞれのタスクを逐次的に処理していく場合も
(そのタスクが終了後に消滅しないなら)「並行処理」と呼ぶ。
URLリンク(en.wikipedia.org)
> Concurrent programs can be executed sequentially on a single processor
> by interleaving the execution steps of each computational process
「並行プログラムは、それぞれの計算プロセスを実行箇所をインターリーブしながら
シングルプロセッサによって逐次的に実行される」
計算プロセス間の依存性とか、効率とかそんなことは並行処理の定義とは
何ら関係がない。
・実行箇所をインターリーブしながら(タスクからリターンしてもタスクは
通例存在していて)
・シングルプロセッサによって(ある瞬間を見たときにつねにひとつの
プロセッサしかタスクを実行していない)
この二つを満たしているなら、並行処理。
669:名前は開発中のものです。
09/03/07 12:09:24 ZZNOCL1s
>ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。
どこにそんな定義があるんだ?
670:並列さん ◆dPfetnROQg
09/03/07 12:10:23 cewi3IDn
>>667
何を言いたいのかよくわからないが、>>668の説明は理解できる?
671:並列さん ◆dPfetnROQg
09/03/07 12:11:16 cewi3IDn
>>669
>>668
672:名前は開発中のものです。
09/03/07 12:26:24 ZZNOCL1s
並行計算
URLリンク(ja.wikipedia.org)
>タスク群は1つのプロセッサ上で動作する場合、複数プロセッサ上で動作する場合、
>ネットワークを介した分散システムで動作する場合が考えられる。
663 名前:並列さん ◆dPfetnROQg [sage] 投稿日:2009/03/07(土) 11:31:14 ID:cewi3IDn
並行処理と並列処理との差はある瞬間に、タスクを実行しているスレッド(プロセス)が
単一か複数かの差のみ。そんなことは誰でもわかっている。
Wikipediaの人は分かってないみたいですよ。
注意してきたらどうなんですかね。
673:名前は開発中のものです。
09/03/07 12:42:43 ZZNOCL1s
>>668
>計算プロセス間の依存性とか、効率とかそんなことは並行処理の定義とは
>何ら関係がない。
だから、並行処理では処理の依存性は考えない=依存性は扱わない=依存性は扱えない。
扱わないのは扱えないから扱わないの。
実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。
各スレッドを並行と見なして実行する。
処理に依存性がある場合はプログラマが自前で同期オブジェクトとかつかってシコシコやる。
一方、タスクシステムでは処理の依存を優先順位という形で明示的に扱うのが一般的。
各タスクを並行とみなしているわけではない。
674:名前は開発中のものです。
09/03/07 12:44:25 92TsYx3X
いつのまにか
並行・並列処理の単語の定義のスレになってるな。
自然言語の単語の定義なんてどこまでいっても曖昧なのに…
自分の言う「臭い」と他人の言う「臭い」が同じという保障なんて誰にも出来んよ
確かなのは人工言語で書かれたソースのみ。
675:並列さん ◆dPfetnROQg
09/03/07 12:44:25 cewi3IDn
>>672
ざっと見たけど日本語のwikipediaのほうは、ひどいな。
これとか
> 並行性のための構造を備えた最も一般的な言語はJavaとC#である。
なんでだよと突っ込みを入れたくなる。
これ書いてる奴は、thread生成が出来るからJavaとC#を入れてるんだろうけどひどいにもほどがある。
C#のyieldによるcontinuationは確かに並行スレッドなんだが、それならJavaを含めるのはおかしい。
日本語のwikipediaの「並行性」の項目もひどいな。なんだよこれ。
ちょっとwikipedia行って暴れてくるわ。
676:並列さん ◆dPfetnROQg
09/03/07 12:47:15 cewi3IDn
>>674
> 自然言語の単語の定義なんてどこまでいっても曖昧なのに…
専門用語は、限りなくstrictに定義されてるべき。
そうじゃなきゃ論文とか意味のないものになってしまう。
677:名前は開発中のものです。
09/03/07 12:50:58 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
09/03/07 12:52:11 cewi3IDn
>>673
> 実際のOSなんかでも、スレッド間の処理の依存性は扱わない。というか扱えない。
それはダウト。
実際のOSにはプロセスのpriorityがあって、それに従ってスケジューリングされる。
割り込みなんか特にそう。あるプロセスの実行が他プロセスの実行より優先されることは多々ある。
キーボードイベントが発生したら、その処理が優先される。そこには明確な実行順序がある。
そんな機能すらない、もっとprimitiveなOSの話をしているなら、まあそれはそれでいいけど
「実際のOS」と書かれるとWindowsやらLinuxやらを想定しているのかと俺は思ってしまう。
679:名前は開発中のものです。
09/03/07 13:02:13 ZZNOCL1s
>>675
お前がひどいという日本語版の、
「並行性のための構造を備えた最も一般的な言語はJavaとC#である。」
は英語版のページにある
「Today, the most commonly used programming languages that
have specific constructs for concurrency are Java and C#. 」
の訳なわけだが。
そしてその英語版のページを引用して、
「これが並行処理の定義だ!」と言っていたのがお前なのだが。
さらにその引用も自分の都合のいいところだけを引用するという正確の悪さ。
「~又は~」と書いてあるのに、「又は」以降をバッサリカット。
680:名前は開発中のものです。
09/03/07 13:05:44 ZZNOCL1s
>>678
プロセスのプライオリティーは必ずしも守られるわけではない。
あれは、CPUリソースに対する優先順位であって、処理に対する依存関係を表すものではない。
現にマルチプロセス環境だと、プライオリティーの高いものと低いものが同時に実行される。
681:並列さん ◆dPfetnROQg
09/03/07 13:05:45 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:名前は開発中のものです。
09/03/07 13:09:34 Fbn5zOAB
並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。
んじゃないの?
独立した概念(関連はあるけど)なんだから、>>660の
>ある瞬間に一つしか実行していなければ並行。それがconcurrentの定義。
はおかしいと思う。
concurrentに作っておけば、parallelに実行しやすいんだし。
683:並列さん ◆dPfetnROQg
09/03/07 13:17:17 cewi3IDn
>>680
うむ、それは正しい。
>>682
ああ、そうか。そういう意味では、660はおかしいし、書き方が悪いな。
これについては反省。すまんかった。> ID:ZZNOCL1s
684:名前は開発中のものです。
09/03/07 13:19:11 ZZNOCL1s
用語の定義をめぐって、wikipediaと格闘するような人とは議論したくない。
685:名前は開発中のものです。
09/03/07 13:20:00 ZZNOCL1s
お互い疲れたと見える
686:並列さん ◆dPfetnROQg
09/03/07 13:24:11 cewi3IDn
>>682
> 並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
> 並列(parallel)は、複数の計算を物理的に同時に実行できることを表す。
この定義に基づいて古典的なタスクシステムのタスクについて語ると
・古典的なタスクシステムのタスクは、「並行」。
・実行順序に厳しい制約があるとみなすなら、「並列」化はできない。
ところが実際のゲームでは、タスク間に依存関係がない部分が結構あるので
部分的に「並列」化できる。
この「並列」化によって、コア数N×0.7ぐらいのパフォーマンスは出る。
で、この「並列」化を古典的タスクシステムを進化(?)させて書けるようにすれば
いいということだな。
687:並列さん ◆dPfetnROQg
09/03/07 13:24:58 cewi3IDn
>>684
俺のことは、NGリストに入れておいてくれ。
最初に682のように書いてもらえれば、俺はすぐに理解できたのだが。
688:名前は開発中のものです。
09/03/07 14:32:04 NOayWFQU
これにて一件落着
689:名前は開発中のものです。
09/03/07 14:39:01 ZZNOCL1s
おれは、>>682と同じ意見ではない。
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
必要だと考えている。
並行性
URLリンク(ja.wikipedia.org)
だから、
1.並行でなければ並列化できない。
2.タクスの処理順位を考慮するようなタスクシステムは、すべてのタスクが互いに並行というわけではない。
3.ゆえに、タスクシステムを並列化するならば、並行なタスク同士を抽出する必要がある。
と考え、
さらに、タクスの処理順位を考慮するようなタスクシステムは「並行でない」と考える。
690:名前は開発中のものです。
09/03/07 15:29:42 8u/3vapK
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
俺もこう思ってた。
んでそうハッキリ書いてある資料を探してるんだけど、見つからない。
>並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、必要
次からこっちの定義で話すわ。
691:名前は開発中のものです。
09/03/07 15:37:28 92TsYx3X
>>689
>さらに、タクスの処理順位を考慮するようなタスクシステムは「並行でない」と考える。
MTフレームワークは処理順の依存の有無でタスク分けてマルチコアで同時に複数タスク動かしてるけど
これは処理順位を考慮するシステムだから「並行でない」のかな?
692:名前は開発中のものです。
09/03/07 15:42:35 ZZNOCL1s
だいたいちょっと考えれば分かることだが、並行の定義が、
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
だと、いわゆるオブジェクトと呼ばれるものは全部並行ってことになっちまうだろ。
コンテキストが同時に存在できないオブジェクトなんて、まあ無いからな。
言葉としての意味が無くなる。
693:名前は開発中のものです。
09/03/07 15:56:08 ZZNOCL1s
>>691
もしはじめから並行なら、MTフレームワーク自体いらないでしょ。
694:名前は開発中のものです。
09/03/07 16:00:29 92TsYx3X
>>693
>もしはじめから並行なら
どこにそんな前提が?
695:名前は開発中のものです。
09/03/07 16:36:27 E0xOAlNR
>>689
>これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの?
>並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
と同じ事を言ってるだけのような。
>1.並行でなければ並列化できない。
は違うと思う。
並行でない命令列も、依存関係が無ければ並列化できる。
現にCPUの中でシリアルセマンティクスを満たしつつ並列実行が普通におこなわれている。
そういう命令列は本質的に並行だった?違うでしょ?スーパースカラで並列に実行される命令は、
異なるコンテクストを持ってるわけじゃないんだから。
あと細かいことだけど、順位と順序は全然意味違うんだから、
ちゃんと使い分けてくれないと読み辛いよ。
696:名前は開発中のものです。
09/03/07 18:22:05 UcXZ5wF9
でも依存関係があるかないかなんて並列で実行してんのにどうやってわかんだろね
くる値によって依存関係があるかもわからんしないかもわからん
ごった煮だとそういうソースになってしまうな
697:名前は開発中のものです。
09/03/07 18:30:21 rbzzI5lu
ID:UcXZ5wF9
↑(・∀・)↑
ウンコちゃんインしたお
698:名前は開発中のものです。
09/03/08 18:34:25 ryll+mdy
>>695
> >これに付け加えて、並行の条件には、複数のコンテクストが論理的に同時に実行可能であることも、
> ある計算の、ある時点における実行状態を表現したものを、コンテクストと呼ぶんじゃないの?
> >並行(concurrent)は、複数のコンテクストが論理的に同時に存在できることを表す。
> と同じ事を言ってるだけのような。
例えば、コンテクストが共有されている場合などでは、
コンテクストは同時に存在できるが、同時に実行はできない。
具体的には、オブジェクトAがオブジェクトBの参照を内部に保持している場合など。
オブジェクトAはオブジェクトBとコンテキストを共有しているということになり、
オブジェクトAとオブジェクトBは同時に存在できるが、同時に実行は出来ない。
>並行でない命令列も、依存関係が無ければ並列化できる。
並行でない命令列の中でも、依存関係が無い並行な部分だけは並列化できる。
並列化とは、並行に処理することだから、並行な処理しか並列化できない。
自動並列化
URLリンク(ja.wikipedia.org)
>プロセッサで「並行」に実行されるようにする。
スーパースカラ
URLリンク(ja.wikipedia.org)
>プロセッサ内の冗長な実行ユニットを使って「並行」して処理される。
699:名前は開発中のものです。
09/03/08 18:39:37 ryll+mdy
>>694
ヒント:背理法
700:698
09/03/08 19:26:02 ryll+mdy
訂正するけど、
コンテクストが共有されていても、read-onlyな場合は並列化可能だね。
書き込みするとアウトだけど。
701:名前は開発中のものです。
09/03/08 19:27:58 0j+yjPij
>>698
なんか色々と変だよ。
>例えば、コンテクストが共有されている場合などでは、
>コンテクストは同時に存在できるが、同時に実行はできない。
共有されているのに同時に存在するってどういう意味?
コンテクストはいくつあるの?
>具体的には、オブジェクトAが(以下この段落略)
オブジェクトとコンテクストがごっちゃになってる。
オブジェクトAがオブジェクトBへの参照を内部に保持していても、
コンテクストがいくつあるのかという問題とは関係無いよ。
オブジェクトAとBを同時に実行はできない?オブジェクトを実行するってどういう意味?
この辺は、>>692の勘違いと同じ匂いがする。
てか>>692さんなのかな。
702:名前は開発中のものです。
09/03/08 19:30:14 0j+yjPij
んが。改行多過ぎ言われた。
701の続き。
>並行でない命令列の中でも、依存関係が無い並行な部分だけは並列化できる。
「依存関係が無い部分」を「並行な部分」とは呼ばないよ。
いや呼ぶのは自由だけど、少なくとも聞いたことないよ。
いや聞いたことないだけかもしれないけど。
>並列化とは、並行に処理すること(以下略)
×。
もうちょっと詳しく言うと・・・
「並列化とは、並行に処理すること」
という言葉それだけを見るなら、○。
でも、そこに出てくる「並行」という言葉は、並列という言葉を説明するための
「(同時)並行」という意味であって、このスレでここまで長々と議論してきた
並行(concurrent)とは意味が違うよ。
(「並列」を説明するのに「並列」と言っても仕方が無いからね)
二つ挙げてくれたwikipediaの説明に出てくる「並行」も、同じように「並列」を
説明するための「並行」であって、ここに引っ張り出してきても意味が無いよ。
703:名前は開発中のものです。
09/03/09 12:41:05 2btSBxrR
大変だ!タスク信者が息してないぞ!
704:名前は開発中のものです。
09/03/09 13:31:41 +h98nuCN
つまらん煽りイラネ
705:名前は開発中のものです。
09/03/09 14:16:42 EugqMYhT
本人は面白いと思って書いてんだろ
706:ID:EEKBitmg ◆HSP4mee/SU
09/03/10 01:19:32 W7jNDZ1N
厨は『並行処理』という言葉を使ったけど、ノートを読み返したら『並行動作』となっていた。
=『擬似並列動作』のことを云いたかったの!微妙に書き間違えてた?と書こうと思ったら
>>637-以降で怖いおじちゃん達が深夜の泥沼バトルが展開されてあれよあれよと言う間に
みんな深淵の彼方へ飛んでいってしまった。ニーチェの警告に耳を傾けない者はみんな
闇に飲まれちゃうんだ。恐ろしいことだ
707:ID:EEKBitmg ◆HSP4mee/SU
09/03/10 01:20:59 W7jNDZ1N
俺は元々>>2の話をしてて、これはどこをどうひっくり返しても逐次処理・直列処理してる。
ところが>>632のタスクシステムは直列処理ではなくどっちかっつーと『並列』らしい。
たぶん>>632の云うタスクシステムは>>2とは別物か、あるいは並列ではなくて
『擬似並列動作』とか『並行動作』のことをいってるのかなーとESPした。それが>>635
>>2の『システム(笑)』部分が提供するものは
・粗末な侵入式の連結リスト
・それを周期的にナメナメしてディスパッチするショボイ仕掛け
だけ。>>2はこの『システム』部分をユーザー定義の逐次処理・直列処理に使ってるけど
ユーザー定義の並行動作に使うこともできるっちゃできる
例えば組み込みシステムでは、異なる割り込みハンドラからの指示でスリープ状態から
復帰するタスクとかあるからね
708:ID:EEKBitmg ◆HSP4mee/SU
09/03/10 01:36:39 W7jNDZ1N
あるいは、敵をやっつけた時の爆発エフェクト。これの破片・パーティクルの一個一個を
タスクとして登録してるとする。(そんな無駄なことしたくないけど、する奴もいるだろう)
破片・パーティクルのタスクは他のタスクとの作用なんてないとする。ならばこれらは
確実に並行動作してる
逐次処理・直列処理で並列動作してる。だが並列動作じゃない
709:ID:EEKBitmg ◆HSP4mee/SU
09/03/10 01:37:17 W7jNDZ1N
>>708
×逐次処理・直列処理で並列動作してる。だが並列動作じゃない
○逐次処理・直列処理で並行動作してる。だが並列動作じゃない
710:ID:EEKBitmg ◆HSP4mee/SU
09/03/10 02:18:01 W7jNDZ1N
>>2のシステム(笑)はなんで並列動作できないの?
一本の連結リストにみんなチャンポンにしてぶち込んでる時点で
別スレッドで同時並行的に弄繰り回されるということを考えてないだろ
タスク間通信に必要な同期のメカニズムを提供していないのもそう
シングルスレッドで逐次処理するという前提だからバッサリ省いてる
次に、>>2のTCB(笑)とかいう構造体のプライオリティというパラメータは
priority-rankingではなくpriority-sequenceとして使われており、異様。
これは処理順序を表しており、この順序でソートして順次処理される
そういう前提でタスク(ジョブ)の内容を記述してる。順序が狂ったら動かない
711:名前は開発中のものです。
09/03/10 12:53:53 GPL7IZe+
>>707
>ユーザー定義の並行動作に使うこともできるっちゃできる
できるっちゃできる、じゃなくて、ゲームオブジェクトの並行動作を記述することが
そもそもタスクシステムの目的なんじゃないの?
オブジェクトごとのデータとコンテクストをひとまとめにして自律的な行動を
自然(←人によって感じ方は違うだろうけど)な形で書ける(気分になれるw)ことと、
オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること、
の2点を、素朴な形で実装したのがタスクシステムの良い点だったと思うんだけど。
>>710
>>>2のシステム(笑)はなんで並列動作できないの?
特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、
それらを並列動作させることはできるんじゃないの?
(そういう番号をプライオリティと呼ぶことの是非は別として)
別に誰も、全てのタスクを並列動作させることなんか最初から期待してないと思うけど。
かなり上の方に出てた自動的に並列動作させる云々の話も、そういうプライオリティの
タスクに限って、プロセッサ数に合わせて並列でディスパッチするような拡張も考えられる
のではないか、という話だったと理解してたんだけど。
712:名前は開発中のものです。
09/03/10 14:14:14 arIRXx6m
URLリンク(pc.watch.impress.co.jp)
> ゲームプログラム本体のコードは、OSのコードと同じように、
> 整数演算中心で小さな範囲での並列しかできず、
> 基本的には逐次実行しなければならないコードがほとんどだ。
これが古臭いタスクのことを指しているとは考えられないし
並列ネタはタスク関係無くね?
713:名前は開発中のものです。
09/03/10 17:38:59 DtkxsGym
マルチプロセッサでマルチスレッドしたいならそう拡張すればいいんとちゃう?
シングルプロセッサが前提の時代に書かれた物に難癖つけるのも大人げないと思う
ていうか俺は現在でもマルチスレッドなんてやりたくない
714:名前は開発中のものです。
09/03/10 18:22:37 9N7ATqdV
別にマルチスレッドなんて必要ならやりゃいいじゃん
裏でローディングしながらゲーム動かすなんて別に難しくもなんともねーし
ただ、ゲームオブジェクトにやる意味は無さそうだけどね
715:名前は開発中のものです。
09/03/10 18:42:31 +MsrlA3X
そういやフルにディスクアクセスしてても重たくなったりカクついたりしないのかね?
716:名前は開発中のものです。
09/03/10 19:16:57 9N7ATqdV
>>715
やってみりゃいいじゃん
717:名前は開発中のものです。
09/03/10 19:47:23 +MsrlA3X
>>716
やってみた
ガックガクになった
718:名前は開発中のものです。
09/03/10 20:01:50 9N7ATqdV
そうか市販のゲームは普通にできてるのに不思議だな
719:名前は開発中のものです。
09/03/10 21:27:13 LXtgug0h
裏でローディングなんてDMA時代からとっくにやってます。
720:名前は開発中のものです。
09/03/10 22:07:24 OHC3eltB
>715
普通非同期アクセスするだろ。
JK
721:名前は開発中のものです。
09/03/10 22:48:52 GPL7IZe+
>>711
>特定プライオリティがついているオブジェクト群は他との相互作用が無いと決めておいて、
は、オブジェクト群じゃなくてタスク群と書くべきだったね。
なんか混ざっちゃった。
>>715
自分も昔から気になってた。
ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、
消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。
それともDMAとかで消費されるバンド幅は、割と安定して予測できるもんなんだろうか。
その辺を実際にいじった経験が無いし、Web上でも情報を見た覚えが無いから分からないんだ・・・。
722:名前は開発中のものです。
09/03/10 23:19:25 DFTfic3i
>>721
> ゲーム機で、ディスク(に限らず)からのデータ転送を非同期にやったりすると、
> 消費されるメモリ(あるいはバス)バンド幅の変化が計算しづらくなったりしないのかな。
もちろん、なる。
だから RPG のように「どうしても間に合わなかったらフレーム描画をスキップしてもおk」な
ゲームでは使うが、対戦格闘とかだと避ける。
723:名前は開発中のものです。
09/03/10 23:58:04 OHC3eltB
フルにディスクアクセス行ったところで、光学ドライブからの転送量なんてたかが知れてるからな。
724:ID:EEKBitmg ◆HSP4mee/SU
09/03/11 00:28:43 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
09/03/11 00:38:10 xmrBPpjK
>>724
これだけ見ると協調的に並行動作させることが「できる」仕組みと分かる
でも、>>2で紹介されるこれの使い方のお手本、つまりタスクの中身を見ると
何か怪しげなことしてる。走査回数とメモリ消費をケチるためにプライオリティ
というものを使ってる。以前に出てた話だけど、something(t+Δt)を求めるために
参照する外部情報が狂ってる。上図の横方向の前後関係に依存させてしまってる
本来なら並行であるはずの関係を直列の関係にしてるというか、なんていうの?
並列化してリプレイ情報を食わせたら結果が変わってしまうでしょ
並行動作というかフェイク並行動作してるんだよね
726:ID:EEKBitmg ◆HSP4mee/SU
09/03/11 00:58:38 xmrBPpjK
>>711
>オブジェクトの生成破壊が多くてフラグメントを起こしがちなゲームにおいてデフラグを扱えること
これって何?GCしてるの?どういうタイミングで?
それってメモリアロケータの都合じゃないの?関係ねー気がする
727:ID:EEKBitmg ◆HSP4mee/SU
09/03/11 01:12:12 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
09/03/11 02:02:53 xmrBPpjK
起きた。なんか間違えた。まぁいいや。逐次処理って違うや。もういい
729:名前は開発中のものです。
09/03/11 02:51:56 QLymkmBo
>>724
>厨はそもそものタスクシステムなんて知らないから、そもそもの目的も知らない
えっとまず始めに確認したいんだけど、「厨」ってのはID:EEKBitmgさんのことでいいのかな?(違ってたらゴメン)
で、「そもそものタスクシステム」の話なんてしてないよ。知ってても知らなくてもどうでもいいよ。
でも「そもそもの目的」は>>2を見れば理解できるでしょ。どれもすごく丁寧で分かりやすい記事だし。
以降、改行箇所は適宜勝手に変更する。ごめん。
>>725
>走査回数とメモリ消費をケチるためにプライオリティというものを使ってる。
いや、走査回数とメモリ消費をケチるためにプライオリティを使ってるわけじゃないと思うんだけど・・・。
>以前に出てた話だけど、something(t+Δt)を求めるために
>参照する外部情報が狂ってる。上図の横方向の前後関係に依存させてしまってる
これはつまり、タスクAの処理結果を見てタスクBの処理をしないといけない場合、タスクシステムだと
AとBのどちらが先(>>724の図で言えば左)にくるのか分からないので困る、って意味かな?(違うかな?)
でもタスクシステムには、Aを必ずBより先に実行させる方法があるよね。それは分かってるよね?
で、タスクBがタスクAに依存してるのだとしたら、それはタスクBの問題(あるいは性質)であって、
タスクシステムの問題とは全く別の話だよ。
>並列化してリプレイ情報を食わせたら結果が変わってしまうでしょ
なんで突然、並列化の話が出てくるの? タスクシステムの目的は並行動作だよね。
これは>>710のおかしい点でもあるんだけど、>>2では最初から並列動作なんか考えてないんだから、
同期処理とかが組み込まれてないのは当たり前だよね。
>並行動作というかフェイク並行動作してるんだよね
並行とフェイク並行の違いって何なんだろう。なんか並行と並列の違いを理解してない匂いがする。
730:名前は開発中のものです。
09/03/11 02:53:04 QLymkmBo
続き。
>>726
>これって何?GCしてるの?どういうタイミングで?
え、ちょっと待って、>>2の話をしてるんだよね? 本当に>>2読んだ??
ID:EEKBitmgさんの言う>>2って、>>2のうちのどれのこと?
>>2を読んだのかどうかって話で思い出した。>>464の、この部分。
>『型システムを否定している。コンパイラによる最適化を阻害してる。自作ジャンプテーブルで条件分岐は
> 高速化されるという先人のチョイテク・豆知識を天下り式に真似ているのではないか。それは太古の簡素な
> CPUアーキテクチャに依存した公式に過ぎない。定理ではない』
断言してもいいけど、ID:EEKBitmgさんとこの助教授さんは>>2をちゃんと読んでないか、あるいは
頭のネジが足りてないよ。それとも助教授ってこんなもんなのか。知り合いにいないから知らんけど。
ところで課題レポートはちゃんと提出した?
>>727
>タスクシステムとか仰々しい名前の割りに、それが提供する機能を分析すると
ちっとも分析できてないよ・・・。
>↑みたいな、限りなくどうでもいいことしかしてないということがわかる
全く分かってないよ・・・。
731:名前は開発中のものです。
09/03/11 04:20:03 yoM2Y43z
HSPくんは厨房のくせになかなかどうして要点を押さえてるのう
若干正確さに欠ける点に目をつむって処理を端しょってたことに勘付いたか
732:名前は開発中のものです。
09/03/11 07:22:34 nhOwJy5w
まぁ、学生さんが理想を追い求めるのは悪いことじゃない。
ただ、現実はそれに立ちはだかると言うことは知っておいた方がいい。
733:名前は開発中のものです。
09/03/11 07:26:19 NK6nIuY5
タスクシステム完全に終わったな
734:名前は開発中のものです。
09/03/11 08:32:00 74bG+9We
タスクシステムのプレゼン動画
URLリンク(www.nicovideo.jp)
735:名前は開発中のものです。
09/03/11 13:15:27 wSuVQdvJ
ていうか細切れに順番に処理してくれるシステムなら何でもいいんじゃね?
適当にクラス作ってリストにして順番に実行
内部では各自カウンタとステート持って勝手にやる、死んだり生きたりはおかしなことにならないようにシステムでええ感じに処理してねー
とまぁ簡単なものならこんなのでいいじゃろ
複雑なのはしらん
736:名前は開発中のものです。
09/03/12 07:22:55 7byKm2pB
誰もそんな話してないし
737:名前は開発中のものです。
09/03/12 11:49:54 Rx7RnDpA
しろよ
738:ID:EEKBitmg ◆HSP4mee/SU
09/03/12 23:06:36 SEPBaONy
>>729-730
>なんで突然、並列化の話が出てくるの?
それは『ボクのタスクシステムはどっちかっつーと並列!』と言っていた
>>632のおじちゃんに言ってよね。CodeZineなんて初っ端で並列処理と言い切ってる。
あと生協で逆引きゲームプログラミングとかいう本をパラパラーっと立ち読みしたら
『並列動作システム』とか書いてあったし。『並列処理動作』してるんだって。ゲラゲラゲラー
もうさ、ハッタリかましすぎだよね。説明してる内容と、それを一言で表現するときに
どこかから引っ張ってきた用語が全く一致してないんだよね。厨房を騙くらかそうと必死でしょ
今さっき覚えてきた単語をとりあえずあててみました。みたいな。ちょっとね、おかしいとおもう
その点Logician Lord、White Paper、けんもほろろのページは並列なんて一言も言ってない
上に比べたらまだマシな部類なのかなーと思える。タスクシステム解説つっても千差万別だね
739:ID:EEKBitmg ◆HSP4mee/SU
09/03/12 23:11:52 SEPBaONy
ただ、まともっつってもなんか変なんだよね。組み込みシステムか何かから引っ張ってきた
知識を広めた人がいたんだろう、というのは厨の俺でもなんとなくわかる。それがギョーカイ
とかいうよく分かんない謎の秘密結社みたいな世界で伝播する過程でおかしなことになって
ミュータントみたいになっちゃってるんじゃない?この人たちが言ってるTCBとかタスクとか
ちょっと変わってるよね
TCBって、ゲーム機よりショボい組み込み機器でもプログラムカウンタとかスタック
アドレスが入ってる。リエントラントな仕組みを提供すんだよね。だから周期タスクは
periodictask()
{
while(1){
dosomething();
rot_rdq();
}
}
みたいな感じで書く。タスクは並行動作できるんだ。でも>>2の『タスク』はできない。
サブルーチンの処理を全て完了しないと処理を返せない。タスク同士は完全に
逐次処理なんだ。擬似並列動作ができない
740:ID:EEKBitmg ◆HSP4mee/SU
09/03/12 23:24:44 SEPBaONy
でも>>2の言うタスクってのは、ジョブを時間領域で分割したものだから
タスクの作り方によっては、複数のジョブ同士の並行動作はできるかもね
>タスクシステムの目的は並行動作だよね。
>>2の話?んなこと俺が知るかっつーカンジ
俺は>>632のどっちかっつーと並列とかいう謎のタスクシステムが
並行動作してるのかなーとESPしてみただけだしー。推測でしかないしー
>>2はふたを開けてみればゲームオブジェクトのUpdateメソッドのディスパッチャー
単なるレディキューだからどうとでも使えるわけだしー
このメソッドの分け方次第で並行動作もできるんだろうね。でも
ゲームオブジェクト一個につきタスク一個とか言ってるページもあるから
ちょっと怪しいね。Update()一個じゃあ、>>725で書いた矛盾にぶつかると思う
741:ID:EEKBitmg ◆HSP4mee/SU
09/03/12 23:39:16 SEPBaONy
>385 名前:名前は開発中のものです。 投稿日:2009/02/10(火) 01:05:40 D1ATM4io
>>384
>厳密にやるならワークをそれぞれ2つ持って、フレームごとにフリップだろ。
>面倒だったら一つ一つ更新して、n+1がnを参照してもn+1を参照しても対して問題が無い様にするさ。
>どこまで誤差を容認できるか知らんけど。
なんか臭いなぁ、と思ってたのがここ。CodeZineはこの誤差を容認するほうを選んでるよね。
具体的にはEnemyとMyShotの関係。これタスクリストとかいうものの中でごちゃ混ぜになってるでしょ
当たり判定のときに、自機弾って移動速度速いからさ、敵と当たったり当たらなかったりすると思うよ
ぜったい気持ち悪い現象が起きる理不尽ゲーになると思う
742:ID:EEKBitmg ◆HSP4mee/SU
09/03/12 23:53:29 SEPBaONy
>>741
× 当たり判定のときに、自機弾って移動速度速いからさ
○ 自機弾って移動速度速いからさ
この不快な現象を発生させたくないなら
EnemyとMyShotの実行順序をごちゃ混ぜにしちゃ駄目でしょ
ごちゃ混ぜのままならせめて当たり判定タスクと移動タスクを分けないと
あとさ、必要は無いけど、外部参照されるパラメータは前フレームの状態を
保持したほうがいいよ
例えばロックオンして置き撃ちするときに、targetposition(t)を得るか
targetposition(t+Δt)を得るかがpriorityとかいうものによって変わるって
おかしいでしょ
743:ID:EEKBitmg ◆HSP4mee/SU
09/03/13 00:03:15 w7sHy3uX
>>742
× priorityとかいうものによって変わる
○ タスクリストの前後関係とかpriorityとかいうものによって変わる
>>730
>>これって何?GCしてるの?どういうタイミングで?
>え、ちょっと待って、>>2の話をしてるんだよね? 本当に>>2読んだ??
>ID:EEKBitmgさんの言う>>2って、>>2のうちのどれのこと?
俺と同い年の人が書いたと思しき記事だからボコりたくなかったけど
流れでそうなっちゃったから堰を切ったように書いてるけどさ
CodeZineの記事は他と比べて相当違うんだよね
メモリ割り当てなんて関係ないのにさ、糞みたいなGCかましてるし
STGであんな処理をかますフレームが不定期に存在するって変でしょ
糞みたいな自前のメモリ割り当てやってるからあんなGCが必要に
なるんでしょ。何のための自前アロケータなんだか分からない
厨的には、あんな糞実装は氏んじゃえって思う
744:名前は開発中のものです。
09/03/13 00:16:52 kkRWD5W+
タスクシステム擁護派じゃないけどさ・・・
雰囲気つかむだけのサンプルにアホとか言っちゃうのはどうよ?
こういうものは思想だけ頂いて自分の好きなように組んでくれって物じゃないのかね・・・
GCがどうのっていうのも処理落ちしたときにはじめて考えればいい所だし、
ただたんに自分の流儀に合わないから貶すと見えますよ。
745:ID:EEKBitmg ◆HSP4mee/SU
09/03/13 00:24:04 w7sHy3uX
>>729
>>>2では最初から並列動作なんか考えてないんだから、
>同期処理とかが組み込まれてないのは当たり前だよね。
性格悪いレスになるけど書いちゃえ!
ぶっぶー。並列動作じゃないから同期処理が要らないってのは間違い
>>730
CodeZineの記事のコードってさ、生存中のゲームオブジェクトのアドレスが不定期に変わっちゃうんだよね
あのサンプルってさ、あるゲームオブジェクトのレーダーシステムが特定の目標をロックオンして追跡するとき
どうすんの?
例えばあのサンプルの敵弾ってさ、毎回Playerをタスクリストから探してるんだよね。バカだからさ
priority=1.0のPlayerはタスクリストの一番最後に入ってるのに、先頭からナメて探すの。バカだよね
こんな調子で、ロックオンターゲットも、毎フレーム、タスクリストから探し出すわけ?
多目標同時対処能力を保有する機体が入り乱れたら愉快な処理量になりそうだね
こんなアホなことになるのはさ、糞アロケータの都合で不定期に糞GCかますからでしょ?
あんた>>711で『デフラグができること』を取り上げて
これを素朴な形で実装したのがタスクシステムだとか言ってるけど、素朴って何よ?
明らかに必要ねーことしてるし。バカじゃねーのくたばれバーカバーカって言いたかったけど
ずっと我慢して黙ってたんだ。でももう書いちゃった。
746:ID:EEKBitmg ◆HSP4mee/SU
09/03/13 00:30:00 w7sHy3uX
>>744
だからずっと黙ってたんじゃん。心情的にはCodeZineの記事は
放置したかったんだけど、擁護派がデフラグデフラグとかいうから
書かざるを得なくなった。HSP使いとしては同じ厨を攻撃するのは遺憾
遺憾の意です。本意じゃありません。ごめんなさい><
747:名前は開発中のものです。
09/03/13 00:40:01 idYT2cwA
>746
> だからずっと黙ってたんじゃん。
バカには現実を突きつけてやるしかないんだよ。
748:名前は開発中のものです。
09/03/13 00:45:14 9zwO86zu
>>747
突きつけても、見えない or 見ようとしないけどな。大抵。
749:名前は開発中のものです。
09/03/13 01:00:19 bP/yrlKM
ID:EEKBitmgはCodeZineの記事の作者と同じにほいがする。
ID:EEKBitmgの方が筋は良さそうだが。
>>744
CodeZineの記事は昔論争になったことがあって擁護派らしき人からの批判も多かった。
批判の方が多かったような。
とにかく駄目なものを技術的な説明を沿えて駄目と言うのは良いでしょう。
750:名前は開発中のものです。
09/03/13 07:26:08 2Nwh1Ok5
とりあえず並列化の話はやめろよ
この仕組みじゃどう味付けしたって並列化なんてできやしねぇから
751:名前は開発中のものです。
09/03/13 10:49:20 t4cURNWA
なんでもタスクで一元管理
まとまってていいね!
ぐらいの感覚なんじゃないの?
腕である人ならいい感じにまとめられるでしょうに
ギャーギャー噛み付くほどのものかねぇ
もしかして、今時のゲームにも導入されたりして被害被ってるの?
752:名前は開発中のものです。
09/03/13 12:37:20 2Nwh1Ok5
腕のある人はこんなもん使わないから(笑)
753:並列さん ◆dPfetnROQg
09/03/13 16:18:33 nlP2vU3h
>>745
> priority=1.0のPlayerはタスクリストの一番最後に入ってるのに、先頭からナメて探すの。バカだよね
それは別にhash使えばO(1)で検索できるんだし、本質的な欠陥じゃないと思うが。
> これを素朴な形で実装したのがタスクシステムだとか言ってるけど、素朴って何よ?
> 明らかに必要ねーことしてるし。
まあターゲット環境とゲームの規模によるけど、何らかの形でデフラグはあったほうがいいと思うよ。
working setを縮小したほうがプロセッサのcache効率が上がるのが普通だし、
タスクシステムはプライオリティ順にタスクに対してアクセスしていくのだから
プライオリティ順にメモリ上に配置されて、アクセスするメモリが連続しているほうが
(memory cacheの観点から見て)断然速い。
タスクシステムどうのという話はおいとくとして、ひょっとして、みんなmemoryのcompactionとか処理を書いてないの?
これを無用の長物みたいに言われると、もう議論の前提が違うとしか言いようがないんだけど。