專利名稱:切片數據結構和向gpu等的安裝方法
技術領域:
本發明涉及通過基于利用粒子的流體計算方法的粒子法模擬等關于用于 鄰近搜索的計算格子的使用方法使存儲器效率良好、且高效進行鄰近粒子搜索 的切片數據結構以及在GPU等中安裝利用切片數據結構的粒子法模擬的安裝 方法。
背景技術:
"粒子法模擬"是將作為對象的物體作為多個粒子的集合來捕捉,并注目 多個粒子的每一個的行為來進行計算的模擬法。在計算機上進行計算時,在上 述粒子中,通常是使用具有一定直徑的"球"。當通過球的集合體來表現物體 的形狀時,根據該球的大小(直徑)的決定方法,物體形狀的近似度或者空間 解析度也變化。此外,通過變化球的直徑來變化空間解析度,就能夠控制基于 計算機的模擬計算中的計算精度以及計算速度。
近年來,利用上述粒子法模擬來進行流體等的行為計算、,在計算機顯示 裝置的畫面上進行流動等的流體模擬研究。作為公開了該研究的文獻,,可以舉 出田中正幸等、"利用粒子法的剛體計算方法的開發與在計算機繪圖學中的 應用"、日本機械學會、第19次計算力學演講會演講論文集、701-702頁、2006。 粒子模擬技術的研究作為計算機繪圖學(Computer Graphics, CG)的基礎的 技術是非常重要的。
利用粒子法的流體模擬的方法有MPS法(Moving Particle Semi-implicit Method)以及SPH ( Smoothed Particle Hydrodynamics )。 MPS法是解出根據連 續的公式導出的泊松(poisson)方程式來計算非壓縮流動,但SPH不課以非 壓縮條件來計算^t擬非壓縮流動。因此,MPS法比SPH計算成本高。因而, 在計算機繪圖學領域中,SPH方法成為主流。
在上述的粒子法模擬的研究中,以前大多進行了主要利用CPU來做成計 算算法的方法。但是,近年來逐漸進行利用GPU (GraphicsProcessingUnit:—
般是流處理器)的粒子法模擬的研究。GPU,為了特化為圖形的處理,成為在 內部多個處理器并行進行運算處理的構成。因而,如果是頂點的坐標變換等的 處理,則GPU能夠比CPU更高速地進行處理。此外,GPU能夠通過寫稱為 著色器的程序來控制處理,因而可以使用到圖形以外的各種處理。因此,有關 粒子法模擬的計算也可以GPU來高速化地進行,這點也嘗試過了。例如,本 發明的發明人開發了通過GPU來進行SPH的全部模擬的方法。作為公開該方 法的文獻,可列舉出T. Harada, S. Koshizuka , and Y. Kawaguchi Real-time fluid simulation coupled with cloth. In Proc. Of Theory and Practice of Computer Graphics, 2007以及T. Harada, S. Koshizuka , and Y. Kawaguchi Smoothed particle hydrodynamics on gpus. In Proc. Of Computer Computer International, pages 63-70, 2007。
在本發明的發明人提案的上述方法中,關于粒子法模擬中的鄰近粒子搜索 使用了在空間上固定的格子,因而存在存儲器的效率低,且對計算區域產生限 制的問題。
例如,使用粒子的流體計算方法,由于與使用流體計算方法相比, 一般不 使用計算格子,因而也能夠容易計算細的飛沫等,存在能夠表現實際的流體行 為的優點。另一方面,使用粒子的流體計算方法,計算粒子之間不具有連接關 系,而可動態變更粒子的配置,因而為了計算在某個坐標的物理量,需要在各 個時步中搜索在該坐標的鄰近存在的粒子的處理。
為了高效率地進行鄰近粒子搜索,在計算區域中配置格子(計算格子), 將某個粒子的序號存儲在該粒子進入的立素(存儲桶或者格子)中,由此,能 夠實現高效率。 一般以內包計算區域的方式準備計算格子。
在上述說明中,若固定化計算格子來準備計算格子,在流體的計算區域內 的粒子分布變化時,不存在粒子的立素會增多,存儲器的使用效率變低。能夠 使用模擬程序的存儲器的大小有限制,因而越減少計算格子中使用的存儲器, 在表現流體的粒子中使用的存儲器就越增力口,就能夠進行更加大規模的流體模 擬。
根據以上的問題點,期望能夠提高用于粒子法模擬的鄰近粒子搜索的計算 格子的存儲器效率。
發明內容
本發明的目的是,鑒于上述問題點,提供在基于使用粒子的流體計算方法 的粒子法模擬中,關于在鄰近粒子搜索中使用的計算格子的使用方法,能使存 儲器的使用效率良好,且使鄰近粒子搜索高效率化的切片數據結構。
此外,本發明的其他目的是,提供在GPU等中安裝利用了切片數據結構 的粒子法模擬的安裝方法,該切片數據結構是能夠在GPU等容易安裝能夠提 高存儲器的使用效率的上述切片數據結構。
本發明的切片數據結構,為了達到上述的目的,采用如下的構成。 粒子法模擬等中使用的切片數據結構,是關于在使用CPU、流處理器以
及GPU等來進行粒子法模擬的計算等中使用的空間的數據結構。該空間是由 多個立素構成的三維計算空間。在所述三維計算空間中形成與任意一個軸垂直 相交的二維切片區域(切片),由此以多個二維切片區域分割多個立素(格子)。 在多個二維切片區域中的每一個中,關于粒子存在的立素的存在范圍計算最大 和最小立素的各個的開始坐標,由此決定以矩形形狀包圍存在范圍的矩形范圍 (邊界框)。對包含在多個二維切片區域的各個的矩形范圍內的所述立素,確 保存儲器。
切片數據結構是,在上述結構中,在關于存在粒子的立素確保的存儲器的 存儲要素中,存儲特定該粒子的值(例如粒子序號等)。
切片數據結構是在上述結構中,使用定義各個二維切片區域的矩形范圍的 值、決定切片序號的值以及開頭序號來進行多個二維區域的各個矩形范圍內的 某個點存在的(x, y, z)的立素的立素序號v (x, y, z)的計算。
用于本發明的粒子法模擬等的切片數據結構,在上述結構中,粒子法模擬 的計算是鄰近粒子搜索的計算,為了使鄰近粒子搜索的計算高效率化,由二維 切片區域分割三維計算空間。
用于粒子法模擬等的切片數據結構,在上述結構中,在粒子法模擬的所述 計算中,使用流處理器或GPU來進行關于粒子法模擬的計算由二維切片區域 分割所述三維計算空間的計算。
利用了切片數據結構的粒子法模擬的向流處理器或GPU的安裝方法,是 構筑用于高效率化粒子法模擬的鄰近粒子搜索的數據結構,將為了在GPU上
使用該數據結構來進行鄰近粒子搜索所需要的數據作為陣列來存儲在視頻存
儲器中,安裝在GPU上的方法。該方法具有下述步驟在由多個立素構成的 三維空間,形成與任意一個軸垂直相交的多個二維切片區域,通過多個二維切 片區域分割多個立素的步驟;在多個二維切片區域的每一個中,關于粒子存在 的立素的存在范圍,計算最大和最小的立素的各個的開始坐標,由此決定以矩 形形狀包圍存在范圍的矩形范圍的步驟;準備至少一個一維陣列的步驟;將定 義多個二維區域的每一個最低限所必要的4個值存儲在陣列的要素(GPU時 是RGBA通道)中的步驟;準備至少一維的其他陣列的步驟;以及將粒子的 粒子序號存儲在其他陣列的步驟。
在向流處理器的安裝方法中,在向所述GPU的程序的安裝中使用著色器 時,作為陣列^f吏用紋理。
在上述安裝方法中,最低限的4個值是任意二維切片區域(i)中的開頭 的立素的序號Pi、最小立素的開始坐標bxj.^、 bzj, min、規定的軸方向的立素 數nxj。
根據本發明,不使用固定格子,而將三維計算空間分割成與一個軸垂直相 交的二維切片區域,利用規定的矩形范圍即邊界框的考慮法來限制存儲在存儲 器的立素,因而能夠高效率地利用GPU等的視頻存儲器,能夠使在利用GPU 等的粒子法模擬的鄰近粒子搜索中使用的立素(格子)的存儲效率良好,能夠 提高鄰近粒子搜索的效率。
圖1是表示執行本發明的粒子法模擬的計算機系統的基本結構的系統結 構圖2是表示安裝在計算機系統中的GPU內部的基本結構的框圖; 圖3是表示三維計算空間的立體圖4是用于對比說明現有的固定格子(A)與本實施例的格子(立素)的 決定方法(B)的圖5是表示用于在GPU上安裝基于切片數據結構的計算方法的步驟的流 程圖6是表示關于數據結構的設定階段的更加具體的步驟的流程圖7是表示關于邊界框的決定階段的更加具體的步驟的流程圖; 圖8是圖解切片的"開頭序號的計算"的考慮方法的圖; 圖9是表示關于值的讀取階段的更加具體的步驟的流程圖。
具體實施例方式
以下,根據
本發明的優選實施例。
圖1是表示實施在GPU的粒子法模擬中,在鄰近粒子搜索的計算中使用 切片數據結構,利用該切片數據結構來構筑的模擬方法的計算機系統的結構。
計算機系統IO例如利用PC (Personal Computer)而構成,并具有作為運 算處理部來進行通常的計算機運算處理的CPU11以及進行被特化為圖像處理 的運算處理的GPU12。此外,計算機系統IO作為存儲裝置具有主存儲器13A 以及視頻存儲器(VRAM) 13B,作為周邊裝置至少具有輸入裝置14以及顯 示裝置15。 CPUll、 GPU12、主存儲器13A、輸入裝置14以及顯示裝置15 經由總線16相互連接。輸入裝置14經由輸入接口 17與總線16連接,顯示裝 置15經由輸出接口 18與總線16連接。此外,視頻存儲器13B直接與GPU12 連接。通過GPU12對視頻存儲器13B進行數據存取。
另外,在本實施例中,在GPU12中應用的編程方法是利用著色器(Shader) 的結構。
CPU (中央運算處理裝置)11例如是安裝在PC等的通常的運算處理部。 此外,GPU12是"Graphics Processing Unit",執行圖像運算處理。在CPU中 例如使用"CoreX6800"。
GPU12內置多個處理器而構成,并作為并行計算機來使用。GPU12使用 例如NVIDIA公司制作的"GeForce 8800GTX"。另外,在GPU12中使用的產 品并不局限于這些,也可以使用具有類似的結構 功能的其他流處理器。該 GPU12執行存儲在主存儲器13A的鄰近粒子搜索運算程序13A-1,并執行粒 子法模擬中的鄰近粒子搜索運算。鄰近粒子搜索運算程序13A-1,進行在鄰近 粒子搜索中使用的數據結構的構筑。在后面詳細說明關于具有本發明的特征的 結構的IW居結構的構筑方法。
此外,GPU12執行存儲在主存儲器13A的通常的圖像處理程序13A-2, 并使用在鄰近粒子搜索的計算中得到、且存儲在紋理中的圖像數據來實施圖像
處理,使用生成的圖像數據在顯示裝置15的畫面上描繪(用于顯示的渲染)。 在顯示裝置15的畫面上,基于粒子法模擬的計算,顯示CG圖像。
在本實施例的以下說明中,例如將說明基于粒子法模擬的流體模擬的計算 例。在該流體模擬的運算中,主要利用GPU12的特征性的內部結構以及功能 來執行用于應用到鄰近粒子搜索的數據結構的構筑方法。如后面所述,將在本 實施例中說明的數據結構稱為"切片數據結構(或者基于切片的數據結構)"。 另外,也可以利用CPU來執行。
接著,參照圖2說明上述的GPU12內的要部的基本結構。圖2是示意性 的表示GPU12的內部結構的框圖。GPU12具有并列配置的多個處理21,并基 于根據這些處理器的并列計算處理來執行用于顯示(描繪)的渲染。尤其,根 據本實施例的在鄰近粒子搜索中使用的數據結構的構筑(立素(或者桶)的構 筑)方法,在一個立素中存在4個粒子時,將4個粒子的粒子序號寫入一個像 素的各個RGBA通道中。通過GPU12中的該立素的構筑處理來實現圖像運算 處理的高速化。
GPU12通常具有在前段側中并列配置的例如8個頂點(vertex)著色器 (VS) 22以及在后段側并列配置的例如24個分段(fragment)著色器(FS) 23。在多個頂點處理器(21A)的每個中執行的程序是頂點著色器22,在各個 分段處理器(21B)中執行的是分段著色器23。
在上面的說明中,頂點處理器是并列配置的處理器,并且是被特化成同時 處理多個頂點的坐標變換(將輸入的頂點坐標變換成被渲染得圖像空間中的坐 標)的處理器。GPU12與CPU相比能夠高速計算頂點的坐標變換,指定頂點 處理器的動作的是頂點著色器。
而且,GPU12具有深度測試功能部24、顏色蒙板功能部25以及模板測試 功能部26。此外,方塊27是著色器指令分配部。
說明作為在利用GPU12的粒子法模擬中使用的本實施例的數據結構的 "切片數據結構"的基本概念。
在基于粒子法的流體計算中,設定用于各時步中執行的鄰近粒子搜索的計 算中使用的空間(或者區域)。將該空間稱為"計算空間"。該計算空間如圖3 所示,在垂直相交的X軸、Y軸、Z軸中定義的三維空間31。在計算空間31 中準備多個格子32。多個格子32形成計算空間31,各個格子32是一邊為"d" 的小的立方體。在本實施例的說明中,將該格子32稱為"立素"。另外,"立 素"還稱為"桶"或者"格子(grid)"。
上述的多個格子即立素32具有無限寬度,在計算中在計算空間31上不變 更其配置。在本實施例的計算方法中,在形成計算空間31的上述多個立素32 中,如后面所述,在視頻存儲器13B上只保存必要的立素。
另外,如現有的計算方法,使用固定的格子時,在計算空間內規定用于計 算區域的邊界框,為了該邊界框內部的立素不管粒子的有無確保存儲器。即、 甚至對不存在粒子的立素也要確保存儲器。與此相對,在本實施例的計算方法 中,原則上確保對存在粒子的立素,確保存儲。
在本實施例的計算方法中,首先,形成關于計算空間31與一個軸垂直相 交的多個切片31a,將在計算空間31中準備的多個立素32分割成包含在多個 切片31a的各個中。各個切片31a的維次是比計算空間31的維次(3維)相 比低1維次,是2維。相當于各切片31a的厚度的尺寸大致與立素32的一邊 (d)相等。即、在切片31a垂直相交的一個軸的方向中只具有一個立素。作 為該"一個軸"可以選擇X軸、Y軸、Z軸等任意一個軸。例如,作為"一個 軸"選擇Y軸,則切片31 a成為沿著XZ規定的XZ平面方向擴展的2維空間。 以下說明將三維計算空間31分割成與Y軸垂直的2維切片31A時的例子。
將計算空間31分割成多個切片31a后,在各個切片31a中定義關于XZ 軸方向的邊界框。該邊界框表示在一個切片31a中將粒子存在的區域以用于根 據矩形區域盡可能狹窄地確定的邊界來區分的范圍。在該切片31a中定義邊界 框意味著計算XZ軸方向中的最大和最小立素的開始坐標bXi, max、 bxj, min、 bzi, max、 bzi.min。在這里"i"表示規定切片的序號。通過計算XZ方向中的最大和 最小立素的開始坐標bxj, max、 bxi, min、 bzi, max、 bzj, min,來根據下面的(公式1 ) 的(1)式和(2)式求出包含在該一個切片31a的邊界框的立素數,換言之包 含在切片31a中的XZ軸方向的立素數nXi, nzj。
(公式l)
"&,.畫-te +1 (2)
通過使用上述的nxi,nzi,能夠將序號i的切片31a中的立素數n,作為n「nxi xnzi來求出。在本實施例的計算方法中,只對各切片內的邊界框內部的區域 的立素,確保存儲器。
在這里,假定將計算空間31分解成n個切片(So, S,, S2, ...SnJ。在最 初的切片Si的開頭的立素的序號pi作為從切片So到Sw的立素的數的和來計 算下面的(公式2)的(3)式。 (公式2)
在圖4中表示使用現有的計算方法的固定格子的結構的時的邊界框的例 (A)和本實施例的計算方法的用于決定立素的邊界框的例(B)。在圖4的(A) 和(B)中如圖示定義了 X軸、Y軸、Z軸。圖4的(A)和(B)用與Z軸 方向垂直相交的一個XY軸方向的一個正方形的面(XY平面)來表示。在圖 4的(A)和(B)中,由正方形41規定的范圍內的小的正方形41a表示一個 立素,而且圓42表示在立素內存在的粒子。因此,在正方形41的范圍內包含 存在粒子42的立素和不存在粒子42的立素。
在圖4的(A)和(B)中,用與Y軸方向垂直相交的序號43表示的層 狀的部分與前面所述的切片31a相對應。
另外,在圖4中,上述的序號41a, 42, 43分別只表示一部分,省略了在 其他相同的部分標注序號的部分。
根據現有的計算方法,由于是固定格子的結構,因而構筑成如圖4的(A) 中所示,與粒子的有無無關,對包含在正方形的范圍41 (以粗的實線表示) 的全部立素確保存儲器。即甚至對不存在粒子42的多個立素也需要確保存儲 器。與此相對,在本實施例的計算方法中,構筑成對在各切片中定義的邊界 框合成而形成的區域44 (以粗的實線表示),即在以盡可能地只包含存在粒子 42的立素的方式狹窄形成的區域44所包含的立素確保存儲器。
通過如前面所述對計算空間31利用上述切片形成邊界框,按下述,計算某個點(x, y, z)存在的立素的序號。
首先,使用Y軸方向的最小立素的開始坐標bymin,通過下面的(公式3) 的(4)式來計算包含該點的切片的序號。 (公式3)
(4)
然后,通過以下(公式4)的(5)式來計算點(x, y, z)的立素序號v (x, y, z)。 (公式4)<formula>formula see original document page 12</formula>(5)
這樣,計算存在上述的點(x, y, z)的立素的立素序號。參照(5)式,
可以知道為了計算存在某個點的立素的序號而必要的值是,定義各切片的邊界
框的值bXi, min、 bZi,min、 nxi,決定切片序號的值byimin,各切片的開頭序號Pi,
還有立素的一邊的長度d。若使用利用切片的上述數據結構,則如圖4的(B)
所示能夠高效率地利用存儲器來形成立素(格子)。
根據以上所述,通過本實施例的計算方法來形成特征性的數據結構的"切
片數據結構"。為了實際構筑上述切片數據結構,決定n個切片{S0, S1, S2,..., Sn-l)的各個邊界框,根據所決定的邊界框,計算各個切片的開頭序號。然后, 求出用于計算立素序號v(x, y, z)的上述4個值(pi 、 bXi,min、 bzj,油、nxj) 后,將這些值寫入到立素中。這些4個值是用于定義邊界框的最低限度的值, 并不只限定于這些值。
然后,說明為能夠使用GPU12來執行基于上述切片數據結構的計算方法 在GPU12上安裝的機構。
在圖5中示出了使用GPU12的本實施例的計算方法的安裝。如圖5所示, 通過以下5個階段來構成在視頻存儲器13B上設定數據結構的階段(Sll )、 在分割計算空間31的各個切片31a上決定邊界框的階段(S12)、計算在各個 切片31a上的粒子的開頭序號的階段(S13)、存儲值的階段(S14)以及讀取 值的階段(S15)。
另外,關于上述"切片數據結構",通過"切片數據結構的構筑"的觀點 以及"切片數據結構的利用"的觀點能夠把握。根據"切片數據結構的構筑"
的觀點,"切片數據結構的構筑"是在上述5個階段S11 S15中,通過"數據 結構的設定"、"邊界框的決定"、"開頭序號的計算"以及"值的存儲"來構成。 此外,根據"切片數據結構的利用"的觀點,在上述5個階段S11 S15中, 由"值的讀取"來構成。
以下,分別說明在5個階段S11 S15中的處理內容。
數據結構的設定的階段S11:
最初,參照圖6的處理,說明用于能夠在GPU12上安裝的數據結構。為 了在GPU12上進行計算,有必要將關于計算空間中的切片、立素以及粒子的 數據作為紋理13B-1來存儲在視頻存儲器13B。
如前面所述,計算空間31被分割為多個切片31a,因而為了存儲各切片 31a所需要的值,即前面所述的4個值pi 、 bxi,min、 bzi,min、 nxi,準備1維紋 理(步驟S21)。當多個切片31a的數超過一維紋理的大小的最大值時,也可 以作成二維紋理。各切片31a所必要的4個值pi 、 bxi, min、 bzi, min、 nxi存儲 在一維紋理的一個RGBA通道中(步驟S22 )。由于利用了 RGBA通道進行存 儲,因而通常以1個紋理就能夠充分應對。
此外,為了存儲保持在格子即立素的值,準備二維紋理(步驟S23)。在 本實施例的例中,在立素中保持的值是粒子序號。利用二維紋理來存儲保持在 立素中的粒子序號(步驟S24)。假定將存儲粒子序號的二維紋理稱之為"索 引池紋理"。在本實施例的例中,對一個立素分配一個紋理元素。此時,二維 紋理的紋理元素數成為能夠存儲在索引池紋理中的立素的最大值。
決定邊界框的階段S12:
然后,參照圖7的處理流程,說明邊界框的決定步驟。為了決定切片31a 中的邊界框,首先計算在各切片中的最大和最小立素的開始坐標(步驟S31 )。 在該計算的處理中,通過根據粒子的Y坐標值計算該粒子所屬的切片的序號, 而且計算在各切片中存在的粒子的坐標的最大值和最小值來進行。由于使用了 GPU12,所以,在該GPU12中,對每一個粒子分配一個頂點,寫入到準備的 前面所述的一維紋理中(步驟S32)。
在GPU12的頂點著色器中,根據粒子的Y坐標值使用上述的式(4)來 計算切片序號(i),即計算在上述一維紋理中寫入的位置(步驟S33),并且在 計算的該位置中寫入頂點(步驟S34)。然后,在GPU12的分段著色器中,將 X坐標值以及Z坐標值作為"顏色"來輸出(步驟S35)。另外,使用GPU12 的字母混合的功能可以進行最大值和最小值的選擇。在具有如字母混合的,比 較來自幾個處理器的被寫入的值的功能的流處理器中,通過連續進行對存儲器 的寫入來執行上述動作。在具有原子操作能力的流處理器中,該能力能夠用于 比較通過幾個處理器寫入的值的功能中。
計算開頭序號的階段S13:
通常,通過使用在多個切片31a每個中的XZ坐標的最大值和最小值能夠 計算在該切片上的立素的數。開頭序號的計算,在各切片中必須要計算式(3)。 當流處理器能夠高效計算(式(3))時,使用該功能。但是,在GPU中使用 著色器來執行時不利用該功能,而必須采用其他的作法。對上述式(3)的計 算處理,關于切片i讀取從no到n"的值后進行計算。假定切片的總數是m, 根據現有的計算方法需要m ((m+l )) /2次的存儲器存取,因而由于存儲器傳 送速度會限制處理速度。
因此,在本實施例的計算方法中,利用了 GPU12的頂點著色器的功能來 執行。
即、讀取在切片i中存在的立素的數ni,加到從(i+l)到第m個切片的 開頭序號陣列中。由此,能夠用m次的存儲器存取計算開頭序號。該處理就 是所謂的"Scattering Operation",在使用GPU12時能夠使用頂點著色器來進 行。假設有m個切片時,該處理是寫入到要素數m的一維陣列中的處理。即、 使用GPU12時,就成為在由m個紋理元素形成的一維文理中寫入的處理。在 從第(i+l )到第m個切片的開頭序號陣列中寫入在切片i中存在的立素數ni 的處理,能夠通過描繪第(i+l)個紋理元素到第m個的紋理元素的線段來進 行。
上述處理,才艮據GPU12的功能,通過分^:著色器功能來將切片內的立素 數作為顏色來輸出。而且,通過根據GPU12的字母混合功能來進行加算處理, 能夠評價式(3),并計算各切片的開頭序號。
圖8是圖解上述切片的"開端序號的計算"的考慮方法的圖。圖8的(A) 與前面所述的圖4的(B)的內容相同。圖8的(B),在對應的位置以數值表 示了在(A)中所示的從下到上例如10層切片的每一個中的邊界框內所包含 的立素的數。圖8的(C)是用解加算各切片的立素的數的狀態的圖。圖 8的(D)是從下側到上側,表示關于切片的總數的累計值的圖。
存儲值的階段S14:
儲在索引池紋理中。 讀取值的階段S15:
參照圖9所示的處理流程。根據粒子的Y坐標值計算切片序號(步驟S41 ), 讀取該切片的開頭序號pi以及在切片上的最小值bxi, min、 bzi, min、在切片上的 X軸上的立素nxi (步驟S42)。利用這些值計算上述式(5),計算分配給該粒 子的立素的索引(步驟S43)。通過對一個粒子分配一個頂點,并讀取該紋理 元素的粒子序號,由此進行對對應于計算出的索引的紋理元素的值的寫入(步 驟S44 )。
存儲在存在某個坐標的立素的值的讀取,是通過根據該坐標與存儲值時同 樣地計算立素的索引,即計算存儲器的地址來進行。
在利用切片數據結構的本實施例的計算方法中,能夠用GPU12進行存儲 了粒子序號的格子數據結構的構筑以及直到粒子序號的存儲的處理,由此用 GPU12能夠進行粒子法模擬的全部過程。
本實施例的計算方法,不使用固定格子,而不受計算區域的限制,因而即 使在廣的計算空間也能夠容易進行計算,通過排除不存在粒子的立素能夠高效 率地使用存儲器。而且,即使增加粒子的個數,也能夠使用通常使用的存儲器 來執行粒子法模擬。
在前面所述的實施例中,說明了在GPU中的程序安裝中使用著色器 (shader)時的例,但并不局限于這些,也可以使用其他程序模塊來安裝。目 前,在GPU上的程序安裝中除上述的著色以外,可以使用CUDA、 CTM、 Brook 等。這些,在將GPU作為流處理器(StreamingProcessor)來使用時,在編程 語言的意義上是共通的。在使用前面所述的著色器(shader)的例中,為了在GPU上的計算,將計算空間中的切片、立素以及關于粒子的數據作為紋理
13B-1來存儲在視頻存儲器13 B中,但在使用CUDA等時,代替紋理一般來 說可使用"陣列"。
權利要求
1. 一種切片數據結構,其為空間數據結構,其特征在于,所述空間是由多個立素構成的三維計算空間,通過形成在所述三維計算空間中與任意一個軸垂直相交的二維區域,通過所述多個二維切片區域分割所述多個立素,在所述多個二維切片區域中的每一個中,關于粒子存在的立素的存在范圍計算最大和最小立素的各個的開始坐標,由此決定以矩形形狀包圍所述存在范圍的矩形范圍,關于包含在所述多個二維切片區域的各個的所述矩形范圍內的所述立素,確保存儲器。
2. 根據權利要求1所述的切片數據結構,其特征在于, 在關于所述粒子存在的所述立素所確保的所述存儲器的存儲要素中,存儲特定所述粒子的值。
3. 根據權利要求1所述的切片數據結構,其特征在于, 使用定義各個所述二維切片區域的所述矩形范圍的值、決定切片序號的值以及開頭序號來進行所述多個二維區域的各個的所述矩形范圍內的某個點(x, y, z)存在的所述立素的立素序號v (x, y, z)的計算。
4. 根據權利要求1所述的切片數據結構,其特征在于, 所述粒子法^f莫擬的所述計算是鄰近粒子搜索的計算,為了高效地進行所述鄰近粒子搜索的計算,由所述二維切片區域分割所述三維計算空間。
5. 根據權利要求1~4任意一項所述的切片數據結構,其特征在于,關于所述粒子法模擬的所述計算由所述二維切片區域分割所述三維計算 空間的計算,使用GPU來進行。
6. —種利用切片數據結構的粒子法模擬的向流處理器的安裝方法該方法 是,構筑用于高效地進行粒子法模擬的鄰近粒子搜索的計算的數據結構,將為 了使用該數據結構在流處理器上進行鄰近粒子搜索所需要的數據作為陣列(array)存儲在視頻存儲器中后,安裝在流處理器中的方法,其特征在于, 具有下述步驟形成在由多個立素構成的三維空間中與任意一個軸垂直相交的多個二維切片區域,通過所述多個二維切片區域分割所述多個立素的步驟;在所述多個二維切片區域的每一個中,關于粒子存在的立素的存在范圍計算最大和最小的立素的各個開始坐標,由此決定以矩形形狀包圍所述存在范圍的矩形范圍的步驟;準備至少一維陣列的步驟;將定義所述多個二維區域的每一個最低限所必要的4個值存儲在所述陣 列的要素中的步驟;準備至少一維的其他陣列的步驟;以及 將所述粒子的粒子序號存儲在所述其他的陣列的步驟。
7. 根據權利要求6所述的利用切片數據結構的粒子法模擬的向流處理器 的安裝方法,其特征在于,最低限的所述4個值是任意二維區域(i)中的開頭的立素的序號pi、最 小立素的開始坐標bxj, min、 bzj, min、規定的軸方向的立素數nxj。
8. 根據權利要求6所述的利用切片數據結構的粒子法模擬的向流處理器 的安裝方法,其特征在于,所述流處理器是GPU,所述陣列的所述要素是RGBA通道。
9. 根據權利要求8所述的利用切片數據結構的粒子法模擬的向流處理器 的安裝方法,其特征在于,在向所述GPU的程序的安裝中使用著色器時,作為所述陣列使用紋理。
10. 根據權利要求1所述的切片數據結構,其特征在于, 所述空間是在粒子法模擬的計算中使用的空間。
全文摘要
本發明提供一種切片數據結構以及利用切片數據結構的粒子法模擬的向GPU等的安裝方法。用于使用流處理器或GPU等的粒子法模擬等的切片數據結構,是關于計算空間的數據結構,空間是由多個立素構成的三維計算空間,形成與Y軸垂直相交的多個切片,通過多個二維切片分割多個立素,在多個二維切片中的每一個,對于存在粒子的立素的存在范圍計算最大和最小立素的各個開始坐標,決定以矩形形狀包圍存在范圍的邊界框,對包含在多個二維切片區域的各個邊界框內的立素,確保存儲器。
文檔編號G06F19/00GK101388108SQ20081014471
公開日2009年3月18日 申請日期2008年7月30日 優先權日2007年9月11日
發明者原田隆宏 申請人:普羅姆泰克軟件公司