(57)【要約】      （修正有）【課題】光線と三角形の交差などの、操作に関するゲームエンジンの処理の開発や、クロスプラットフォームの配備を容易にする。【解決手段】メモリ１０２を含むゲームエンジン用のシステム１０１、複合計算ユニット１０３、及びメモリからデータを読み取るマップ手段１０４を備えており、マップ手段１０４は、メモリ１０２からデータを読み取り、機能を特定して複合計算ユニット１０３を実行する。マップ手段１０４は、データを複合計算ユニットに分散させることにより計算タスクを第１の機能に割当てるために、計算ノードの集合とそれらのノードがどのように使用されるのかの記述からなる１つのマップまたは複数のマップを作り出し、タスクに関連付けられたデータの一部をタスクを実行する各計算ユニットへ格納する。【選択図】図１
2011237893.tif 000002
【特許請求の範囲】
【請求項１】
メモリ（１０２）と，
複合計算ユニット（１０３）と，
１又は複数のマップを作り出すマップ手段（１０４）とを含む，
ゲームエンジンのシステム（１０１）であって，
前記マップ手段（１０４）は，データを前記メモリから読み取り，前記データは，第１の機能を特定し，前記複合計算ユニット（１０３）が実行する予定のものであり，
前記マップ手段（１０４）は，前記データを前記複合計算ユニットに分散させることで計算タスクを前記第１の機能に割当てるため，前記１又は複数のマップを作り出し，前記割当てには，前記タスクに関係するデータの一部を，前記タスクを実行する予定のそれぞれの前記計算ユニットへ格納することが含まれる，
システム。
【請求項２】
前記データは前記第１の機能と第２の機能を特定するものであり，
前記マップ手段（１０４）は，前記データを前記複合計算ユニットに分散させることで計算タスクを前記第１の機能及び前記第２の機能に割当てるため，前記１又は複数のマップを作り出し，前記割当てには，前記タスクに関係する前記データの一部を，前記タスクを実行する予定の前記複合計算ユニットへ格納することを含む，
請求項１記載のシステム。
【請求項３】
複合計算ユニットのためのデータをマッピングする方法であって，
データをメモリから読み取るステップであって，前記データは，第１の機能を特定し，前記複合計算ユニットシステムを実行することが意図されるものと，
前記データを前記複合計算ユニットに分散させることで計算タスクを前記第１の機能に割当てるために１又は複数のマップを作り出すステップと，を含む，
方法。
【請求項４】
前記データは前記第１の機能と第２の機能を特定するものであり，
前記１又は複数のマップを作り出すステップは，前記データを前記複合計算ユニットに分散させることで，前記計算タスクを前記第１の機能及び前記第２の機能に割当てるものであり，前記割当てには，前記タスクに関係する前記データの一部を，前記タスクを実行する予定のそれぞれの前記計算ユニットへ格納することが含まれる，
請求項３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，光線と三角形の交差関数によって，ＶＳＩＰＬ＋＋ＡＰＩを拡張する方法及びシステム，並びにプロセッサの代わりにデータマップをアーキテクチャコンピュータユニットへ供給させるシステム及び方法に関する。本発明は，さらに，ＶＳＩＰＬ＋＋ＡＰＩへの新しいネスト型ストリーミングパターンデータに関する。
【背景技術】
【０００２】
ゲームコードは，ますます複雑になっている。例えば，Ｕｎｒｅａｌ  Ｅｎｇｉｎｅ  ３は，２００から３００万のコード列を有する。同時に，ゲーム開発費は急騰している。第７世代のゲーム機の開発費は，シングルプラットフォームに対してほぼ１０００万ドルである。これは，第６世代のゲーム機の２倍から３倍の開発費である。クロスプラットフォータイトルに関する費用は，さらに２倍から３倍となり，ほぼ３０００万ドルとなる。Ｕｂｉｓｏｆｔ社のＣＥＯ兼会長のイヴギルモットは，開発費は約６０００万ドルに上昇すると予期しており，いくつかのＡＡＡタイトルはすでに，この金額を超えた。
【０００３】
ゲームが搭載されるハードウエアの複雑さが，この費用の高騰と複雑さをもたらす主要因である。プロセッサは，１つのコアからＸｂｏｘ３６０（商標登録）のＸｅｎｏｎの３つのコアへ，プレイステーション３（商標登録）のセルボードエンジン（ＣＢＥ）の９つのコアへとなっている。コア数は次世代のゲーム機においてはさらに増えると予想されている。第７世代のゲームシステムに関して，シングルスレッドでは，デッドロック，タイミングエラー及び同期エラーのような並列コンピューティングに関する問題が生じることがあるため，シングルスレッドは、マルチスレッドコードに変換されなければならない。これらのプログラミングトラップは，過去の少ないコアでのスケーリングでは，今日のゲーム機に大きな課題を生じさせる。
【０００４】
さらに，各並列アーキテクチャは，クロスプラットフォームの配備を困難にさせるため，他とは極端に異なっている。このクロスプラットフォームの配備は，ＰＳ３（商標登録）やＸｂｏｘ３６０（商標登録）用に発売されたものだけでなく，現世代の小型ゲーム機用，又は他のプラットフォームの現世代ゲーム機用に，過去に長年作られてきたゲームの再販も含む。例えば，ファイナルファンタジー（商標登録）がある。これは，任天堂エンターテイメントシステム社（ＮＥＳ）がファミコン用に１９８７年に発売したものであるが，今ではプレイステーションポータブル（ＰＳＰ）（商標登録）や他のプラットフォームにおいても利用可能である。ＣＰＵを基にしたＰＳＰのＭＩＰＳＲ４０００は，さらに大きく進歩し，ＮＥＳのＲｉｃｏｈ２Ａ０３と異なっている。
【０００５】
並列言語の試み
ビデオゲーム開発業界は，計算能力の必要性や複雑化の劇的な高まりに対する取り組みだけではなく，並列言語に関連付けられたいくつかの陥りやすい誤りを軽減するのに役立つように，さらに多くの試みがプログラミング言語の開発にかけられている。それによって並列システムの生産性が高まっている。高性能コンピュータ業界において，２００２年以来，ＤＡＲＰＡは高性能コンピュータシステム（ＨＰＣＳ）計画を支援している。この計画は，‘プログラムの性能，プログラミング，移植性，及びロバスト性の組み合わせ’と規定される生産性において，プログラム生産を増加させようとしている。ＳＵＮのＦｏｒｔｒｅｓｓ，ＩＢＭのＸ１０及びＣｒａｙのＣｈａｐｅｌは，すべてＨＰＣＳの一環として開発されているプログラム言語である。３つのプログラム言語はすべてグローバルな視点でのプログラミングモデルを使用する。しかしながら，各言語は，それぞれ他の言語と大きく異なっている。Ｆｏｒｔｒｅｓｓは，プログラムを実行させる言語である。この言語は，数学的な表現とよく似たインタープリター型言語である。Ｘ１０は，並列サポート構造を加えたＪａｂａの部分集合である。Ｃｈａｐｅｌは，Ｃ言語，フォートラン，Ｊａｂａ，及びＡｄａを多く取り入れる，コンパイル言語である。
【０００６】
信号処理業界を埋め込む実時間は，１９９６年に，ベクトル，信号，及び画像処理に関する業界基準のライブラリを取り組み始めた。これは１９９９年にベクトル，信号，及び画像処理ライブラリ（ＶＳＩＰＬ）ＡＰＩを，２００５年にはＶＳＩＰＬ＋＋（対象に適応したＶＳＩＰＬ）を，２００６年に並列ＶＳＩＰＬ＋＋を構築した。このＡＰＩは，高性能な計算技術を組み込む独創的なソフトウエア（ＨＰＥＣ−ＳＩ）により支持されている。ＨＰＥＣ−ＳＩは，産業界，学術界及び政府団体の共同運営である。
【０００７】
学術界では，ＺＰＬのような高水準の並列言語及びＳｈのようなドメイン固有のプログラム言語を作り出している。ＺＰＬは，便利で有用な配列操作ができる高級プログラミング言語である。ＺＰＬは，並列機械間に共通する多くの特徴を有する基礎的抽象計算機を基にしている。これら二つのアイデアは並列化から離れ抽象化する。これは，通信または同期コードを実装するプログラマーを必要とする。これは順に，ＺＰＬプログラムを簡潔にさせ，修正するのを容易にする。Ｓｈは，柔軟なシェーダとしてウォータールー大学で開発され，ＳｔｒｅａＭＩＴは，プログラムのストリーミングアプリケーションを助けるため，ＭＩＴで開発された。
【０００８】
最後に，グラフィックスの業界ではより柔軟な汎用プログラミング言語に拡張されたシェーダ言語がたくさん作り出されている。これらは，Ｎｖｉｄｉａ（登録商標）のＣＵＤＡ，ＫｈｒｏｎｏｓＧｒｏｕｐのＯｐｅｎＣＬ，Ｓｈから生まれたＣＴ／ＲａｐｉｄＭｉｎｄを含み，ＯｐｅｎＣＬは，並列プログラミングを簡素化するためにいくつかのハードウエア部から離れて抽象化する低級言語である。ＯｐｅｎＣＬは，ＡＭＤとＮｖｉｄｉａのグラフィックハードウェア上及びｘ８６で使用することができ，ＣＵＤＡはＮｖｉｄｉａのグラフィック上で作動する。
【０００９】
ＣＴ／ＲａｐｉｄＭｉｎｄは，商業用に始められ，Ｓｈプログラミング言語のバージョンを支援している高級言語である。これは，複数のデータを取り入れた単一のプラグラム（ＳＰＭＤ）型の計算技術を特徴としている。その主要な革新は，‘プログラム’型である。これらは，ＧＰＵのシェーダに類似している。‘プログラム’は，２つの様式で実行できる。‘イミディエイトモード’はプログラムを瞬時に実行する。
【００１０】
‘リテインモード’は，‘プログラム’の状態を取り込み，後にそれを実行する。この特徴は，複数の‘プログラム’の集合をメガ‘プログラム’にする。これは独自のコンパイラとランタイムを持っている。‘リテインモード’は，‘タイトバインディング’と‘ルーズバインディング’を特徴としている。‘タイトバインディング’は，出力に影響しないプログラムへの入力データに変わることを意味する。‘ルーズバインディング’は，出力に現れる入力データに変わることを意味する。また‘リテインモード’は，スキャッターギャザープリミティブも有している。
【００１１】
米国特許出願番号２０１０／００７９４５２の明細書は，ｋｄツリーによるグラフィックハードウェア上の光子マッピングを開示している。国際公開ＷＯ２００８―０１６５１５号パンフレットは，ＶＳＩＰＬ＋＋に関するマップを開示している。これらの文書と以下に記す文書は，その全体が参照により本明細書に組み込まれる。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】米国特許出願番号２０１０／００７９４５２
【特許文献２】国際公開番号ＷＯ２００８―０１６５１５号パンフレット
【非特許文献】
【００１３】
【非特許文献１】BILL THIES, M. K., AND AMARASINGHE, S.2001. Streamit: A language for streaming applications. Tech. rep., Massachusetts Instituteof Technology, August
【非特許文献２】B.L. CHAMBERLAIN, D. CALLAHAN, H. Z. 2007.Parallelprogrammability and the chapel language. International Journal of HighPerformanceComputing Applications 21, 3 (August), 291-312
【非特許文献３】BRADFORD L. CHAMBERLAIN, SUNG-EUN CHOI, E. C. L. C. L. L. S. W. D.W. 1998. IEEE Computational Science and Engineering5, 3 (September), 76-86
【非特許文献４】CHARLES, P., GROTHOFF, C., SARASWAT, V.,DONAWA, C., KIELSTRA, A.,EBCIOGLU, K., VON PRAUN, C., AND SARKAR,V. 2005.X10: anobject-oriented approach to non uniform cluster computing. ACMSpecial InterestGroup on Programming Languages, 519-538
【非特許文献５】CODESOURCERY, L., 2006. Vsipl++specification-parallel specification. Web, April.
【非特許文献６】DOBRA, A., 2009. Ubisoft:Game development will cost $60 million in the future. Web, June.
【非特許文献７】JAMES LEBAK, JEREMY KEPNER, H. H. E. R. 2005. Parallelvsipl++: An open standard software library for high performanceparallelsignal processing. Proceedings of the IEEE 93, 2 (February), 313-330
【非特許文献８】KIM, H., AND BOND, R. 2009. Multi core software technologies. IEEESignal Processing Magazine 26, 6 (November), 80-89
【非特許文献９】MCCOOL, M., AND TOIT, S. D. 2004. Meta programmingGPUs with Sh. A.K. Peters, Ltd
【非特許文献１０】MCCOOL, M. D. 2006. Data-parallelprogramming on the cell be and the bpu using the rapidmind development platform
【非特許文献１１】MELONI,W., 2010. Thebrief - 2009 ups and downs.Web, January. WEILAND,M. 2007. Chapel, fortress andx10: novel languages for hpc. Tech. rep., EPCC, The University of Edinburgh,October
【発明の概要】
【発明が解決しようとする課題】
【００１４】
本発明の１つの目的は，拡張並列ＶＳＩＰＬ＋＋ＡＰＩを基礎とするＣ＋＋言語に関するシステムと方法を提供することである。拡張並列ＶＳＩＰＬ＋＋ＡＰＩは，光線と三角形の交差などの，操作に関するゲームエンジンの基盤から成る。また，拡張並列ＶＳＩＰＬ＋＋ＡＰＩは，データを複合計算ユニットに分散させるために，マップを使用する。複合計算ユニットは，開発しやすく，クロスプラットフォームの配備を容易にすることができるよう，基本的並列実装から機能を分ける。
【課題を解決するための手段】
【００１５】
本発明の第１の側面は，ゲームエンジンのシステム１０１に関する。システム１０１は，メモリ１０２，複合計算ユニット１０３，及び１又は複数のマップを作り出すマップ手段１０４を含んでいる。メモリ１０２は，データベース，ＲＡＭ，ＲＯＭ，及びハードデスクを含む様々なメモリを含んでもよい。
【００１６】
マップ手段１０４は，メモリ１０２からデータを読み取る。そのデータは，第１の機能を特定し，複合計算ユニット１０３を実行するようにされている。マップ手段１０４は，データを複合計算ユニットに分散させることにより計算タスクを第１の機能に割当てるために，１つのマップまたは複数のマップを作り出す。この割当ては，タスクに関連付けられたデータの一部を，タスクを実行する各計算ユニットへ格納することを含む。
【００１７】
そのデータの計算操作を行うタスクを，今から有することになるという意味において，データは計算ユニットに割当てされる。このデータは，好きなだけ主要メモリ上に残すことができる。各計算ユニットは，このデータをチップ上で実行するタイミング，及びこのデータを処理するタイミングを決定する。
【００１８】
本発明の第１の側面の１つの実施形態として，データは第１の機能及び第２の機能を特定する。言い換えれば，本システムは複数の機能を扱う。マップ手段１０４は，データを複合計算ユニットに分散させることにより計算タスクを第１の機能に割当てるために，１つのマップまたは複数のマップを作り出す。その割当ては，タスクに関連付けられたデータの一部を，タスクを実行する各計算ユニットへ格納することを含む。
【００１９】
本発明の第２の側面は，複合計算ユニットシステムにデータをマッピングする方法に関する。本システムは，特にゲーム用の複合計算ユニット１０３を含む。本方法は，メモリ１０２からデータを読み取るステップと，そのデータが第１の機能を特定するステップと，データを複合計算ユニットに分散させることにより計算タスクを第１の機能に割当てるために，１つのマップまたは複数のマップを作り出すステップを含む。このデータは，複合計算ユニットを実行することが予定されている。
【００２０】
本発明の第２の側面の実施形態の１つとして，データは第１の機能及び第２の機能を特定する。
【００２１】
本発明のシステムが計算のためにＧＰＵを使用している場合，このシステムはスクリーンに画像をレンダリングするのに利用される働きのため，同様の計算ユニットを使用している。これは非効率だが，ＧＰＵで計算する誰もが，操作しなければならないことの１つである。本発明のマップは，実際の計算ユニットを介して実際に計算するためのデータをマッピングする。これらの計算ユニットは，いくつもの異なる計算アーキテクチャファミリーを基礎とするものであってもよい。例えば，それらは，プロセッサ，ＧＰＵでストリーミングしたユニット，またはセル・ブロードバンド・エンジンのシナジェテッィクプロセッサエレメンツ（ＳＰＥ）であってもよい。
【００２２】
さらに本発明は，光線と三角形の交差関数をＶＳＩＰＬ＋＋ＡＰＩに伝える。これは，レンダリング及び物理学における多くの事柄の基礎となる関数として重要なものである。この関数は，複数のｘ８６（パワーＰＣプロセッサ）を介して平行して進行されるか，または複数のＳＰＥを介してセルブロードバンド（ＰＳ３）上で進行されるか，またはＧＰＵの全てのストリーミングまたはＣＵＤＡユニットを使用するＧＰＵ上で進行される。この関数は，複数の異なるタイプのレンダリングアルゴリズムを実装するのに使用される。光線と三角形の交差関数をＶＳＩＰＬ＋＋ＡＰＩに加えることは，ＡＰＩにストリーミングパターンのデータを加える必要がある。パターンをストリーミングされたデータは，‘テンポラルマップ’と呼ばれことがある。‘テンポラルマップ‘によれば，二つの異なるストリームデータのネスト型ストリーミングが可能になる。
【発明の効果】
【００２３】
本発明は，拡張並列ＶＳＩＰＬ＋＋ＡＰＩを基礎とするＣ＋＋言語に関するシステムと方法を提供する。拡張並列ＶＳＩＰＬ＋＋ＡＰＩは，光と三角形の交差などの，操作に関するゲームエンジンの基盤からなる。また，拡張並列ＶＳＩＰＬ＋＋ＡＰＩは，データを複合計算ユニットに分散させるために，マップを使用する。複合計算ユニットは，開発しやすく，クロスプラットフォームの配備を容易にすることができるよう，基本的並列実装から機能を分割する。
【００２４】
本発明者の知る限りにおいて，本発明は，誰もがＣ＋＋言語を使ってモンテカルロパストレーサを書くことができ，単一のコードを変更することなく，異なる３つのハードウエアアーキテクチャでモンテカルロパストレーサを実行することができる最初の発明である。
【図面の簡単な説明】
【００２５】
【図１】図１は，本発明のブロック図を示す。
【図２】図２は，従来のストリーミングパターンのデータを示す。
【図３】図３は，本発明の新しいストリーミングパターンの一般的な提案を示す。
【図４】図４は，２５６×２５６ピクセルで，９４８個の三角形のスタンフォードバニーを実行した場合のストロングスケーリングによる初期のセル・ブロードバンド・エンジンのスケーリング性能を示すグラフである。縦軸は秒を示し，横軸はＳＰＥの数を示している。
【図５】図５は，２５６×２５６ピクセルで，９４８個の三角形のスタンフォードバニーを実行した場合のストロングスケーリングによる初期のスケーリング性能を示すグラフである。縦軸は加速係数を示し，横軸はＳＰＥの数を示している。
【図６】図６は，本発明の一形態に係る，図１に示されるコンピュータの構成例を示すブロック図である。
【発明を実施するための形態】
【００２６】
本発明は，光線と三角形の交差操作をＶＳＩＰＬ＋＋ＡＰＩをもたらす。この操作は，グローバルイルミネーションの基本となり，物理エンジンで使用される交差対象の特殊化でもあるため，ゲーム業界では不可欠である。本発明は，有用なプログラムを実装するＡＰＩの能力を発揮するために，モンテカルロパストレーサを実装することにより，この操作を行う。モンテカルロパストレーサは，どのコードも変更せずに４つの異なるアーキテクチャを実行できる。それぞれのケースにおいて，本発明は，プロセッサ間に目線を配り，三角形に対してそれぞれプロセッサテストを行う。そうすることで，信号処理業界で現在行われているプロセッサの代わりにシステムの計算ユニットへマッピングするために，本発明は，ＶＳＩＰＬ＋＋のデータマップを著しく変更する。本発明はまた，各光線に対するすべての三角形のテストを処理するために，ＡＰＩにネスト型ストリーミングパターンデータを導入する。
【００２７】
本発明の第１の側面は，ゲームエンジンのシステム１０１に関する。システム１０１は，メモリ１０２，複合計算ユニット１０３，及び１つのマップまたは複数のマップを作り出すマップ１０４を含む。メモリ１０２は，データベース，ＲＡＭ，ＲＯＭ，及びハードデスクを含む様々なタイプのメモリを含む。
【００２８】
マップ手段１０４は，メモリ１０２からデータを読み取る。そのデータは，第１の機能を特定し，複合計算ユニット１０３を実行することが予定されている。マップ手段１０４は，データを複合計算ユニットに分散させることで，第１の機能の計算タスクを割当てるため，１つのマップまたは複数のマップを作り出す。その割当ては，タスクに関係するデータの一部を，タスクを実行する予定の各計算ユニットへ格納することを含む。
【００２９】
計算ユニットがそのデータの計算操作を行う責任を有することになるという意味で，データは計算ユニットに割当てされる。このデータは，好きなだけ主要メモリ上に残すことができる。
【００３０】
本発明の第１の側面の１つの実施形態として，データは第１の機能及び第２の機能を特定する。言い換えれば，本システムは複数の機能を扱う。マップ手段１０４は，データを複合計算ユニット１０３に分散させることで，第１の機能及び第２の機能に計算タスクを割当てるため，１つのマップまたは複数のマップを作り出す。その割当ては，タスクに関係するデータの一部を，タスクを実行する予定の各計算ユニットへ格納することを含む。
【００３１】
本発明の第２の側面は，複合計算ユニットシステムのためのデータをマッピングする方法に関する。このシステムは，特にゲーム用として複合計算ユニット１０３を含む。本方法は，以下のステップを含む。第１の機能を特定し，複合計算ユニットシステムを実行する予定のデータをメモリから読み取るステップ（ステップ１０１）と，データを複合計算ユニットに分散させることで計算タスクを第１の機能に割当てるため，１又は複数のマップを作り出すステップ（ステップ１０２）を含む。
【００３２】
本発明の第２の側面の実施形態の１つとして，データは第１の機能及び第２の機能を特定する。
【００３３】
例えば，このシステムは，８つのｘ８６プロセッサが組み込まれたｘ８６機を有する。ＶＳＩＰＬの以前のバージョンでは，８つのプロセッサがあり，これらのプロセッサにマップをマッピングしようとする。しかしながら，本発明では，同じシステムのグラフィックカード上でＧＰＵを使って，マッピングの計算をすることができる。ＧＰＵは，２５６以上の計算ユニットを有している。それら２５６の計算ユニットが実際の仕事をする１つであるとき，本発明は，８つのコアのｘ８６プロセッサではなく，２５６の計算ユニットにマップを準備することができる。８つのコアのｘ８６プロセッサではなく，２５６の計算ユニットに仕事を分散させることは，ＶＳＩＰＬの現在のバージョンではできない。
【００３４】
信号処理業界では，一時に起動するのは，ただ１つの計算タイプであるのが一般的である。しかしながら，ゲーム業界では，一度に複数の異なる計算タイプの起動が必要となる。例えば，グラフィック，次に物理学，次にＡＩ，及びＩ／Ｏを一度にすべて実行する必要がある。したがって，特定のタスクに割当てされている実際の計算ユニットがどのくらいかをコントロールすることは重要である。
【００３５】
実装されたマップは唯一，物理的プロセッサに対応している。計算ユニットの用語は，実際の計算を実行することを目的とされている。例えば８つのプロセッサを有するｘ８６のシステムは，２５６のＣＵＤＡユニットにインストールされたＧＰＵも有することができる。２５６のＣＵＤＡユニットは，実際の計算をするものである。その時ＣＵＤＡは，計算ユニットとなる。したがって，本発明のマップは，等しいか又は２５６以下であるＣＵＤＡユニットにデータをマッピングする。ＶＳＩＰＬの以前のバージョンでは，機体にインストールされた強力なＧＰＵなどがあるにもかかわらず，８つのコアを有するｘ８６プロセッサにデータをマップすることができる。他の例として，セルブロードバンドエンジン（ＣＢＥ）がある。ＣＢＥ内にはハイパースレッディング（２つのスレッドを実行できる）に似たパワープロセッサエレメント（ＰＰＥ）及び８つのシナジスティックプロセッサエレメント（ＳＰＥ）がある。ＶＳＩＰＬの以前のバージョンでは，ＰＰＥの２つのスレッドにデータをマップする。本発明では，ＰＰＥの２つのスレッドではなく，８つのＳＰＥｓにデータをマップする。
【００３６】
並列ＳＩＰＬ＋＋ＡＰＩ
並列ＶＳＩＰＬ＋＋ＡＰＩの中心的概念は，並列処理の仕様からアプリケーション機能を独立して表す能力である。これを可能にするメカニズムはマップである。
【００３７】
マップは，計算ノードの集合とそれらのノードがどのように使用されるのかの記述からなる。マップを行える対象は，‘マップ可能’と呼ばれる（非特許文献７）。関数とデータは共に様々な計算ノードにマップされることができる。信号処理業界では，行列，ベクトル，及びテンソルは，マップ可能なデータを頻繁に使用するオブジェクトである。
【００３８】
マッピングは，Ａ，Ｂ，及びＣを利用可能な計算ノードに分配するメカニズムを危惧することなく，Ａ＝Ｂ＋Ｃ（１）のような文を書かせることができる。ここで，Ａ，Ｂ及びＣは，すでに計算ノードにマップされたマップ可能なオブジェクトである。
【００３９】
プログラマーは並列実装の独立した機能を表現できることから，そのコードはさらに高い移植性を有することになる。この異なるプラットフォームの対象は，コンパイル時間に現れる。上記言語のうち，ＣＴ／ＲａｐｉｄＭｉｎｄはＶＳＩＰＬ＋＋にとても似ている。それらは共にＣ＋＋言語で記述されており，並列言語データである。
【００４０】
ＶＳＩＰＬ＋＋は，多くの重要な点でＣＴ／ＲａｐｉｄＭｉｎとは異なる。第１にＶＳＩＰＬ＋＋は，自己最適化のメカニズムのランタイムを有していない。第２にＶＳＩＰＬ＋＋は，マップのデータ構造により多くの焦点をあてている。それは，プログラマーにデータが計算ユニットに分配される方法を管理させる。しかしながら，ＣＴ／ＲａｐｉｄＭｉｎｄと異なりＶＳＩＰＬ＋＋は，格納と計算の効率化を考慮して，複合的操作をまとめられるように，テンプレート形式を使用する。ＶＳＩＰＬ＋＋は，標準化団体の安定した結果を開示する。支援されたＶＳＩＰＬ＋＋の実装は購入することができるが，自身の目的のために維持，改変，修正，修正される実装が自由に分配されることもある。ＣＴ／ＲａｐｉｄＭｉｎｄは商用製品としてサポートされているが，オープンスタンダードではなく，エンドユーザによって拡張することはできない。
【００４１】
ゲームのための並列ＶＳＩＰＬ＋＋ＡＰＩ
並列ＶＳＩＰＬ＋＋ＡＰＩは，信号処理業界で有用されるベクトル加算，行列乗算，及び高速フーリエ変換のようなプリミティブを多数提供する。これらのプリミティブの多くは，ゲーム業界においても有用である。しかし，いずれかのＡＰＩの成功の鍵は，有用で大きなプログラムの集合に組み合わせ可能な基本的な機能を提供することである。この目的のために，本発明のシステムは，光線と三角形の交差関数とｋｄツリー関数の両方を実装している。これら二つの関数はグローバルイルミネーション領域と物理エンジン領域の両方に非常に有用である。光線と三角形の交差関数は，物理エンジンで使用するためにオブジェクトとオブジェクトの交差に一般化される。
【００４２】
貢献度
この働きは，力強い光線と三角形の交差関数を含むため，ＶＳＩＰＬ＋＋ＡＰＩを拡張する。これは，ｘ８６，ＣＢＥ，及びＮｖｉｄｉａＧＰＵアーキテクチャを介して複数の異なるタイプのグローバルイルミネーションアルゴリズムの実装を許容する。発明者の知る限りでは，基礎となる並列アーキテクチャから実装された光線と三角形の交差を抽象化するために，マップのデータ構造が使用されるのは初めてのことである。また，コードを一行も変換することなく３つのアーキテクチャ上でパストレーサを実装するためにマップが正常に使用されることも初めてのことである。この項目では，ホスト又はコプロセッサモデルの使用制限を示し，この制限を説明する。
【００４３】
本発明はさらに，ＶＳＩＰＬ＋＋にパターンを転送する新しいネスト型ダブルバッファリングデータも提供する。このストリーミングパターンデータは，異なるループ内に１つのネスト型ループがある状況のいずれにも使用されえる。
【００４４】
またこの働きは，ＶＳＩＰＬ＋＋の実装をプロセッサではなく計算ユニットのマップデータに変更する。従来，ＶＳＩＰＬ＋＋はプロセッサにマップする。計算ユニットはマッピング関数からを完全に隠れる。本発明は，計算ユニットとしてＣＢＥのＳＰＥｓ及びＧＰＵのスレッドユニットを公開している。ゲーム環境はＶＳＩＰＬ＋＋からなる信号処理環境とは異なるため，この特徴は重要である。ＶＳＩＰＬ＋＋はある任意の一時点において唯一の計算タスクが実行される環境のために設計された。ゲーム環境では，複数の同時シュミレーションが実行できる。例えば，グラフィックエンジンは，ＡＩエンジン，サウンドエンジン，及び物理エンジンなどで同時に実行できる。プログラマーが，実際の計算ユニットにマップできることで，プログラマーは，特定のタスクに割り振られたすべてのシステムリソース以上の割合をより良く制御できる。
【００４５】
並列ＶＳＩＰＬ＋＋は，上記で述べた他の高級言語とは大きく異なる。上記の高級言語のうち，インテルのＣＴ／ＲａｐｉｄＭｉｎｄは，並列ＶＳＩＰＬ＋＋にとても似ている。しかしながら，二つの言語は，実装化及び抽象化のレベルにおいては大きく異なっている。インテルのＣＴ／ＲａｐｉｄＭｉｎｄのデータ抽象化のレベルはＶＳＩＰＬ＋＋よりもわずかに高い。ＶＳＩＰＬ＋＋とＣＴ／ＲａｐｉｄＭｉｎｄは共に，ファーストクラスタイプの配列を有し，並列コンピューティングのＳＰＭＤタイプを使用する。しかしながら，ＣＴ／ＲａｐｉｄＭｉｎｄの配列は，非常に効率的なランタイム環境によって自動的に計算ユニットに分配される。一方ＶＳＩＰＬ＋＋は，データが利用可能な計算ユニットに分配されるべき方法を特定するように，マップを使用するプログラマーを必要とする。どちらの方法もそれぞれ利点がある。ＣＴ／ＲａｐｉｄＭｉｎｄの方法は，プログラマーが望んでいる場合を除き，基礎となるハードウエアへの危惧からプログラマーを解放する。ＶＳＩＰＬ＋＋は，計算ユニットに分配されたデータをどのような場合に望むのか考えを持っているプログラマーを必要とする，とはいえ，それはランタイム環境を持っていないため，ゲーム開発者によって採用された現在のプログラミングパラダイムから離れるステップはあまりない。
【００４６】
本発明は，４つの主要な成果を提供する。本発明は，光線と三角形の交差関数によってＶＳＩＰＬ＋＋ＡＰＩを拡張し，データマップを実際に起動するプロセッサの代わりにアーキテクチャの計算ユニットに分配させ，ＶＳＩＰＬ＋＋ＡＰＩに新しいネスト型ストリーミングパターンデータを実装し，導入した。そして，本発明は，いずれのコードも変更することなく４つの異なるプラットフォームのいずれか１つで実行できるモンテカルロパストレーサを実装することにより，ＡＰＩの性能，生産性，移植性を実証した。
【００４７】
初めに，本発明は，光線と三角形の交差関数によってＶＳＩＰＬ＋＋ＡＰＩを拡張した。これは，レンダリングの際の多くのアルゴリズムの基本的機能として重要であり，物理学で使用されるオブジェクトとオブジェクトの交差に概念的に同様の基本的機能として重要である。このように，本発明は，レンダリングのために高水準のクロスフラットＡＰＩを実装することができ，理論的にはそれは物理学上で行うことが可能である。本発明の機能は，並列ｘ８６プロセッサ（又はパワーＰＣプロセッサ）上で，又は複数のシナジェティックプロセッサエンジンを介してセルボードエンジン（ＰＳ３）上で，又はＧＰＵのストリーミングＣＵＤＡユニットを使用するＧＰＵ上で実行される。アーキテクチャの選択は，テンプレートメタプログラムを使用することにより，コンパイル時に終了する。テンプレートメタプログラムは，割当てされたアーキテクチャ用の適切な関数を選択する。
【００４８】
次に本発明は，並列ＶＳＩＰＬ＋＋がデータをマップする方法を変更した。従来，並列ＶＳＩＰＬ＋＋は，データをシステムプロセッサにマップしている。これは，開発者からシステムコプロセッサを隠す。本発明は，実際の計算ユニットを通るように，ＶＳＩＰＬマップを変更する。これらの計算ユニットは，複数の異なる計算アーキテクチャファミリーからなる。例えば，それらは，ｘ８６プロセッサもしくはＧＰＵ上のストリーミングユニット又はセルボードエンジン上のシナジェティックプロセッサエンジンであってもよい。
【００４９】
図２は従来のストリーミングパターンのデータを示しており，言い換えれば，すでにＶＳＩＰＬ＋＋で行うことができる，あるストリーミングパターンの可視化を提供している。図３は，本発明の現在提案する新しいストリーミングを示しており，ＶＳＩＰＬ＋＋のための新しいストリーミングパターンの可視化を提供している。データのストリームは，プロセッサとメモリ間のデータの流れをいう。ストリーミングパターンは，データの大きな塊がどのようにストリームされるのか，どこに発信され，メモリ内のどこに至るのかを説明する。
【００５０】
ＶＳＩＰＬ＋＋ＡＰＩへの光線と三角形の交差関数を加えるには，ＡＰＩへ新しいネスト型ストリーミングパターンデータを加える必要がある。本発明のネスト型ストリーミングパターンは，ネスト型に良く似た他のループの内部に１つのストリームデータをネストする。ＶＳＩＰＬ＋＋にはすでに多くの異なるストリーミングパターンが含まれている。これらのパターンは信号処理とゲームの業界の両方に非常に有用であるが，光線と三角形の交差には簡単には使用できない。含まれているのは，３つのストリーミングパターンで示される補足的なイメージ‘ＸＸＸ’である。これらのパターンは，‘一般的使用状態’，‘全ての入力ソリューション’，及び‘ストリーミングソリューション’と分類されている。各ソリューションのデータは２つの入力ブロックがある。これらは，入力１と入力２と分類されている。各入力図の濃いブロックは，現在データが操作されていることを示している。ＶＳＩＰＬ＋＋はすでに，‘一般的使用状態’と‘全ての入力ソリューション’の限定バージョンを実装することができる。本発明は，‘ネスト型ストリーミングソリューション’を実装した。
【００５１】
最後に，本発明は，ゲームのために，ＶＳＩＰＬ＋＋にモンテカルロパストレーサを実装することにより，有用なアルゴリズムを実装する効果的な高級言語の使用を明示する。また，本発明は，パストレーサを，コードを変更することなく非常に異なる４つのハードウエアアーキテクチャ上で実行する。
【００５２】
図４は，ＣＢＥ上の計算ユニット（ＳＰＥｓ）の数によって，与えられた問題の大きさに対する処理時間が短縮していることを示している。図５は，ＣＢＥ上の計算ユニット（ＳＰＥｓ）の数によって，処理スピードが上昇していることを示している。
【００５３】
図６は，本発明の１つの実施形態に係る図１に示されるコンピュータの例を示すブロック図である。
【００５４】
操作入力部２１は，動力スイッチなどのスイッチと十字キーなどのキーで構成されている。
【００５５】
機械本体１０内に配置されたサーキットは，制御部１１，ＲＡＭ１２，ハードディスクドライブ（ＨＤＤ）１３，音響処理部１４，グラフィックス処理部１５，通信インターフェース１７，インターフェース部１８，フレームメモリ１９，及びカードスロット２０を含む。制御部１１，ＲＡＭ１２，ＨＤＤ１３，音響処理部１４，グラフィックス処理部１５，通信インターフェース１７，及びインターフェース部１８は，それぞれインターバス２２に接続されている。
【００５６】
ＣＰＵ，ＲＯＭなどを含む制御部１１は，ＨＤＤ１３又は記憶媒体７０に格納された制御プログラムに従って，ゲーム機１００全体を制御する。制御手段１１は，例えば割り込みタイマーを生成するのに使用される内蔵タイマーが備わっている。ＲＡＭ１２も制御部１１の作動領域として使用される。
【００５７】
音響信号のＤ／Ａ及びＡ／Ｄ変換を行う音響出入力インターフェース機能を備える，音響処理部１４は，例えばスピーカーで構成される音響出力装置３０に接続されている。音響処理部１４は，制御部１１からの音響出力指示に従って，音響信号を音響出力装置３０に出力する。制御部１１は，複数の制御プログラムに従って，処理を実行する。
【００５８】
グラフィックス処理部１５は，第１の画像表示部５１と第２の画像表示部５２を有する画像装置５０に接続されている。グラフィックス処理部１５は，制御部１１の描画指示に従って，画像をフレームメモリ１９に送る。また，グラフィックス処理部１５は，画像を画像表示部５１と５２に表示するために，ビデオ信号を表示装置５０に出力する。ビデオ信号によって表示された画像の切り替え時間は，例えば，フレームごとに１/３０秒に割当てる。
【００５９】
プログラムなどが格納されている記録媒体７０は，カードスロット２０に挿入されている。本実施形態の記録媒体７０は，書き込み可能なフラッシュメモリなどの半導体メモリである。通信インターフェース１７は，無線又は有線の他のゲーム機１００に接続でき，インターネットなどの通信ネットワークにも接続可能である。機械本体１０は，通信インターフェース１７の通信機能により，他のゲーム機１００と互いにやり取りができる。
【００６０】
操作入力部２１，カードスロット２０，及びタッチパネル４０は，インターフェース部１８に接続されている。ＲＡＭ１２上のインターフェース部１８は，プレーヤー（ユーザー）の操作に基づく操作入力部２１から指示データを格納し，タッチペン４１などにより，タッチパネルへのプレーヤーの操作に基づく指示データを格納する。それから，制御部１１は，ＲＡＭ１２に格納された指示データに従って，算術処理を実行する。
【００６１】
タッチパネル４０は，画像表示部５１及び５２の一方又は両方の表示画面の端に積層されている。従って，タッチパネル４０が積層されている，画像表示部５１及び５２の一方又は両方の表示画面の端の表示タイミングと，タッチペン４１によるタッチパネル４０への操作タイミングと，位置座標を管理，制御することにより，プレーヤーの入力操作に応じる入力情報を認識する。表示装置５０は，画像表示部５１及び５２などの複数の画像表示部を有する代わりに，１つの画像表示部により表示画面を構成してもよい。
【００６２】
インターフェース部１８は，制御部１１からの指示に従って，ＲＡＭ１２に格納されたゲームの進行を表示するデータをカードスロット２０が挿入されている記憶媒体７６に格納すること，又は，記憶媒体７０に格納された中断時のゲームデータを読み出すことなどの，処理を実行する。
【００６３】
ゲーム機１００上でゲームを楽しむための制御プログラムなどの様々なデータは，記憶媒体７０に格納されている。記憶媒体７０に格納されている制御プログラムなどの様々なデータは，記憶媒体７０に挿入されるカードスロット２０を通して制御部１１により読み出され，ＲＡＭ１２にロードされる。
【００６４】
制御部１１は，ＲＡＭ１２にロードされた制御プログラムに従って，グラフィックス処理部１５に描画指示を出力すること，又は，音響処理部１４に音響出力指示を出力することなど，様々な処理を行う。制御部１１はその様な処理を行う一方で，ゲームの進行に応じて中途で発生するデータは，作業メモリとして使用されるＲＡＭ１２に格納される。
【００６５】
結論
この働きは，変更したＶＳＩＰＬ＋＋を使用することが標準的なＣ＋＋言語でのプログラミングよりも優れているので，多くの利点を明示している。特に，本発明のＶＳＩＰＬ＋＋は，特定の実装からプログラムの機能を分離するのに効果的であることを明示している。これにより，多くの人が，本発明のＶＳＩＰＬ＋＋の実装に基づく有用なレンダリングアルゴリズム（モンテカルロパストレーサ）を書き込むことができるようになった。これは，プログラムを書くのに必要なラインコードを削減することによって明らかにされる。このアプリケーションは，単一のコードを変更することなく，マルチコアｘ８６システム，デュアルスレッドのＰｏｗｅｒＰＣシステム，セルボードエンジン，及びＮｖｉｄｉａＧＰＵを基礎としたシステム上で本発明のモンテカルロパストレーサを実行することによって，本発明のＶＳＩＰＬ＋＋コードの移植性を実証した。このアプリケーションは，ＬＩＳＰのような異国的なプログラミング言語に頼ることなく高いレベルのＡＰＩで生産性の向上が達成されえることを実証した。またそれは，高い移植性であっても高性能が達成されることを示している。
【産業上の利用可能性】
【００６６】
本発明はゲーム及びエンターテイメント産業で利用することができる。
【図１】
2011237893.tif 000003
【図２】
2011237893.tif 000004
【図３】
2011237893.tif 000005
【図４】
2011237893.tif 000006
【図５】
2011237893.tif 000007
【図６】
2011237893.tif 000008
【外国語明細書】
2011237893000001.pdf