タスクシステム総合スレ part5at GAMEDEVタスクシステム総合スレ part5 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト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; } これが実行される。この仕組みをタスクシステム側に提供してもらう。これなら簡単に並列化できる。 ゲームで使うコリジョン判定などはたいていこのように並列化できる。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch