(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023084642
(43)【公開日】2023-06-19
(54)【発明の名称】医用画像処理装置、および医用情報処理方法
(51)【国際特許分類】
G06T 15/00 20110101AFI20230612BHJP
G06T 15/08 20110101ALI20230612BHJP
A61B 6/03 20060101ALI20230612BHJP
【FI】
G06T15/00 501
G06T15/08
A61B6/03 360G
【審査請求】未請求
【請求項の数】21
【出願形態】OL
(21)【出願番号】P 2022066769
(22)【出願日】2022-04-14
(31)【優先権主張番号】17/643,031
(32)【優先日】2021-12-07
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】594164542
【氏名又は名称】キヤノンメディカルシステムズ株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】マグナス・ワレンバーグ
(72)【発明者】
【氏名】スティーブン・レイノルズ
【テーマコード(参考)】
4C093
5B080
【Fターム(参考)】
4C093AA26
4C093DA02
4C093FF43
5B080AA17
5B080BA02
5B080CA01
5B080CA04
5B080CA08
5B080DA06
5B080FA02
5B080FA15
5B080GA00
5B080GA11
(57)【要約】
【課題】大域照明(グローバルイルミネーション)を伴うボリュームレンダリングの処理を、低コストかつ高速に実行すること。
【解決手段】本実施形態に係る、医用画像をレンダリングする医用画像処理装置は、仮想メモリに記憶されるデータ構造からの読み出し及びデータ構造への書き込みを行う第1のGPUと第2のGPUとを備える。データ構造は、第1のGPUと第2のGPUとから読み込まれる。データ構造は、第1のGPUがデータ構造の第1のサブスペースに書き込み可能であって、第2のGPUがデータ構造の第2のサブスペースに書き込み可能である。第1のサブスペースと第2のサブスペースとは独立する。第1のGPUは、レンダリングの前処理に関するデータを第1のサブスペースに対して書き込む。第2のGPUは、書き込まれたデータを読み込み、書き込まれたデータに基づいて少なくとも1つの画像をレンダリングする。
【選択図】
図2
【特許請求の範囲】
【請求項1】
医用画像をレンダリングする医用画像処理装置であって、
仮想メモリに記憶されるデータ構造からの読み出し及び前記データ構造への書き込みを行う第1のGPUと第2のGPUとを備え、
前記データ構造は、
前記第1のGPUと前記第2のGPUとから読み込み可能であって、
前記第1のGPUが前記データ構造の第1のサブスペースに書き込み可能であって、前記第2のGPUが前記データ構造の第2のサブスペースに書き込み可能であり、
前記第1のサブスペースと前記第2のサブスペースとは独立し、
前記第2のGPUは、レンダリングの前処理に関するデータを前記第2のサブスペースに対して書き込み可能であって、
前記第1のGPUは、前記書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングする、
医用画像処理装置。
【請求項2】
前記データ構造は、前記第1のGPUが前記第2のサブスペースに書き込むことを禁止し、前記第2のGPUが前記第1のサブスペースに書き込むことを禁止するように構成される、
請求項1に記載の医用画像処理装置。
【請求項3】
前記データ構造は、前記第1のGPUの物理メモリ内にデータを格納するため、および前記第2のGPUの物理メモリ内にデータを格納するために構成される、
請求項1または2に記載の医用画像処理装置。
【請求項4】
前記データ構造は、仮想アドレススペースを有し、
前記第1のサブスペースは、前記仮想アドレススペースの第1のサブスペースであり、
前記第2のサブスペースは、前記仮想アドレススペースの第2のサブスペースである、
請求項1に記載の医用画像処理装置。
【請求項5】
前記第1のGPUと前記第2のGPUとの処理回路は、前記第1のGPUと前記第2のGPUとの間で、前記仮想アドレススペースのインデックス構造を同期する、
請求項4に記載の医用画像処理装置。
【請求項6】
前記第2のGPUは、前記前処理を第1のフレームレートで行い、
前記第1のGPUは、前記レンダリングを、前記第1のフレームレートより速い第2のフレームレートで行う、
請求項1に記載の医用画像処理装置。
【請求項7】
前記レンダリングの前処理は、ライティング計算を含む、
請求項1に記載の医用画像処理装置。
【請求項8】
前記ライティング計算は、グローバルイルミネーション処理を含む、
請求項7に記載の医用画像処理装置。
【請求項9】
前記書き込まれたデータは、放射照度データを含む、
請求項1に記載の医用画像処理装置。
【請求項10】
前記放射照度データは、フォトンマップ、放射照度クエリの空間ツリー、密ボリュームのうちの少なくとも1つの一部を含むまたは形成する、
請求項9に記載の医用画像処理装置。
【請求項11】
前記第2のGPUの処理回路は、前記第2のGPUのメモリから前記第1のGPUのメモリへ、前記書き込まれたデータを、仮想メモリページとして転送する、
請求項1に記載の医用画像処理装置。
【請求項12】
前記第2のGPUの前記処理回路は、前記書き込まれたデータが転送可能となることに応じて、前記書き込まれたデータを転送する、
請求項11に記載の医用画像処理装置。
【請求項13】
前記第1のGPUの処理回路は、
ライティング計算の第1の部分を実行し、
前記ライティング計算の前記第1の部分の結果を前記第1のサブスペースに書き込み、
前記第2のGPUの処理回路は、
前記ライティング計算の第2の部分を実行し、
前記ライティング計算の前記第2の部分の結果を前記第2のサブスペースに書き込み、
前記第1のGPUの処理回路または前記第2のGPUの処理回路は、前記ライティング計算の前記第1の部分の結果を前記ライティング計算の前記第2の部分の結果にマージする、
請求項1に記載の医用画像処理装置。
【請求項14】
前記データ構造に又は前記データ構造からデータが転送されるときに、ブロックアクセス順序は維持される、
請求項1に記載の医用画像処理装置。
【請求項15】
前記第1のGPUと前記第2のGPUとを接続するインターGPUリンクをさらに備え、
前記第2のGPUは、前記書き込まれたデータを前記第1のGPUに前記インターGPUリンクを介して送信する、
請求項1に記載の医用画像処理装置。
【請求項16】
前記書き込まれたデータに基づく前記少なくとも1つの画像の前記レンダリングは、仮想現実(virtual reality:VR)ヘッドセットに表示するための画像をレンダリングすることを含む、
請求項1に記載の医用画像処理装置。
【請求項17】
前記データ構造を読み込む及び書き出すように構成される少なくとも1つの更なるGPUをさらに備え、
前記データ構造は、
前記少なくとも1つの更なるGPUから読み込まれ、
前記少なくとも1つの更なるGPUが前記データ構造の少なくとも1つの更なるサブスペースに書き込み可能である、
請求項1に記載の医用画像処理装置。
【請求項18】
前記データは、医用撮像データを含む、
請求項1に記載の医用画像処理装置。
【請求項19】
医用画像をレンダリングする医用画像処理方法であって、
第1のGPUと第2のGPUとのそれぞれにより、仮想メモリに記憶されるデータ構造から個別のデータを読み出し、
前記第1のGPUと前記第2のGPUとのそれぞれにより、個別のデータを前記データ構造へ書き込むことを含み、
前記データ構造は、
前記第1のGPUと前記第2のGPUとから読み込まれ、
前記第1のGPUが前記データ構造の第1のサブスペースに書き込み可能であって、前記第2のGPUが前記データ構造の第2のサブスペースに書き込み可能であり、
前記第1のサブスペースと前記第2のサブスペースとは独立し、
前記第2のGPUは、レンダリングの前処理に関するデータを前記第2のサブスペースに対して書き込み、
前記第1のGPUは、前記書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングする、
医用画像処理方法。
【請求項20】
医用画像をレンダリングする医用画像処理装置であって、
仮想メモリに記憶されるデータ構造からの読み出し及び前記データ構造への書き込みを行うマルチカーネルGPUを備え、
前記データ構造は、
前記マルチカーネルGPUの第1のカーネルと前記マルチカーネルGPUの第2のカーネルとから読み込まれ、
前記第1のカーネルが前記データ構造の第1のサブスペースに書き込み可能であって、前記第2のカーネルが前記データ構造の第2のサブスペースに書き込み可能であり、
前記第1のサブスペースと前記第2のサブスペースとは独立し、
前記第2のカーネルは、レンダリングの前処理に関するデータを前記第2のサブスペースに対して書き込み、
前記第1のカーネルは、前記書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングする、
医用画像処理装置。
【請求項21】
ライティング計算およびレンダリング計算は、最後のライティング計算からの経過時間に基づく重み付け方法を用いて、前記第1のカーネルと前記第2のカーネルとに割り当てられる、
請求項20に記載の医用画像処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書に記載の実施形態は、概して、例えば、1つ又は複数のグラフィックスプロセッシングユニット(graphics processing unit:GPU)を用いてデータを処理するなどのデータを処理するための医用画像処理方法と医用画像処理装置に関する。
【背景技術】
【0002】
例えばボリューメトリック医用撮像データなどのボリューメトリック撮像データから、画像をレンダリングすることが知られている。ボリューメトリック撮像データセットは、画像ボリュームと称されることがある。ボリューメトリック撮像データセットは、関連するボクセル値を有する複数のボクセルであって、それぞれが医用撮像スキャン内の対応する空間ロケーションを表すボクセルを備えてよい。例えばコンピュータ断層撮影(computed tomography:CT)データの場合、各ボクセルに関連するボクセル値は、当該ボクセルにより表されるロケーションに照射されるX線放射の減衰を表すボクセル強度値であってよい。
【0003】
3次元(3D)撮像データをレンダリングして、3次元に見えるレンダリング画像を生成することが知られている。4次元(4D)撮像システムでは、異なる時間で得られた一連の3次元画像を動的にレンダリングし、例えば3D超音波動画などの動く3D画像を生成することがある。
【0004】
3Dまたは4D画像の対象が所与の位置および/または方向から照明されて見えるように、3Dまたは4D画像にライティング(Lighting:照明)効果を与えてもよい。近年、以前用いられていたものよりも物理的精度が高いモデルで照明をシミュレートする高度なライティング技術(グローバルイルミネーション、勾配フリーライティング(gradient free lighting)、サブサーフェス・スキャタリング、またはフォトンマッピングと称される)の使用により、3Dおよび4D医用画像がより写実的になっている。グローバルイルミネーションでは、光源から直接来る光による直接照明と、例えば別の表面から散乱された光による照明などの間接照明の両方を含むライティングモデルを使用してよい。
【0005】
いくつかのグローバルイルミネーション・レンダリング方法では、第1パスで光ボリュームを生成し、表示用画像をレンダリングするために第2パスで当該光ボリュームを使用するツーパス(two-pass)法を用いて、ボリューメトリック撮像データセットから画像をレンダリングする。
【0006】
第1パスは、光源からボリューメトリック撮像データセットへのトラバーサルを含んでよく、垂直光が当該ボリューメトリック撮像データセットに放射される。光源による放射照度を、ボリューメトリック画像データセットの大規模ポイントアレイの各ポイントで、当該ボクセルに割り当てられた吸収特性を用いて、当該ボクセル強度に依存して決定してよい。ポイントアレイでの放射照度値を、光ボリュームとして記憶してよい。光ボリュームをメモリに記憶してよい。光ボリュームは視点から独立してよい。
【0007】
第2のパスは、仮想カメラから光ボリュームを通過するトラバーサルを含み、グローバルライティング情報を提供するために光ボリュームを用いてよい。仮想カメラから光線が放射され(例えば、結果として生じるレンダリング画像の各ピクセルにつき1光線)、各光線に沿うポイントからの放射照度を統合して、最終レンダリング画像の画素色値を提供してよい。
【0008】
グローバルイルミネーション(Global illumination:GI)は、評判が高まりつつあり、超音波においてユビキタスであると考えられ得る。グローバルイルミネーションは、産科領域においてニッチな市場を占めると以前は考えられていたが、現在では広範囲のアプリケーションで用いられている。例えば、グローバルイルミネーションは心臓、放射線、または血管撮像に用いられることがある。グローバルイルミネーションは、3次元のドップラー撮像に用いられることがある。また、例えばコンピュータ断層撮影(computed tomography:CT)や磁気共鳴(magnetic resonance:MR)撮影など他のモダリティへのグローバルイルミネーションの使用についても関心が集まっている。
【0009】
仮想現実(virtual reality:VR)を含む広範囲のアプリケーションへのグローバルイルミネーションの使用に関心が集まっている。VRでは、視聴者の片目にそれぞれ対応する2つのビューが、フレームごとにレンダリングされる。ビューのレンダリングに用いられる視点は、視聴者の頭部位置に依存する。視聴者の頭部位置は、フレーム間でしばしば移動するだろう。
【0010】
見た目を滑らかにするために、1秒当たり60から90フレーム(frames per second:fps)のフレームレートがビューごとに使用されるだろう。遅延を最小化するように、フレームレートを選択してよい。表示画像がユーザの頭部の動作から遅れたときに生じ得るラグを回避するように、フレームレートを選択してよい。
【0011】
VRに用いられるフレームレートは、4次元撮像に典型的に用いられるフレームレートよりも高いだろう。例えば、スクリーンに表示される動画は、VRで使用される60から90fpsのフレームレートではなく、20から30fpsのフレームレートで表示されるだろう。
【0012】
高フレームレートであるため、VRはレンダリングに関して、とりわけグローバルイルミネーションに関して、厳しい用途であると考えられるだろう。複雑な光効果の決定には、ライティングへの単純なアプローチと比べて、追加的な処理能力が必要になるだろう。
【0013】
いくつかの状況では、選択されたフレームレートでグローバルイルミネーションを使用するVR画像のレンダリングは、単一のグラフィックスプロセッシングユニット(graphics processing unit:GPU)の実行能力を超えることがある。
【先行技術文献】
【非特許文献】
【0014】
【非特許文献1】Mark Harris、 Unified Memory for CUDA Beginners、 [online]、 2017年6月19日、[2021年4月6日検索]、インターネット<URL: https://developer.nvidia.com/blog/unified-memory-cuda-beginners/>
【発明の概要】
【発明が解決しようとする課題】
【0015】
本明細書及び図面に開示の実施形態が解決しようとする課題の一つは、大域照明(グローバルイルミネーション)を伴うボリュームレンダリングの処理を、低コストかつ高速に実行することにある。ただし、本明細書及び図面に開示の実施形態により解決しようとする課題は上記課題に限られない。後述する実施形態に示す各構成による各効果に対応する課題を他の課題として位置づけることもできる。
【課題を解決するための手段】
【0016】
本実施形態に係る医用画像処理装置は、医用画像をレンダリングする。医用画像処理装置は、仮想メモリに記憶されるデータ構造からの読み出し及び前記データ構造への書き込みを行う第1のGPUと第2のGPUとを備える。前記データ構造は、前記第1のGPUと前記第2のGPUとから読み込まれる。前記データ構造は、前記第1のGPUが前記データ構造の第1のサブスペースに書き込み可能であって、前記第2のGPUが前記データ構造の第2のサブスペースに書き込み可能である。前記第1のサブスペースと前記第2のサブスペースとは独立している。前記第2のGPUは、レンダリングの前処理に関するデータを前記第2のサブスペースに対して書き込む。前記第1のGPUは、前記書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングする。前記サブスペースは、前記仮想メモリにおける仮想アドレススペース(仮想アドレス空間)に対応する。前記第1のサブスペースと前記第2のサブスペースとの独立は、書き込みのアクセスが排他的に機能することにある。
【図面の簡単な説明】
【0017】
【
図1】
図1は、実施形態に従った医用撮像装置の概略図である。
【
図2】
図2は、実施形態の比較例に係り、単一のGPUにより実行されるライティング及びレンダリング処理の概略図である。
【
図3】
図3は、実施形態の比較例に係り、単一のGPUによりアクセスされるデータ構造の概略図である。
【
図4】
図4は、実施形態に従ったデータ構造の概略図であり、当該データ構造は少なくとも2つのGPUによりアクセスされる概略図である。
【
図5】
図5は、実施形態に従った2つのGPUにより実行されるライティング及びレンダリング処理の概略図である。
【
図6】
図6は、1つGPUが光シミュレーションを行い、もう1つのGPUが画像をレンダリングする実施形態の方法の概略を示すフローチャートである。
【
図7】
図7は、ライティング計算が2つのGPUで共有される実施形態の方法の概略を示すフローチャートである。
【
図8】
図8は、GPUの第1のカーネルによりレンダリングが行われ、同一GPUの第2のカーネルにより光シミュレーションが行われる実施形態の方法の概略を示すフローチャートである。
【発明を実施するための形態】
【0018】
ある実施形態は、仮想メモリに記憶されるデータ構造からの読み出し及び前記データ構造への書き込みを行うようにそれぞれ構成される第1のGPUと第2のGPUとを備えた、医用画像をレンダリングする医用画像処理装置を提供する。前記データ構造は前記第1のGPUと前記第2のGPUとから読み込まれるように構成される。前記データ構造は、前記第1のGPUが前記データ構造の第1のサブスペースに書き込み可能であり、前記第2のGPUが前記データ構造の第2のサブスペースに書き込み可能であるように構成される。前記第1のサブスペースと前記第2のサブスペースとは独立している。前記第1のGPUは、レンダリングの前処理に関するデータを前記第1のサブスペースに対して書き込むように構成される。前記第2のGPUは、前記書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングするように構成される。
【0019】
ある実施形態は、第1のGPUと第2のGPUのそれぞれにより仮想メモリに記憶されるデータ構造から個別のデータを読み出すこと、及び、第1のGPUと第2のGPUのそれぞれにより個別のデータを前記データ構造へ書き込むこと、を含む医用画像をレンダリングする医用画像処理方法を提供する。前記データ構造は前記第1のGPUと前記第2のGPUとから読み込まれるように構成される。前記データ構造は、前記第1のGPUが前記データ構造の第1のサブスペースに書き込み可能であり、前記第2のGPUが前記データ構造の第2のサブスペースに書き込み可能であるように構成される。前記第1のサブスペースと前記第2のサブスペースとは独立している。前記第1のGPUは、レンダリングの前処理に関するデータを前記第1のサブスペースに対して書き込むように構成される。前記第2のGPUは、前記書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングするように構成される。
【0020】
ある実施形態は、仮想メモリに記憶されるデータ構造からの読み出し及び前記データ構造への書き込みを行うように構成されるマルチカーネルGPUを備えた、医用画像をレンダリングする医用画像処理装置を提供する。前記データ構造は、前記GPUの第1のカーネルと第2のカーネルとから読み込まれるように構成される。前記データ構造は、前記第1のカーネルが前記データ構造の第1のサブスペースに書き込み可能であり、前記第2のカーネルが前記データ構造の第2のサブスペースに書き込み可能であるように構成される。前記第1のサブスペースと前記第2のサブスペースとは独立している。前記第1のカーネルは、レンダリングの前処理に関するデータを前記第1のサブスペースに対して書き込むように構成される。前記第2のカーネルは、前記書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングするように構成される。
【0021】
実施形態に従った装置10が、
図1に概略的に示される。装置10は、1つまたは複数の医用撮像スキャナ14により取得された撮像データのボリュームレンダリングを行うように構成される。すなわち、
図1に示す装置10は、医用画像をレンダリングする医用画像処理装置に相当する。医用撮像スキャナ14は、コンピュータ断層撮影(computed tomography:CT)スキャナ、磁気共鳴(magnetic resonance imaging:MRI)スキャナ、X線スキャナ、陽電子放出断層撮影(positron emission tomography:PET)スキャナ、単一光子放射コンピュータ断層撮影(single photon emission computed tomography:SPECT)スキャナ、または超音波スキャナ、または任意の好適なスキャナのうちの少なくとも1つを含んでよい。
図1の実施形態では、当該レンダリングは、VRヘッドセット15上のディスプレイ用画像のレンダリングである。
【0022】
装置10は、本例ではパーソナルコンピュータ(PC)またはワークステーションであるコンピューティング装置12を備える。他の実施形態では、コンピューティング装置12は、例えばサーバ、デスクトップコンピュータ、ラップトップコンピュータ、またはモバイルデバイスなどの任意の好適なコンピューティング装置であってよい。更なる実施形態では、コンピューティング装置12の機能が、2つ以上のコンピューティング装置により提供されてよい。
【0023】
コンピューティング装置12は、1つまたは複数のスキャナ14に、データ記憶部20を介して接続される。
【0024】
コンピューティング装置12は、VRヘッドセット15と、分離したディスプレイスクリーン16とに接続される。他の実施形態では、VRヘッドセット15および/またはディスプレイスクリーン16に加えて、または、それらの代わりに、任意の好適な1つまたは複数のディスプレイ装置を用いてよい。
【0025】
コンピューティング装置は、コンピュータキーボード、マウス、またはハンドコントローラなどの1つまたは複数の入力装置18に接続される。代替となる実施形態では、ディスプレイスクリーン16は、入力装置18としても機能するタッチスクリーンである。
【0026】
本実施形態では、コンピューティング装置12は、処理対象の医用撮像データをデータ記憶部20から受け取るように構成される。データ記憶部は、医用撮像スキャナ14または複数のスキャナにより取得されたデータを記憶する。すなわち、医用画像処理装置10において用いられるデータは、医用撮像スキャナ14または複数のスキャナにより取得された医用撮像データを含む。
【0027】
代替となる実施形態において、コンピューティング装置12は、データ記憶部20の代わりに、または、それに加えて、1つまたは複数の更なるデータ記憶部(図示しない)からデータを受け取る。例えば、コンピューティング装置12は、医用画像保管伝送システム(Picture Archiving and Communication System:PACS)または臨床検査値アーカイブ、電子医療記録(Electronic Medical Record:EMR)システムまたは入退院転院(Admission Discharge and Transfer:ADT)システムなどの他の情報システムの一部を形成し得る1つまたは複数の遠隔のデータ記憶部(図示しない)から医用画像データを受け取ってよい。
【0028】
更なる実施形態では、コンピューティング装置12はスキャナ14に接続されていない。コンピューティング装置12は、以前に取得した医用撮像データを、任意の好適なデータ記憶部から受け取ってよい。
【0029】
コンピューティング装置12は、中央演算処理装置(central processing unit:CPU)22と、2つのグラフィックスプロセッシングユニット(graphics processing units:(GPU)であるGPU0とGPU1を備える。他の実施形態では、コンピューティング装置12は、例えば3,4,5,6つのGPUなど、任意の好適な数のGPUを備えてよい。GPU0,1はそれぞれ、ライティング計算およびレンダリング計算を含む画像処理操作を行うように構成される処理回路(
図1には示さない)を備える。CPU22とGPUは、自動的にまたは半自動的に医用撮像データを処理するための処理リソースを共に与える。
【0030】
CPU22は、メモリ24と、ライティング計算を制御するためのライティング制御回路(ライティング制御部)26と、レンダリングを制御するためのレンダリング制御回路(レンダリング制御部)28と、レンダリング画像をVRヘッドセット15に表示するための表示回路(表示部)29と、を備える。CPU22の回路は、例えば100GB/s付近のレートでデータを送信するように構成されるメモリバス(図示しない)を介して、メモリ24から及びメモリ24へデータを転送してよい。メモリ24からのデータ読み出し及びメモリ24へのデータ書き込みを制御するために、メモリコントローラ(図示しない)を使用してよい。他の実施形態では、装置10は、それぞれが個別のメモリを有する複数のCPUを備えてよい。
【0031】
本実施形態では、回路26,28,29は、各々、実施形態の方法を実行するために実行可能であるコンピュータが読み出し可能な命令を有するコンピュータプログラムにより、コンピューティング装置12に実装される。しかし、他の実施形態では、種々の回路が、1つまたは複数の特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)またはフィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA)として実装されてよい。更なる実施形態では、任意の好適なCPUコンポーネントおよび/またはGPUコンポーネントを、1つ又は複数のASICまたはFPGAとして実装してよい。
【0032】
各GPUは、個別のGPUメモリを備える。GPU0はGPUメモリ30を、GPU1はGPUメモリ31を備える。バス19は、GPU0とGPU1とを接続する。例えば、バス19は100GB/sのNVLinkバスであってよい。バス19は、GPU0とGPU1の間のデータ転送を容易にする。他の実施形態では、GPU0とGPU1とを任意の好適な方法で接続してよい。
【0033】
GPU0,1は、例えばPCI-eバスなどの周辺機器用バス(図示しない)でCPU22に接続される。周辺機器用バスは、例えば10から64GB/s付近でデータを転送するように構成されてよい。周辺機器用バスは共有バスであってよく、GPU0,1の両方が同一バスを介して通信し、当該共有バスのデータ転送容量を共有してよい。
【0034】
また、コンピューティング装置12は、ハードドライブと、RAM、ROM、1つまたは複数の更なるデータバス、種々のデバイスドライバを含むオペレーティングシステム、および、グラフィックカードを含むハードウェア装置を含んだPCの他のコンポーネントとを有する。その様なコンポーネントは、明瞭化のために、
図1には示されない。
【0035】
図2は、実施形態の比較例に係り、単一のGPU、例えばGPU0により実行されるレンダリング処理の一例を概略的に示す。
図2のレンダリング処理では、ライティング計算がレンダリング計算よりも低いレートで行われる。
【0036】
図2のステージ40では、ライティング制御回路26は、患者の医用撮像スキャンから得られるボリューメトリック撮像データセットで第1の光シミュレーションを行うように、GPU0に命令する。当該ボリューメトリック撮像データセットは、ボクセルアレイを有する。当該ボクセルアレイは、当該患者の3次元領域の一部または全てに対応する3次元のボリュームを表す。各ボクセルは、ボリューメトリック撮像データセットの座標スペースにおける位置と、関連する信号強度とを有する。
【0037】
ステージ40の第1の光シミュレーションでは、複数の仮想光源からの光をシミュレートする。各仮想光源の位置は、ボリューメトリック撮像データセットの座標スペースに対して定義される。いくつかの実施形態では、仮想光源のうちの1つまたは複数の光源の位置が、VRヘッドセット15の位置に関してよい。例えば、仮想光源は、ヘッドセットのユーザの視点に取り付けられているようにみえる位置であってよい。当該1つまたは複数の仮想光源の位置は、VRヘッドセットの位置に基づいて、任意の好適な方法で定義されてよい。
【0038】
いくつかの実施形態では、仮想光源のうちの1つまたは複数の光源の位置は、例えばハンドコントローラなどのコントローラの位置に関してよい。
【0039】
第1の光シミュレーションは、各光源からボリューメトリック撮像データセットのボリュームを通る光線を放射することを含む。仮想光源からシミュレートされた光線のそれぞれは、光線のパスに沿って仮想光エネルギーを当該ボリュームに分配する。光線ごとに、当該光線による放射照度が、当該光線に沿った一連のサンプルポイントそれぞれで計算される。各サンプルポイントにおける放射照度は、当該サンプルポイント到着時の当該光線の仮想光エネルギーと、当該サンプルポイントでの吸収関数との積である。サンプルポイントでの放射照度は、任意の好適な方法を用いて、複数の近隣ボクセルに分配される。第1の光シミュレーションは、追加して、ダイレクトイルミネーションと同様に散乱および/または反射をシミュレートしてよい。
【0040】
ステージ40の第1の光シミュレーションの出力は、放射照度ボリュームである。放射照度ボリュームは、ボリューメトリック撮像データセットの座標スペース内のボクセルセットの各ボクセルにおける個別の放射照度値を含む。各ボクセルの関連放射照度は、当該ポイントに近いサンプルポイントで堆積された仮想光エネルギーを有する複数の光線からの放射照度コントリビューションの組み合わせであってよい。
【0041】
放射照度ボリュームは、読み書きデータ構造50に記憶される。
図2の方法では、読み書きデータ構造50は、GPU0のメモリ30において実装される。
【0042】
ステージ42では、レンダリング制御回路28は、ボリューメトリック撮像データセットとステージ40で得た放射照度ボリュームを用いて第1の画像レンダーを行うように、GPU0に命令する。第1の画像レンダーで用いられる視点位置と方向は、第1の時点でのVRヘッドセット15の位置に基づいて決定される。VRヘッドセット15の位置は、例えば、VRヘッドセット15上および/またはVRヘッドセット15の周辺環境に位置する複数のセンサーからの信号を処理するなど、任意の好適な方法で決定されてよい。
【0043】
画像は、VRヘッドセット15の各スクリーンから見ているようにレンダリングされる。VRヘッドセット15は2つのスクリーンを有し、VRヘッドセットの装着者の片目にスクリーンの1つが対応する。光線は、ボリューメトリック撮像データセットにより表されるボリュームに放射される。各光線は、レンダリングにより得られる2次元画像データセットの1画素に対応してよい。カメラから放射される所与の光線において、放射照度値は、光線に沿った一連のインクリメンタルポイントのそれぞれで、当該放射照度ボリュームの近隣ボクセルから補間放射照度を読み取って決定される。放射照度値は、読み書きデータ構造50からデータを読み込んで得られる。
【0044】
光線に沿った各インクリメンタルポイントでの放射照度を統合して、当該光線の画素色値を得る。これにより、レンダリング制御回路28は、VRヘッドセット15の各スクリーン用の個別の2次元画像データセット内の各画素の色値を決定する。
【0045】
第1の画像レンダーの出力は、一対の第1のレンダリング画像である。各レンダリング画像を表すデータが記憶される。各レンダリング画像を表すデータは、放射照度データとは別に記憶され、データ構造50には記憶されない。表示回路29は、レンダリング画像をVRヘッドセット15上に表示するように命令する。
【0046】
ステージ44では、レンダリング制御回路28は、ボリューメトリック撮像データセットとステージ40で得た放射照度ボリュームを用いて第2の画像レンダーを行うように、GPU0に命令する。第2の画像レンダーで用いられる視点位置と方向は、第1の時点よりも遅い第2の時点でのVRヘッドセット15の位置に基づいて決定される。視点位置と方向は、例えばVRヘッドセット15の動作のため、第1の時点と第2の時点の間に変化してもよいし。レンダリングは、ステージ42を参照して上述したように行われる。第2の画像レンダーの出力は一対の第2のレンダリング画像であり、これらは記憶され、表示回路29によりVRヘッドセット15上に表示される。
【0047】
ステージ46では、レンダリング制御回路28は、ボリューメトリック撮像データセットとステージ40で得た放射照度ボリュームを用いて第3の画像レンダーを行うように、GPU0に命令する。第3の画像レンダーで用いられる視点位置と方向は、第2の時点よりも遅い第3の時点でのVRヘッドセット15の位置に基づいて決定される。視点位置と方向は、例えばVRヘッドセット15の動作のため、第2の時点と第3の時点の間に変化してもよい。レンダリングは、ステージ42を参照して上述したように行われる。第3の画像レンダーの出力は一対の第3のレンダリング画像であり、これらは記憶され、表示回路29によりVRヘッドセット15上に表示される。
【0048】
なお、使用される放射照度ボリュームは、第1画像レンダーと第3画像レンダーの間で変化しない。複数の画像レンダーにライティングを提供するために、単一の光シミュレーション処理が用いられる。
【0049】
ステージ48では、ライティング制御回路26は、ボリューメトリック撮像データセットで第2の光シミュレーションを行うよう、GPU0に命令する。仮想光源の位置は、第1の光シミュレーションと第2の光シミュレーションとの間で移動していてもよい。例えば、仮想光源を視点と同一のインターアクティビティで、例えばVRヘッドセット15の動作に応じて頻繁に移動してよい。仮想光源の位置は、ハンドコントローラに関連してよい。他のシナリオでは、仮想光源を静止させボリュームを動かしてもよい。
【0050】
ステージ48の出力は、更新された放射照度ボリュームである。更新された放射照度ボリュームでは、読み書きデータ構造50に記憶される。例えば、更新された放射照度ボリュームのデータは、ステージ40で得た放射照度ボリュームのデータの一部または全てに対して上書きしてよい。
【0051】
GPU0は、更新された放射照度ボリュームを用いて、後続のフレームをレンダリングする(後続レンダーは
図2に示されない)。GPU0は、ライティング計算よりレンダリング計算を多く行うように、ライティング計算とレンダリング計算を交互に行い続ける。ライティングは、画像レンダリングよりも低いレートで更新される。
【0052】
一般に、画像レンダリングよりもライティングの更新が遅いことに、視聴者は気が付かないだろう。しかし、
図2の方法では、ライティングシミュレーションのステージを含有することで画像レンダリングに遅延が生じ、画像レンダリングは一貫したフレームレートで行われない。連続してレンダーが行われる間は、画像レンダリングは安定したレートで進むだろう。例えば、第2のレンダーが行われた時と第3のレンダーが行われた時の時間間隔は、第1のレンダーが行われた時と第2のレンダーが行われた時の時間間隔と同じであるだろう。しかし、第3のレンダーの後、GPUがライティングシミュレーションを実行できるように、レンダリングが中断される。その結果、待ち時間が生じる。ライティングシミュレーションを実行している間、画像レンダリングはVRヘッドセット15の現在の動作から遅れを取るだろう。レンダリングが光シミュレーションのステージで中断されているときは、GPU0は望ましいフレームレート(例えば、60から90fps)で画像レンダリングを提供できないだろう。
【0053】
図3は、実施形態の比較例に係り、光データヒープ50とも称することがある読み書きデータ構造50にデータボリュームを記憶する方法の概略図である。単一の特定の光データヒープ50は、ダイナミックブロック52aから52lを備える。各ブロックは、複数のデータ値を含む。例えば、ブロックは、8×8×8データ値のブロックであってよい。実際には、読み書きデータ構造50は、
図3に示されるものより数が多い多数のブロックを備えてよい。
図3では簡略化のため数を減らしている。
【0054】
インデックス構造51は、主ヒープ構造50内のデータを参照する整数インデックスを含むより小さなボリュームである。
【0055】
第1のボリュームのためのデータは、データ構造50のブロック52aから52dに記憶される。ポインタ53は、第1のボリュームのブロックを表すインデックス構造51のインデックスを、データ構造50の対応ブロックへマッピングする。実際には、第1のボリュームの各ブロックは、インデックス構造51からデータ構造50内のデータへのマッピングを与える対応ポインタを有してよい。
【0056】
データ構造50では、メモリを効率に使用できるように疎データを記憶できるようにしてよい。例えば、データ構造50は、関連データを含むブロックのみを記憶してよい。第1のボリュームの複数のブロックが同一データを有する場合は、当該データをデータ構造50の1つのブロックに記憶し、複数のポインタが当該1つのブロックを示すようにしてよい。第1のボリュームのあるブロックが関連データを有さない場合は、nullポインタを使って圧縮してよい。
【0057】
第2のボリュームのためのデータは、データ構造50のブロック52eから52hに記憶される。ポインタ55は、第2のボリュームのブロックを表すインデックス構造51のインデックスを、データ構造50の対応ブロックへマッピングする。実際には、データ構造50に記憶される第2のボリュームの各ブロックは、インデックス構造51からデータ構造50へのマッピングを与える対応ポインタを有してよい。
【0058】
インデックス構造51は、ボリュームと、これらのボリュームのためのデータが記憶されるブロックとの間のマッピングをリスト化する。当該ボリュームは、例えば、放射照度ボリュームまたはボリューメトリックデータセットであってよい。
【0059】
更なるポインタ56は次に利用可能なブロック、図示例ではブロック52iの位置を示す。
【0060】
図3のデータ構造50において、各ボリュームのためのデータは隣接するブロックのセットに記憶される。隣接するブロックのセットを使用することで、後続のデータ処理の手助けとなるだろう。
【0061】
GPU0は、従来の方法でデータ構造50から読み出しデータ構造50に書き込むように構成される。例えば、GPU0は、放射照度ボリュームのためのデータをデータ構造50に書き込み、その後、後続のレンダリングを行うときに当該放射照度ボリュームのためのデータを読み出してよい。
【0062】
図2では、データ(例えば放射照度データ)は、例えば
図3に示されるような単一のデータ構造50へ書き込み及びデータ構造50から読み出す。データ構造50は、GPU0に対してローカルにメモリ30に記憶される。
【0063】
一般的に、グローバルイルミネーション・アルゴリズムは、例えば
図3に示されるデータ構造などの単純な読み書きデータ構造を利用する。このようなデータ構造を使用することで、複数のGPU間でのグローバルイルミネーションの分配が非自明(non-trivial)となる。読み書きデータ構造へ書き込む及び読み書きデータ構造から読み出すためのアルゴリズムは、自動的にGPUにわたって拡張しないだろう。
【0064】
図1に示される装置10を検討する。CPU22はローカルメモリ24を備える。GPU0はローカルメモリ30を備える。GPU1はローカルメモリ31を備える。例えば、GPU0は、第1のGPUに相当し、GPU1は、第2のGPUに相当する。異なるローカルメモリ間の過度なデータ転送が要求されると、結果として遅延が生じる。例えば、フルセットのデータを両GPUで保持するように全データが複製される場合は、データを明示的に指定して同期を繰り返す必要があるだろう。また、バス19は、例えば、第1のGPUと第2のGPUとを接続するインターGPUリンクに対応する。
【0065】
複数のメモリのうちの任意のメモリ内のロケーションにアドレスが参照する仮想メモリを使用することが知られている。例えば、仮想メモリの仮想バッファは、CPUメモリ24にストレージを、GPUメモリ30にストレージを、GPUメモリ31にストレージを備えてよい。アドレスは、CPUメモリ24、GPUメモリ30、GPUメモリ31のうちの任意の1つまたは複数のメモリ内のロケーションを指摘してよい。ポインタは、メモリ24,30,31の任意のメモリ内の任意の場所を、またはメモリ24,30,31内のいくつかの場所を指摘する1対多ポインタであってよい。
【0066】
仮想メモリをグローバルイルミネーションへ素朴に実装すると、メモリ間の過度な転送を伴う非効率な処理が結果として生じることがある。例えば、GPU0は所与のデータ項目にアクセスしようとする。当該データ項目がGPU0のメモリ30以外のメモリにのみ記憶されている場合は、当該データ項目はそのストレージロケーションからGPU0へ複製される。典型的には、当該データ項目は、より大きなデータバッファの一部として複製される。仮想メモリの実装がデータ転送を要するインスタンスを多く含む場合、とりわけ、データ転送が周辺機器用バスを介しデータレートが限定される場合は、処理が遅くなるだろう。
【0067】
図4は、実施形態に従った読み書きデータ構造80内にデータボリュームを記憶する方法の概略図である。データ構造80は、GPU0とGPU1両方のメモリを使用する単一の仮想バッファ(例えば、仮想メモリ)として実装される。第1のGPUと第2のGPUとは、仮想メモリに記憶されるデータ構造80からの読み出し及びデータ構造への書き込みを行う。すなわち、データ構造80は、第1のGPUと第2のGPUとから読み込み可能である。
【0068】
データ構造80は、GPU0のメモリ30内に記憶されるデータとGPU1のメモリ31内に記憶されるデータを包含するアドレスの単一セットを有する。当該アドレスセットは、仮想アドレススペースまたは仮想クロスGPUアドレススペースと称されることがある。各GPUは、放射照度データを書き込むために確保されるアドレスのサブセットを有する。放射照度ストレージのインテックス構造だけがGPU間で明示的に同期され、放射照度データは、転送可能であれば直ちに仮想メモリページとして転送される状態にしておく。すなわち、第2のGPUの処理回路は、第2のGPUのメモリから第1のGPUのメモリへ、後述の第2のサブスペースに書き込まれたデータを、仮想メモリページとして転送する。例えば、第2のGPUの処理回路は、当該書き込まれたデータが転送可能となることに応じて、当該書き込まれたデータを転送する。仮想メモリページは、仮想メモリのページであって、仮想メモリのどこにデータが書きこまれているかを示す情報に対応する。
【0069】
データ構造80は、GPU0により生成されたデータが仮想アドレススペースの第1のサブスペースに記憶され、GPU1により生成されたデータが仮想アドレススペースの第2のサブスペースに記憶されるように、データを分離する。すなわち、データ構造80は、仮想アドレススペース(仮想アドレス空間)を有する。このとき、第1のサブスペースは、仮想アドレススペース(仮想アドレス空間)のサブスペースであり、また、第2のサブスペースは、仮想アドレススペース(仮想アドレス空間)のサブスペースである。
【0070】
データ構造80は、ダイナミックブロック82aから82bbを備える。各ブロックは複数のデータ値を含む。例えば、ブロックは、8×8×8データ値のブロックであってよい。実際には、読み書きデータ構造80は、
図4に示されるもの数が多い多数のブロックを備えてよい。
図4では簡略化のため数を減らしている。
【0071】
ブロック82aから82lの第1のセットは、第1のサブスペースとして説明されることがある。ブロック82mから82bbの第2のセットは、第2のサブスペースとして説明されることがある。GPU0とGPU1の両方は、第1のサブスペースと第2のサブスペースの両方への読み取りアクセスを有する。しかし、GPU0だけが第1のサブスペースへ書き込み可能であり、GPU1だけが第2のサブスペースへ書き込み可能である。すなわち、第1のGPUは、データ構造80の第1のサブスペースに書き込み可能である。また、第2のGPUは、データ構造80の第2のサブスペースに書き込み可能である。異なるGPUが書き込み可能なブロックを分離することで、不必要なデータ転送が回避されるだろう。換言すれば、第1のサブスペースと第2のサブスペースとは互いに独立している。第1のサブスペースと第2のサブスペースとの独立は、例えば、書き込みアクセスが排他的に機能することにある。
【0072】
インデックス構造81は、主ヒープ構造80内のデータを参照する整数インデックスを含むより小さなボリュームである。
【0073】
第1のボリュームのためのデータは、第1のサブスペースのブロック82aから82dに記憶される。ポインタ83は、第1のボリュームのブロックを表すインデックス構造81のインデックスを、データ構造80の対応ブロックへマッピングする。第2のボリュームのためのデータもまた、第1のサブスペースに記憶される。例えば
図3を参照して上述したように、疎データを記憶してよい。
【0074】
光ブロックマッピングはGPU0専用であるが、共通メモリを参照する。インデックス構造81は、ボリュームと、これらのボリュームのためのデータが記憶されるブロックとの間のマッピングをリスト化する。当該ボリュームは、例えば放射照度ボリュームまたはボリューメトリックデータセットであってよい。各ボリュームのためのデータは、隣接するブロックのセットに記憶される。隣接するブロックのセットを使用することで、後続のデータ処理の手助けとなるだろう。
【0075】
ポインタ86は、GPU0で次に利用可能なブロックの位置を示す。図示例では、次に利用可能なブロックはブロック82iである。ポインタ86は、書き込みポインタまたはヒープ書き込みポインタと称されることがある。ポインタ86はGPU0の次のブロックオフセットを指摘する。
【0076】
第2のサブスペースでは、更なるボリュームのためのデータがGPU1により第2のサブスペースのブロック82mから82pに記憶される。
【0077】
ポインタ89は、第3のボリュームのブロックを表すインデックス構造81のインデックスを、データ構造80の対応ブロックへマッピングする。
【0078】
ポインタ88は、GPU1で次に利用可能なブロックの位置を示す。図示例では、次に利用可能なブロックはブロック82qである。ポインタ88は、書き込みポインタまたはヒープ書き込みポインタと称されることがある。ポインタ88はGPU1の次のブロックオフセットを指摘する。
【0079】
第1のサブスペースは、GPU0(第1のGPU)により排他的に書き込まれ、第2のサブスペースは、GPU1(第2のGPU)により排他的に書き込まれる。すなわち、データ構造80は、第1のGPUが第2のサブスペースに書き込むことを禁止し、第2のGPUが第1のサブスペースに書き込むことを禁止するように構成される。各GPUは、自身のヒープ書き込みポインタ86,88を有し、ヒープ書き込みポインタ86,88は次に利用可能な当該GPUにより書き込まれるブロックを示す。GPUがデータ構造80に書き込むと、自身のヒープ書き込みポインタの位置にのみ影響する。例えば、GPU0がデータ構造80に書き込むと、ヒープ書き込みポインタ86の位置は変わるが、ヒープ書き込みポインタ88の位置は変わらない。ヒープ書き込みポインタ86,88は、パラレルなヒープ書き込みポインタであると考えられるだろう。ヒープ書き込みポインタ86,88は独立して機能する。
【0080】
GPUが排他的書き込みアクセスを有する独立領域が各GPUに与えられる。データ構造80のフルアドレス範囲は、ページ転送により両GPUからアクセス可能だが、書き込みアクセスは制限される。共通メモリ被ページマッピング領域が与えられる。単一のアドレス範囲が使用される。
【0081】
GPU0、GPU1のそれぞれは、インデックス構造81の自分用コピーを有する。所与のGPUで保持されるインデックス構造81のデータは、当該GPUにより実行されるアクションと、他のGPUのインデックス構造にインデックス構造を同期するアクションと、に応じて更新される。いくつかの実施形態では、インデックスデータをあるGPU例えばGPU1から別のGPU例えばGPU0に送信して、同期を一方向で実行する。他の実施形態では、同期は双方向であってよい。具体的には、第1のGPUと第2のGPUとの処理回路は、第1のGPUと第2のGPUとの間で、仮想アドレススペースのインデックス構造を同期する。例えば、インデックスデータはGPU0からGPU1へ送信され、更なるインデックスデータがGPU1からGPU0へ送信されてよい。例えば、第2のGPUは、第2のサブスペースに書き込まれたデータを第1のGPUに、インターGPUリンクを介して送信する。
【0082】
ページは、アクセスで明示的に又は自動的に転送されてよい。例えば、GPUが、自身のローカルメモリ内で利用できないデータ構造内のデータへのアクセスを試みる場合、当該データが保持されるメモリと当該ローカルメモリとの間で自動ページ転送が開始される。ページ転送は、
図6,7を参照して下で更に説明される。
【0083】
図5は、実施形態に従ったレンダリング方法の概略を示し、そこでは
図4を参照して上述したデータ構造80が用いられる。同様の実施形態が
図6を参照して下で詳細に説明される。
【0084】
図5の方法を、
図1の装置10により実行してよい。
図5のレンダリング方法では、レンダリングとライティングは異なるGPUに割り当てられ、最小の同期で、独立レートで実行するようにパイプライン化される。ライティング計算は、レンダリング計算よりも低いレートで、不均一な更新またはラグを生じることなく行われてよい。例えば、レンダリング計算を60から90fpsのフレームレートで更新する間に、ライティング計算を20から30fpsのフレームレートで更新してよい。すなわち、第2のGPUは、レンダリングの前処理を第1のフレームレートで行い、第1のGPUは、レンダリングを、第1のフレームレートより速い第2のフレームレートで行う。
【0085】
画像データと光データの両方の安定したストリームを可能にするために、協調マルチGPUアプローチが用いられる。一方のレンダリング専用GPU(本実施形態ではGPU0)がVRヘッドセット15用の画像を生成し、別のGPU(本実施形態ではGPU1)が異なるレートでライティングを生成する。他の実施形態では、任意の好適な数のGPUが画像を生成し、別の1つまたは1セットのGPUがライティングを生成してよい。
【0086】
画像のレンダリングが開始できるようになる前に光シミュレーションが要求されるため、両GPUは光シミュレーションを行ってスタートする。すなわち、光シミュレーションは、画像のレンダリングの前処理に相当する。
【0087】
ステージ60では、ライティング制御回路26は、第1の光シミュレーション第1の光シミュレーションを行うように、GPU0に命令する。GPU0は、第1の光シミュレーションを、患者の医用撮像スキャンから得られるボリューメトリック撮像データセットで行う。当該光シミュレーションは、ライティングシミュレーション、光計算、またはライティング計算と称されることもある。例えば、光シミュレーションにおけるライティング計算は、グローバルイルミネーション処理を含んでよい。光シミュレーションは、任意の好適な数および/または種類の仮想光源をシミュレートしてよい。光シミュレーションは、
図2を参照して上述したものと類似していてよい。例えば、第1のGPUの処理回路は、ライティング計算の第1の部分を実行し、ライティング計算の第1の部分の結果を第1のサブスペースに書き込む。なお、光シミュレーションの処理は、後続のレンダリングに対する前処理ステップとして説明されてよい。他の実施形態では、任意の他の好適な前処理ステップに対して同様の方法を使用してよい。
【0088】
ステージ60の第1の光シミュレーションの出力は、放射照度ボリュームである。本実施形態では、ステージ40の光シミュレーション処理はフォトンマッピングを含み、放射照度ボリューム(放射照度データ)はフォトンマップである。フォトンマップは疎であってよい。フォトンマップは、座標スペース内の全てのポイントにおける個々の放射照度値を含まなくてもよい。
【0089】
他の実施形態では、光シミュレーション処理はモンテカルロ・パストレーシングを含み、放射照度キャッシュが記憶される。更なる実施形態において、空間データ構造のレベルが個々の放射照度クエリを記憶する空間データ構造を用いてよい。すなわち、放射照度データは、放射照度クエリの空間ツリーであってもよい。他の実施形態では、通常の光空間マッピングが密ボリュームを読み書きする。
【0090】
図5を参照して下で更に説明するように、放射照度ボリュームは読み書きデータ構造80に記憶される。例えば、データ構造80は、第1のGPUの物理メモリ内にデータを格納するため、および第2のGPUの物理メモリ内にデータを格納するために構成される。放射照度ボリュームは、GPU0だけが書き込みアクセスを有するデータ構造80の第1のサブスペースに記憶される。当該放射照度ボリュームが記憶される物理メモリは、GPU0のメモリ30である。
【0091】
ステージ70では、ライティング制御回路26は、第2の光シミュレーション処理を行うように、GPU1に命令する。ステージ70は、少なくとも部分的にステージ60と共通する時間間隔で生じてよい。GPU1は、第2の光シミュレーションを、ステージ60で使用したものと同一のボリューメトリック撮像データセットで行う。第2の光シミュレーション処理は、任意の好適な光シミュレーション処理を用いて行われてよい。例えば、第2のGPUの処理回路は、ライティング計算の第2の部分を実行し、ライティング計算の第2の部分の結果を第2のサブスペースに書き込む。また、第2の光シミュレーション処理は、ステージ60の第1の光シミュレーション処理でシミュレートされるものとは異なる光源および/または異なるライティング効果をシミュレートするために用いられてよい。
【0092】
図5の実施形態では、
図5の方法の開始時点では、使用可能な光状態が手に入らない。そのため両GPU0,1は、連携して可能な限り急いでライティングをシミュレートする。レンダリングステージと重なる後続のライティングシミュレーションは、連携せずに、代わりに単一のGPUで実行される。
【0093】
ステージ70の第2の光シミュレーションの出力は、放射照度ボリュームである。放射照度ボリュームは、GPU1だけが書き込みアクセスを有するデータ構造80の第2のサブスペースに記憶される。すなわち、第2のGPUは、レンダリングの前処理に関するデータを第2のサブスペースに対して書き込み可能である。例えば、第2のサブスペースに書き込まれたデータは、放射照度データを含む。放射照度データは、例えば、フォトンマップ、放射照度クエリの空間ツリー、密ボリュームのうちの少なくとも1つの一部を含むまたは形成する。当該放射照度ボリュームが記憶される物理メモリは、GPU1のメモリ31である。
【0094】
矢印71に示されるように、GPU1は、ステージ70の光シミュレーションの出力の少なくとも一部をGPU0に渡す。この転送は、
図6を参照して下で詳しく説明される。当該転送は、過去にメモリ31に記憶されたデータがメモリ30に記憶されるように、バス19を介したGPU1からGPU0へのデータ転送を含んでよい。なお、データストレージの物理ロケーションにおける変更は、データ構造80における当該データの位置を変更するものではない。データ構造80の当該データの任意のものを、メモリ30に、またはメモリ31に、若しくはメモリ30とメモリ31の両方に記憶してよい。
【0095】
データ構造80の任意の部分が読み出されているとき、データ構造80の当該部分は、当該読み出しの期間はリードオンリーだとみなされる。
【0096】
ステージ61では、レンダリング制御回路28は、第1の画像レンダーを行うようにGPU0に命令する。GPU0は、ステージ60の第1の光シミュレーション処理からのデータとステージ70の第2の光シミュレーション処理からのデータを用いて、第1の画像レンダーを行う。すなわち、第1のGPUは、第2のサブスペースに書き込まれたデータを読み込み可能であって、当該読み込まれたデータに基づいて、少なくとも一つの画像をレンダリングする。具体的には、第1のGPUの処理回路または第2のGPUの処理回路は、ライティング計算の第1の部分の結果を、ライティング計算の第2の部分の結果にマージする。次いで、第1のGPUは、マージされたデータを用いて、第1の画像レンダーを行う。任意の好適なレンダリング方法、例えば、ステージ42を参照して上述したレイキャスティング法などを用いてよい。第1の画像レンダーの結果、一対の第1のレンダリング画像が得られる。表示回路29は、一対の第1のレンダリング画像をVRヘッドセット15上に表示するように命令する。
【0097】
ステージ62では、レンダリング制御回路28は、ステージ61で使用したものと同じ放射照度ボリュームを用いて第2の画像レンダーを行うようにGPU0に命令する。GPU0は、ステージ61で使用したものと同じ放射照度ボリュームを用いて、第2の画像レンダーを行う。第2の画像レンダーの結果、一対の第2のレンダリング画像が得られる。表示回路29は、一対の第2のレンダリング画像をVRヘッドセット15上に表示するように命令する。
【0098】
ステージ72では、ライティング制御回路26は、第3の光シミュレーション処理を行うようにGPU1に命令する。GPU1は、当該ボリューメトリック撮像データセットで第3の光シミュレーション処理を行う。第3の光シミュレーション処理は、画像レンダーよりも時間がかかる。ステージ72の第3の光シミュレーションの出力は、更新された放射照度ボリュームである。更新された放射照度ボリュームは、GPU1だけが書き込みアクセスを有するデータ構造80の第2のサブスペースに記憶される。GPU1は、第2の画像レンダー62が行われている間に、第3の光シミュレーション処理の出力の少なくとも一部を、バス19を介してGPU0に転送する(矢印73に示される転送)。
【0099】
ステージ63では、レンダリング制御回路28は、第3の画像レンダーを行うようにGPU0に命令する。GPU0は、ステージ73の更新された放射照度ボリュームを用いて、第3の画像レンダーを当該ボリューメトリック撮像データセットに行う。第3の画像レンダーの結果、一対の第3のレンダリング画像が得られる。表示回路29は、一対の第3のレンダリング画像をVRヘッドセット15上に表示するように命令する。
【0100】
ステージ64では、レンダリング制御回路28は、第4の画像レンダーを行うようにGPU0に命令する。GPU0は、ボリューメトリック撮像データセットとステージ73の更新された放射照度ボリュームを用いて、第4の画像レンダーを行う。第4の画像レンダーの結果、一対の第4のレンダリング画像が得られる。表示回路29は、一対の第4のレンダリング画像をVRヘッドセット15上に表示するように命令する。
【0101】
ステージ65では、レンダリング制御回路28は、第5の画像レンダーを行うようにGPU0に命令する。GPU0は、ボリューメトリック撮像データセットとステージ73の更新された放射照度ボリュームを用いて、第5の画像レンダーを行う。第5の画像レンダーの結果、一対の第5のレンダリング画像が得られる。表示回路29は、一対の第5のレンダリング画像をVRヘッドセット15上に表示するように命令する。以上のように、例えば、ステージ61乃至65において、第2のサブスペースに書き込まれたデータに基づく少なくとも1つの画像の上記レンダリングは、仮想現実(virtual reality:VR)ヘッドセット15に表示するための画像をレンダリングすることを含む。
【0102】
ステージ74では、ライティング制御回路26は、別の光シミュレーション処理を行うようにGPU1に命令する。GPU1は、GPU0により第3,4,5の画像レンダー63,64,65が行われている期間に、ステージ74の光シミュレーション処理を行う。ステージ74の光シミュレーションの出力は、別の放射照度ボリュームである。ステージ74の放射照度ボリュームは、GPU1だけが書き込みアクセスを有するデータ構造80の第2のサブスペースに記憶される。GPU1は、ステージ74の光シミュレーション処理の出力の少なくとも一部を、第5の画像レンダー65が行われている間に、バス19を介してGPU0に転送する(矢印75に示される転送)。
【0103】
その後、GPU0は、ステージ74の光シミュレーションの結果を使い、更なる画像をレンダリングする(
図4に示されない)。
【0104】
GPU0でレンダリングが行われている間にGPU1で光シミュレーションを行うことで、当該光シミュレーションはレンダリングにラグを生じることなく更新される。光シミュレーションは、レンダリングより遅いフレームレートで行われることがある。GPU0による書き込みとGPU1による書き込みで別々のサブスペースを有するデータ構造80を使用することで、GPU間の効率の良いデータ転送を提供するだろう。当該データ構造は、仮想メモリシステムを介してアクセスされる。
図6は、
図5を参照して上述したものと類似するが、より詳細にデータ転送を示す光シミュレーションおよびレンダリングの処理を示すフローチャートである。
【0105】
図6は、GPU0とGPU1により行われる複数のステップを表す。水平方向は、左から右へ時間を表す。
図6の上半分は、GPU0により行われるステップを表す。
図6の下半分は、GPU1により行われるステップを表す。
【0106】
GPU0,1のそれぞれは、任意の所与の時間に動作する2つのスレッドを有すると考えてよい。第1のスレッドは、例えばレンダーまたは光シミュレーションを計算するなど、計算を行う。第1のスレッドは、
図6ではGPU0計算及びGPU1計算として示される。第2のスレッドはデータを管理する。第2のスレッドは、
図6ではGPU0データ及びGPU1データとして示される。
【0107】
図6の第1のステージ100は、
図6に明示的に示されるものに過去に実行されたレンダリングを表す。
図6は、進行中のレンダリング処理内の期間を表し、そこでは多くのフレームが代わる代わるレンダリングされる。
【0108】
ステージ130では、ライティング制御回路26は、光シミュレーションを行うようにGPU1に命令する。当該光シミュレーションは
図6に示される第1の光シミュレーションであるが、
図6に示される期間の前に過去の光シミュレーションが行われている。GPU1は、当該光シミュレーションを行う。ステージ130の光シミュレーションの結果、早期光データ120が得られ、続いて光データ121が得られる。早期光データ120は、ステージ130の光シミュレーションにより出力されるデータの第1の部分である。光データ121は、ステージ130の光シミュレーションにより出力されるデータの第2の部分である。早期光データ120と光データ120は、データ構造80の第2のサブスペース内に、メモリ31内に記憶される。
【0109】
ステージ101では、レンダリング制御回路28は、一対の画像をレンダリングするようにGPU0に命令する。下記における検討では、ステージ101の画像を一対の第1の画像と称することがある。しかし、過去の画像が、第1の画像のレンダリングの前にGPU0によって既にレンダリングされている。GPU0は、
図6に示されていない光シミュレーション処理から得られた放射照度データを用いて、一対の第1の画像をレンダリングする。GPU0による第1の画像のレンダリングは、GPU1がステージ130の光シミュレーションを行っている期間に生じる。
【0110】
ステージ110では、GPU0は、GPU1からの第1のページ転送を要求する。第1のページ転送は、早期ページ転送と称されることがある。早期ページ転送では、早期光データ120がGPU1からGPU0へ転送され、メモリ30に記憶される。ステージ110の早期ページ転送は、ステージ101のレンダリングとほぼ同時に行われる。ステージ110の早期ページ転送は、ステージ130の光シミュレーションが完了する前に行われる。
【0111】
ステージ111では、GPU0は、GPU1からの第2のページ転送を要求する。第2のページ転送は、後期ページ転送と称されることがある。後期ページ転送では、光データ121がGPU1からGPU0へ転送され、メモリ30に記憶される。
【0112】
図6では、ステージ130の光シミュレーションからのデータは、2つのページ転送で転送される2つの部分120,121に分割される。実際には、光シミュレーションからのデータを、任意の好適な数のページ転送で転送される任意の好適な数の部分に分割してよい。GPU0により行われるページ転送は、全てページキャッシング命令を含む。
【0113】
レンダリングまたはマージ処理は、当該転送を当該レンダリングまたはマージ処理に効率良く重ねるために、ブロックアクセス順序のリストを維持してよい。すなわち、データ構造80に、又はデータ構造80からデータが転送されるときに、ブロックアクセス順序は、維持される。これは、過去のフレームから測定されてよい。レンダリングまたはマージ処理は、当該ブロックがはじめてアクセスされたときに、経過したフレーム期間をマーキングしてよい。その後、経過フレーム期間は、ブロックをアクセス順のブロックリストにソートするために用いられてよい。
【0114】
ブロックは、第2の管理スレッドからヒープポインタを観察して、光シミュレーション中にジャストインタイムで転送されてもよい。例えば、ヒープポインタは、どのブロックがスタートしたかを示してもよい。追加変数は、各ブロックが完了しているかについて、当該ブロックを横断する追加の光線がないように示してもよい。第2の管理スレッドは、スタートしたブロックをスキャンして終了ステータスを探し、その後、終了としてマーキングされたブロックを転送してもよい。いくつかの状況では、このような転送を行うために、非常に限定された同期が必要となるかもしれない。当該転送は、アクティブブロックの範囲を示すブロックヒープポインタへのアトミックアクセスと、ブロックの完了を信号化するために用いられるフラグを要求してもよい。
【0115】
ステージ102では、レンダリング制御回路28は、一対の第2の画像をレンダリングするようにGPU0に命令する。GPU0が一対の第2の画像のレンダリングを行うとき、ステージ130の光シミュレーションからのデータはまだGPU0で利用できない。GPU0は、
図6に示されていない光シミュレーション処理から得られた放射照度データを用いて、第2の画像をレンダリングする。
【0116】
ステージ103では、レンダリング制御回路28は、一対の第3の画像をレンダリングするようにGPU0に命令する。GPU0は、ステージ110及び111のページ転送で得られる放射照度データセットを用いて、一対の第3の画像をレンダリングする。
【0117】
ステージ104では、レンダリング制御回路28は、一対の第4の画像をレンダリングするようにGPU0に命令する。GPU0は、ステージ110及び111のページ転送で得られる放射照度データセットを用いて、一対の第4の画像をレンダリングする。
【0118】
再びGPU1に戻ると、ステージ140では、GPU1は、インデックス構造が両GPU0,1間でコピーされ同期されるインデックス化処理を行う。本実施形態では、GPU1のインデックス構造のインデックスデータがGPU0へ送信される。インデックス構造は、データのメモリロケーションへのマッピングを含む。当該コピーは、明示的に指定してコピーとして説明されてよい。明示的に指定したコピーでは、CPUの回路は、メモリ領域を直ちに転送するように、仮想メモリまたはページ化システムに依拠することなく直接GPUに命令する。光シミュレーション後のインデックス構造の同期を、キー同期ポイントとして考えてよい。
【0119】
ステージ150では、GPU1は、転送したページをデコミットし、転送したページに関連する物理メモリを解放する。
【0120】
ステージ131では、ライティング制御回路26は、更なる光シミュレーションを行うように、GPU1に命令する。ステージ131の更なる光シミュレーションは、ステージ130の光シミュレーションの直後に、パイプライン式にスタートしてよい。
【0121】
更なる光シミュレーション131の結果、早期光データ122が得られ、続いて光データ123が得られる。早期光データ122は、光シミュレーション131により出力されるデータの第1の部分である。光データ123は、更なる光シミュレーション131により出力されるデータの第2の部分である。早期光データ122と光データ123は、データ構造80内に、メモリ31内に記憶される。
【0122】
ステージ112では、GPU0は、早期ページ転送と称されることがあるGPU1からの第1のページ転送を要求する。早期ページ転送では、早期光データ122がGPU1からGPU0へ転送され、メモリ30に記憶される。ステージ112の早期ページ転送が行われる期間は、ステージ104での第4画像のレンダリングと重なる。ステージ112の早期ページ転送は、ステージ131の更なる光シミュレーションが完了する前に行われる。
【0123】
ステージ113では、GPU0は、後期ページ転送と称されることがあるGPU1からの第2のページ転送を要求する。後期ページ転送では、光データ123がGPU1からGPU0へ転送され、メモリ30に記憶される。
【0124】
ステージ141は、更なる光シミュレーション131が完了した後に生じる。ステージ141では、GPU1は、データをメモリロケーションへマッピングするインデックのコピーが両GPU0,1間でコピーされ同期されるインデックス化処理を行う。
【0125】
ステージ105では、レンダリング制御回路28は、ステージ112及び113のページ転送で得られる放射照度データセットを用いて、一対の第5の画像をレンダリングするよう、GPU0に命令する。
【0126】
図6の実施形態では、GPU0によりレンダリングが行われる間に、光シミュレーションがGPU1により行われる。
図2に示される処理とは異なり、光シミュレーションが行われる間にレンダリングは遅延されない。レンダリングは一貫したフレームレートで進む。光シミュレーションもまた、レンダリングに使用されるフレームレートよりも低い一貫したフレームレートで進む。データは、利用可能になるとGPU1からGPU0へ自動的に転送される。
【0127】
GPU0とGPU1間で光情報を転送する処理は、光情報を用いるレンダリング呼と同様に、GPU1により行われる光計算に重なる。
【0128】
データ構造の見た目を共通化し、転送で修正されないように見せてよい。データ構造は、完全には全データが両GPUで共通していない場合でも、全てが両GPUに存在するように見せてよい。要求されるGPUからデータ構造の部分をアクセス可能とするために、自動ページ転送が用いられる。転送は、情報内容そのものを変えるのではなく、各GPUにおける情報内容の可用性を変えるだけであると考えてよい。新しいライティングシミュレーションは結果としてデータ構造の内容の修正をもたらし、これをGPU間で転送してよい。
【0129】
図6の方法は、協調放射照度ストレージの方法を提供すると言われてもよい。書き込みは、GPUにより分離されている。GPUにより書き込みを分離することで、不必要な読み書きステージを回避するだろう。GPU間のデータ転送が最小化されるだろう。光シミュレーション及びレンダリングが、GPU間の100GB/sデータ転送能力の制約内で効率よく行われるだろう。
【0130】
多くのケースでは、レンダリング処理を単一の高性能GPUで実行するよりも、複数のGPUで実行するほうが、費用対効果において優れているだろう。データ構造80を使用することで、効率のよいマルチGPU性能が達成されるだろう。
【0131】
レンダリングは、ライティング計算とは異なる安定したレートで行われる。
図4を参照して上述したデータ構造を使用することで、当該データ構造の内容への影響を最小にして、転送が効率よく重なるだろう。
【0132】
他のアクションを実行する前に、転送の完了を待つ必要はない。GPUが、自身が所有しないデータを要求する計算を行っている場合、自動的に当該データを他のGPUから要求するだろう。
図6に関して説明された自動データ転送は、インターGPUページフォールトを最小化するように設計されるが、レンダリング方法を深刻に中断させずに、一部のページフォールトを生じさせることが可能だ。
【0133】
効率のよいページのキャッシングにより、有用なレンダリング速度が獲得できるだろう。データ構造は、光ブロックマッピングを同期し、GPU間のバックグラウンドでのページ転送を開始する機会を有する。重複転送が行われる。転送は、典型的には、レンダリングエンジンが転送データを必要とする前に行われ、レンダリングエンジンをビジーに保つ。
【0134】
また、
図5及び
図6の方法は2つより多いGPUに拡張され得る。使用されるデータ構造は、サブスペースの数がGPUの数と同じになるように、2つより多いサブスペースを含んでよい。各GPUは、データ構造のいずれの場所でも読み出し可能だが、専用のサブスペースにしか書き込めない。各サブスペースは、次に利用可能なブロックを示す個々のヒープポインタを有する。例えば、医用画像処理装置10は、データ構造80を読み込む及び書き出すように構成される少なくとも1つの更なるGPUをさらに備える。このとき、データ構造80は、当該少なくとも1つの更なるGPUから読み込まれる。また、当該少なくとも1つの更なるGPUは、データ構造80の少なくとも1つの更なるサブスペースに書き込み可能である。
【0135】
図7は、光シミュレーション及びレンダリングの処理を示すフローチャートである。
図7に示す方法では、ライティング計算がGPU0とGPU1で共有される協調ライティング計算が行われる。高価な光計算(
図7の実施形態における環境光)が、サイレントで転送およびマージされつつ、GPU0とGPU1の両方で進められる。転送とマージが生じている間に、現在または次のフレームのために他のライティング処理が行われる。
【0136】
図7は、GPU0とGPU1により行われる複数のステップを表す。水平方向は、左から右へ時間を表す。
図7の上半分は、GPU0により行われるステップを表し、GPU0計算として示される第1のスレッドと、GPU0データとして示される第2のスレッドに分かれる。
図7の下半分は、GPU1により行われるステップを表し、GPU1計算として示される第1のスレッドと、GPU1データとして示される第2のスレッドに分かれる。
【0137】
ステージ210と240は、同時または時間を重複して行われる。ステージ210では、ライティング制御回路26は、第1の環境光計算を行うようにGPU0に命令する。ステージ240では、ライティング制御回路26は、第2の環境光計算を行うようにGPU0に命令する。GPU0とGPU1による環境光の計算は協調して行う。例えば、GPU0が第1の半球の環境光計算を行い、GPU1が第2の半球の環境光計算を行うように、計算を半球で分割してよい。
【0138】
GPU0による環境光計算の結果、データ構造80内に、メモリ30内に記憶される光データ200のセットが得られる。GPU1による環境光計算の結果、まず早期光データ230が、次に光データ232が得られ、これらはデータ構造80内に、メモリ31内に記憶される。
【0139】
ステージ250は、ステージ240の後にGPU1で生じる。ステージ250では、GPU1は、データをメモリロケーションへマッピングするインデックスのコピーが両GPU0,1間でコピーされ同期されるインデックス化処理を行う。
【0140】
ステージ220では、GPU0は早期ページ転送を行う。GPU0は、早期光データ230の転送を要求する。早期光データ230はGPU1からGPU0へ転送され、メモリ30に記憶される。ステージ222では、GPU0は、後期ページ転送222を行う。GPU0は、光データ232の転送を要求する。光データ232は、GPU1からGPU0へ転送され、メモリ30に記憶される。
【0141】
ステージ212は、ステージ210に続きGPU0で行う。ステージ212では、GPU0のカーネルは、環境光の2つの部分表現をマージする環境光マージを行う。第1の部分表現は、GPU0によりステージ210で得られ、光データ200として記憶されるものである。第2の部分表現は、GPU1によりステージ240で得られ、早期および後期ページ転送220,222でGPU0へ転送されるものである。マージは、ステージ250のインデックス同期を利用する。
【0142】
ステージ242では、ライティング制御回路26は、指向性光計算を行うようにGPU1に命令する。指向性光計算は環境光計算よりも資源集約的ではないため、両GPUに分けるよりは、単一のGPUで行われる。GPU1による指向性光の計算の結果として、まずは早期光データ234が、次に光データ236が得られる。早期光データ234と光データ236はデータ構造80内に、メモリ31内に記憶される。
【0143】
ステージ252は、ステージ242の後にGPU1で生じる。ステージ250では、GPU1は、データをメモリロケーションにマッピングするインデックスのコピーが両GPU0,1の間でコピーされ同期されるインデックス化処理を行う。
【0144】
ステージ224では、GPU0は、早期ページ転送を行う。GPU0は、早期光データ234の転送を要求する。早期光データ234はGPU1からGPU0へ転送され、メモリ30に記憶される。ステージ226では、GPU0は、後期ページ転送を行う。GPU0は、光データ236の転送を要求する。光データ236はGPU1からGPU0へ転送され、メモリ30に記憶される。
【0145】
ステージ214では、レンダリング制御回路28は、第1の画像レンダーを行うようにGPU0に命令する。GPU0は、光データ200と、ステージ212の環境光マージの結果と、ステージ222の後期ページ転送からの光データと、ステージ226の後期ページ転送からの指向性光データと、を用いて一対の第1の画像をレンダリングする。
【0146】
ステージ216では、レンダリング制御回路28は、ステージ214で用いたものと同じ光データを使って第2の画像レンダーを行うように、GPU0に命令する。GPU0は、ステージ214で用いたものと同じライティング情報を使って、一対の第2の画像をレンダリングした。
【0147】
図7の実施形態では、GPU0とGPU1は、費用のかかるライティング計算において協調する。費用のかかる光計算での協調により、独立したライティングまたはレンダリングが準最適である場合には、イメージ化の時間が短縮されるだろう。
【0148】
ライティング計算は2つの部分に分割される。完了したページは重複してジャストインタイム式に転送され、その後マージされる。
【0149】
各GPUは、必要に応じてライティングタスクとレンダリング(画像生成)タスクの両方に寄与できる。
【0150】
いくつかの実施形態では、人工知能(artificial intelligence:AI)および再構成に共有マルチGPUアクセラレータを用いる。共有マルチGPUアクセラレータは、迅速なGI体験を可能にするために使用されてもよい。いくつかの状況では、他のタスクを当該システム上で実行してよく、GPUにライティングとレンダリングタスクを割り当てるアルゴリズムは、そのような他のタスクに道を譲るために、タスクおよび後続のデータ転送を動的にスケジューリングしなければならない場合がある。
【0151】
図8は、単一のGPUの複数のカーネルにより行われる処理を示すフローチャートである。他の実施形態では、複数のGPUで行われる上述した方法のうち任意のものを、マルチカーネル実行サポートで単一のGPUにおいて行ってよい。
図8に示す処理において、医用画像をレンダリングする医用画像処理装置10は、仮想メモリに記憶されるデータ構造80からの読み出し及びデータ構造80への書き込みを行うマルチカーネルGPUを備える。このとき、データ構造80は、マルチカーネルGPUの第1のカーネルとマルチカーネルGPUの第2のカーネルとから読み込まれる。
【0152】
同時マルチスレッディングを有する近年のGPUでは、単一のGPU内でタスクを重複してよい。
【0153】
図8では、GPU0の第1のカーネルがGPU0カーネル1として示され、GPU0の第2のカーネルがGPU0カーネル2として示される。例えば、第1のカーネルは、データ構造80の第1のサブスペースに書き込み可能である。また、第2のカーネルは、データ構造80の第2のサブスペースに書き込み可能である。このとき、第1のサブスペースと第2のサブスペースとは独立している。
【0154】
第1のカーネルは、
図8に示される期間の前に、数多くの過去のレンダリングステージを行う。これらの過去のレンダリングステージはステージ300として示される。その後、第1のカーネルは、
図8に示される複数のレンダリングステージ302,304,306,310、312を行う。
図8に示される期間の後のレンダリングステージが、ステージ314として示される。
【0155】
第2のカーネルは、
図8に示される期間の間に3つの光シミュレーション320,322,324を行う。例えば、第2のカーネルは、レンダリングの前処理に関するデータを第2のサブスペースに対して書き込む。
【0156】
図8の第1の画像レンダー302は、過去の光シミュレーション(図示せず)の結果を使用する。第2の画像レンダー304と第3の画像レンダー306は、それぞれ第1の光シミュレーション320の結果を使用する。第4の画像レンダー310と第5の画像レンダー312は、それぞれ第2の光シミュレーション322の結果を使用する。例えば、第1のカーネルは、第2のサブスペースに書き込まれたデータを読み込み、前記書き込まれたデータに基づいて少なくとも1つの画像をレンダリングする。
【0157】
図8の方法では、ライティングとレンダリングの両方が並列にパイプライン式に実行され、当該レンダリングは最後の完了結果を用いる。
【0158】
操作をカーネルに割り当てるときには、待ち時間を低下させる操作が有利であるだろう。レンダリングと光シミュレーションの場合、待ち時間を低下させる操作は、典型的にはレンダリングだろう。
【0159】
最後のライティング更新からの経過時間により、実行の優先度を重み付けしてよい。例えば、ライティング計算v.s.レンダリング計算でどちらの操作を行うべきか決定するために、重み付けを使用してよい。重み付けは、ライティング状態の陳腐化(staleness)と説明されることがある最後にライティング状態が計算されてからどれだけ経ったかに依存してもよく、これは、ライティング状態の陳腐化(staleness)と説明されることがある。重み付けは、生成されたレンダリング計算の待ち時間に依存してよい。重み付けは、ライティング状態の陳腐化v.s.生成されたレンダリング計算の待ち時間とのバランスを取ってもよい。重み付けスキームを駆動するために、目標画像フレームレートと目標ライティングフレームレートとを使用できる。例えば、ライティング計算およびレンダリング計算は、最後のライティング計算からの経過時間に基づく重み付け方法を用いて、第1のカーネルと第2のカーネルとに割り当てられる。
【0160】
十分なメモリが利用可能である限りは、パイプライン化から利益が得られるだろう。パイプライン化は一連の処理をステップに分割することを含んでよく、各ステップは一連の処理全体にかかる時間の一部を占める。各ステップの容量が1アイテムに限定されている場合であっても、当該処理は一度に複数のインスタンスに取り掛かってよい。例えば、過去のライティングシミュレーションの結果が現在のレンダリング処理により使用されているときに、次のライティングシミュレーションを開始してよい。パイプライン化は、処理の高速化を減じる可能性がある。
【0161】
更なる実施形態において、それぞれがマルチスレッディング可能な複数のGPUを使用してよい。
【0162】
上述した実施形態では、画像がレンダリングされるボリューメトリックデータセットは、連続する画像をレンダリングする間に変化しない静的データセットである。例えば、ボリューメトリックデータセットは、医用スキャンにより過去に得られた医用画像データセットであってよい。スキャンされた解剖学的構造を通り抜けるためにVRヘッドセットを使用してよい。他の実施形態では、レンダリングが行われている間にボリューメトリックデータセットが変化してよい。異なるボリューメトリックデータを用いて異なるレンダリングステップを行ってよい。そのような実施形態では、ボリューメトリックデータセットが変更されると、ライティング計算が自動的に再スタートされるようにしてよい。レンダリング再スタートの前に新しいライティング状態を計算するために、両または全てのGPUを使用してよい。
【0163】
仮想現実はとくに高いフレームレートを使用するアプリケーションであるため、上では仮想現実に関して実施形態を説明した。他の実施形態では、VRヘッドセットではない任意の好適なディスプレイ装置上に表示するために、画像をレンダリングしてよい。任意の好適なフレームレートで画像をレンダリングしてよい。
【0164】
上記実施形態は医用撮像データについて説明されているが、他の実施形態では、上述した方法を用いて任意のデータをレンダリングしてよい。例えば、当該データは石油やガスデータを含んでよい。当該データは3次元の顕微鏡データを含んでよい。当該データは、例えば、気候データ、地質調査、人口統計、またはゲームデータを含んでよい。
【0165】
ある実施形態は、医用画像をレンダリングする医用画像処理装置を提供する。当該医用画像処理装置は、第1のGPUと、第2のGPUと、共通メモリとを備える。当該共通メモリは、当該第1のGPUと当該第2のGPUの両方により読み出され、当該第1のGPUにより書き込み可能な第1のサブスペースと当該第2のGPUにより書き込み可能な第2のサブスペースとを有するように構成される。当該第1のサブスペースと当該第2のサブスペースは互いに独立し、当該第1のGPUはレンダリングの前処理に関するデータを当該第1のサブスペースに書き込むように構成され、当該第2のGPUは当該書き込まれたデータを読み出し、当該書き込まれたデータに基づいて画像をレンダリングする、ように構成される。
【0166】
ある実施形態は医用撮像方法を提供する。当該医用撮像方法では、単一の放射照度ストレージデータ構造が仮想クロスGPUアドレススペースに広がり、各GPUは、放射照度データを書き込むために確保されている当該アドレススペースのサブセットを得る。当該方法は、光シミュレーション方法および/またはレンダリング方法のセットを備え、放射照度ストレージのインデックス構造だけがGPU間で明示的に同期され、放射照度データは、転送可能であれば直ちに仮想メモリページとして転送される状態にしておく。
【0167】
レンダリング及びライティングを異なるGPUに割り当て、独立したレートで最小の同期を用いて実行するようにパイプライン化してよい。
【0168】
ライティング作業を部分に分けてよい。完了ページは重複してジャストインタイム式で転送され、その後単一のGPU上のカーネルでマージされてよい。
【0169】
放射照度構造は、フォトンマップ、放射照度クエリ(別名、放射照度キャッシュ)の空間ツリー、または密ボリュームであってよい。
【0170】
レンダリング/マージ処理は、当該転送を当該レンダリングまたはマージ処理に効率良く重ねるために、ブロックアクセス順序のリストを維持してよい。
【0171】
VRヘッドセットを駆動するために協調マルチGPUレンダリング方法を用いてよい。1つのGPUにユーザ動作応答性を確保するタスクを課してよい。
【0172】
第2のGPUは、システムメモリにアクセスしPCIeを介して通信するSoC内蔵GPUであってよい。
【0173】
ページを転送するために、NVLinkのようなインターGPUリンクを用いてよい。
【0174】
ブロックは、第2の管理スレッドからヒープポインタを観察して、光シミュレーション中にジャストインタイムで転送されてよい。
【0175】
AIおよび再構成に使用される共有マルチGPUアクセラレータは、迅速なGI体験を可能にするために使用されてもよい。
【0176】
ある実施形態では、マルチカーネル実行サポートを有する単一のGPUと、フォトンマップまたは密放射照度ボリュームの形式の放射照度データ構造と、マルチパス・グローバルイルミネーション・アルゴリズムと、を備える医用撮像装置を提供する。ライティングとレンダリングの両方が並列にパイプライン式に実行され、レンダリングは最後の完了結果を用いる。
【0177】
最後のライティング更新からの経過時間により、実行の優先度を重み付けしてよい。
【0178】
重み付けスキームを駆動するために、目標画像フレームレートと目標ライティングフレームレートとを使用してよい。
【0179】
ある実施形態は、複数のGPUを用いてレンダリングおよびライティング処理を行う画像レンダリング方法を提供する。当該方法は、放射照度データを生成し、仮想アドレススペースを有するストレージ構造に当該放射照度データを記憶すること;当該仮想アドレススペースの個別のサブスペースへのアクセスを各GPUに与えること;当該仮想アドレススペースのインデックス構造を当該GPU間で同期すること;当該複数のGPUを用いて当該ライティングおよびレンダリング処理を行うこと、を含む。
【0180】
当該レンダリング処理と当該ライティング処理は、当該GPUの第1のGPUと当該GPUの第2のGPUによりそれぞれ実行されてよい。
【0181】
当該第1のGPUと当該第2のGPUは、当該レンダリング処理と当該ライティング処理を異なる独立したレートで実行するように構成されてよい。
【0182】
当該方法は、放射照度データが転送可能になることに応答して、放射照度データを仮想メモリページとして転送することを更に含んでよい。
【0183】
ライティング処理の結果は、重複してジャストインタイム式で転送される完了ページに分割され、その後単一のGPU上のカーネルでマージされてよい。
【0184】
放射照度構造は、フォトンマップ、放射照度クエリ(別名、放射照度キャッシュ)の空間ツリー、または密ボリュームのいずれであってよい。
【0185】
ブロックアクセス順序を維持してよい。
【0186】
当該方法はVRヘッドセットを駆動することを更に含んでよく、当該GPUのうち少なくとも1つのGPUにユーザ動作応答性を確保するタスクを課してよい。
【0187】
特定の回路が本明細書において説明されているが、代替の実施形態において、これらの回路の内の1つまたは複数の機能を、1つの処理リソースまたは他のコンポーネントによって提供することができ、または、1つの回路によって提供される機能を、2つまたはそれより多くの処理リソースまたは他のコンポーネントを組み合わせることによって提供することができる。1つの回路への言及は、当該回路の機能を提供する複数のコンポーネントを包含し、そのようなコンポーネントがお互いに隔たっているか否かにかかわらない。複数の回路への言及は、それらの回路の機能を提供する1つのコンポーネントを包含する。
【0188】
所定の実施形態が説明されているが、これらの実施形態は、例示のためにのみ提示されており、発明の範囲を限定することは意図されない。実際は、本明細書において説明された新規な方法およびシステムは、様々な他の形態で具体化することができる。更に、本明細書において説明された方法およびシステムの形態における様々な省略、置き換え、および、変更が、発明の要旨を逸脱することなくなされてよい。添付の特許請求の範囲の請求項およびそれらに均等な範囲は、発明の範囲にはいるような形態および変更をカバーすると意図される。
【0189】
実施形態における技術的思想を医用画像処理方法で実現する場合、当該医用画像処理方法は、医用画像をレンダリングする医用画像処理方法であって、第1のGPUと第2のGPUとのそれぞれにより、仮想メモリに記憶されるデータ構造から個別のデータを読み出し、第1のGPUと第2のGPUとのそれぞれにより、個別のデータを前記データ構造へ書き込むことを含み、データ構造80は、第1のGPUと第2のGPUとから読み込まれ、第1のGPUがデータ構造80の第1のサブスペースに書き込み可能であって、第2のGPUがデータ構造80の第2のサブスペースに書き込み可能であり、第1のサブスペースと第2のサブスペースとは独立し、第2のGPUは、レンダリングの前処理に関するデータを第2のサブスペースに対して書き込み、第1のGPUは、書き込まれたデータを読み込み、当該書き込まれたデータに基づいて少なくとも1つの画像をレンダリングする。医用画像処理方法における各種処理の手順および効果は、実施形態と同様なため、説明は省略する。
【0190】
以上説明した少なくとも1つの実施形態によれば、大域照明(グローバルイルミネーション)を伴うボリュームレンダリングの処理を、低コストかつ高速に実行することができる。
【0191】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0192】
10 装置(医用画像処理装置)
12 コンピューティング装置
14 CTスキャナ
15 VRヘッドセット
16 ディスプレイスクリーン
18 入力装置
19 バス
20 データ記憶部
22 CPU
24 CPUメモリ
26 ライティング制御回路
28 レンダリング制御回路
29 表示回路
30 GPUメモリ
31 GPUメモリ