資料介紹
1 CUDA與OpenGL概述
OpenGL是圖形硬件的軟件接口,它是在SGI等多家世界著名的計(jì)算機(jī)公司的倡導(dǎo)下,以SGI的GL三維圖形庫(kù)為基礎(chǔ)制定的一個(gè)通用、共享的、開(kāi)放式的、性能卓越的三維圖形標(biāo)準(zhǔn)。OpenGL在醫(yī)學(xué)成像、地理信息、石油勘探、氣候模擬以及娛樂(lè)動(dòng)畫(huà)上有著廣泛應(yīng)用,它已經(jīng)成為高性能圖形和交互式視景處理的工業(yè)標(biāo)準(zhǔn)。
OpenGL不是一種編程語(yǔ)言,而是一種API(應(yīng)用程序編程接口)。程序員可以使用某種編程語(yǔ)言(如C或C++)編寫(xiě)繪圖軟件,其中調(diào)用了一個(gè)或多個(gè)OpenGL庫(kù)函數(shù)。作為一種API,OpenGL遵循C語(yǔ)言的調(diào)用約定。OpenGL開(kāi)發(fā)資料可參考文獻(xiàn)[1]和參考文獻(xiàn)[2]。
圖形處理器(GPU)原本是處理計(jì)算機(jī)圖形的專(zhuān)用設(shè)備,近十年來(lái),由于高清晰度復(fù)雜圖形實(shí)時(shí)處理的需求,GPU發(fā)展成為高并行度、多線(xiàn)程、多核的處理器。目前,主流GPU的運(yùn)算能力已超過(guò)主流通用CPU,從發(fā)展趨勢(shì)上來(lái)看將來(lái)差距會(huì)越拉越大。為了合理地利用GPU 資源,CUDA(統(tǒng)一計(jì)算設(shè)備架構(gòu))應(yīng)運(yùn)而生。CUDA是一種由NVIDIA推出的通用并行計(jì)算架構(gòu)[3],該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問(wèn)題,并且由于CUDA編程語(yǔ)言基于標(biāo)準(zhǔn)的C語(yǔ)言,從而大大提高了可編程性。
CUDA和OpenGL互操作的基本方式是使用CUDA生成數(shù)據(jù),然后使用OpenGL在屏幕上繪制出數(shù)據(jù)所表示的圖形。兩者的結(jié)合可以通過(guò)兩種方式來(lái)實(shí)現(xiàn):
?。?)使用OpenGL的PBO(像素緩沖區(qū)對(duì)象)。在該方式下,CUDA直接生成像素?cái)?shù)據(jù),OpenGL顯示這些像素;
?。?)使用OpenGL的VBO(頂點(diǎn)緩沖區(qū)對(duì)象)。在該方式下,CUDA生成頂點(diǎn)網(wǎng)格數(shù)據(jù),OpenGL可以根據(jù)需要繪制出平滑的表面圖或線(xiàn)框圖或一系列頂點(diǎn)。
這兩種方式的核心都是利用cudaGLMapBufferObject函數(shù)將OpenGL的緩沖區(qū)映射到CUDA的內(nèi)存空間上,這樣,程序員就可以充分利用CUDA的優(yōu)點(diǎn)寫(xiě)出性能高的程序在該內(nèi)存空間上生成數(shù)據(jù),這些數(shù)據(jù)不需要傳送,OpenGL可以直接使用。如果不使用CUDA,這些數(shù)據(jù)需要由CPU來(lái)計(jì)算產(chǎn)生。一方面,CPU的計(jì)算速度通常比GPU慢;另一方面,這些數(shù)據(jù)需要傳送到GPU上以供OpenGL顯示使用。鑒于此,當(dāng)數(shù)據(jù)量很大時(shí),CUDA和OpenGL的混合使用效果明顯。
2 CUDA和OpenGL互操作的過(guò)程[4]
CUDA和OpenGL互操作具體步驟如下:
?。?)創(chuàng)建窗口及OpenGL運(yùn)行環(huán)境。
(2)設(shè)置OpenGL視口和坐標(biāo)系。要根據(jù)繪制的圖形是2D還是3D等具體情況設(shè)置。(1)和(2)是所有OpenGL程序必需的,這里也沒(méi)什么特殊之處,需要注意的是,后面的一些功能需要OpenGL 2.0及以上版本支持,所以在這里需要進(jìn)行版本檢查。
?。?)創(chuàng)建CUDA環(huán)境。可以使用cuGLCtxCreate或cudaGLSetGLDevice來(lái)設(shè)置CUDA環(huán)境。該設(shè)置一定要放在其他CUDA的API調(diào)用之前。
(4)產(chǎn)生一個(gè)或多個(gè)OpenGL緩沖區(qū)用以和CUDA共享。使用PBO和使用VBO差不多,只是有些函數(shù)調(diào)用參數(shù)不同。以下是具體過(guò)程。
GLuint bufferID;
glGenBuffers(1,&bufferID);//產(chǎn)生一個(gè)buffer ID
glBindBuffer(parameter1,bufferID);
//將其設(shè)置為當(dāng)前非壓縮緩沖區(qū),如果是PBO方式,parameter1設(shè)置為GL_PIXEL_UNPACK_BUFFER,如果
是VBO方式,parameter1設(shè)置為GL_ARRAY_BUFFER
glBufferData(parameter1,parameter2,NULL,GL_DYNAMIC _COPY);
//給該緩沖區(qū)分配數(shù)據(jù),PBO方式下,parameter1設(shè)置為GL_PIXEL_UNPACK_BUFFER,parameter1設(shè)置為圖像的長(zhǎng)度*寬度*4。VBO方式下,parameter1設(shè)置為GL_ARRAY_BUFFER,parameter2設(shè)置為頂點(diǎn)數(shù)*16,因?yàn)槊總€(gè)頂點(diǎn)包含3個(gè)浮點(diǎn)坐標(biāo)(x,y,z)和4個(gè)顏色字節(jié)(RGBA),這樣一個(gè)頂點(diǎn)包含16 B
(5)用CUDA登記緩沖區(qū)。登記可以使用cuGLRegisterBufferObject或
cudaGLRegisterBufferObject,該命令告訴OpenGL和CUDA 驅(qū)動(dòng)程序該緩沖區(qū)為二者共同使用。
?。?)將OpenGL緩沖區(qū)映射到CUDA內(nèi)存??梢允褂胏uGLMapBufferObject或cudaGLMapBufferObject,它實(shí)際是將CUDA內(nèi)存的指針指向OpenGL的緩沖區(qū),這樣如果只有一個(gè)GPU,就不需要數(shù)據(jù)傳遞。當(dāng)映射完成后,OpenGL不能再使用該緩沖區(qū)。
?。?)使用CUDA往該映射的內(nèi)存寫(xiě)圖像數(shù)據(jù)。前面的準(zhǔn)備工作在這里真正發(fā)揮作用了,此時(shí)可以調(diào)用CUDA的kernel,像使用全局內(nèi)存一樣使用映射了的緩沖區(qū),向其中寫(xiě)數(shù)據(jù)。
?。?)取消OpenGL緩沖區(qū)映射。要等前面CUDA的活動(dòng)完成以后,使用cuGLUnmapBufferObject或cudaGLUnmapBufferObject函數(shù)取消映射。
?。?)前面的步驟完成以后就可以真正開(kāi)始繪圖了, OpenGL的PBO和VBO的繪圖方式不同,分別為以下兩個(gè)過(guò)程。
?、偃绻皇抢L制平面圖形,需要使用OpenGL的PBO及紋理。
glEnable(GL_TEXTURE_2D); //使紋理可用
glGenTextures(1,&textureID); //生成一個(gè)textureID
glBindTexture(GL_TEXTURE_2D,textureID);
//使該紋理成為當(dāng)前可用紋理
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,Width, Height,0,GL_BGRA,GL_UNSIGNED_BYTE,NULL);
//分配紋理內(nèi)存。最后的參數(shù)設(shè)置數(shù)據(jù)來(lái)源,這里設(shè)置為NULL,表示數(shù)據(jù)來(lái)自PBO,不是來(lái)自主機(jī)內(nèi)存
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN _FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_ FILTER,GL_LINEAR);//必須設(shè)置濾波模式,GL_LINEAR允許圖形伸縮時(shí)線(xiàn)性差值。如果不需要線(xiàn)性差值,可以用GL_TEXTURE_RECTANGLE_ARB代替GL_TEXTURE_2D以提高性能,同時(shí)在glTexParameteri()調(diào)用里使用GL_NEAREST替換GL_LINEAR
然后就可以指定4個(gè)角的紋理坐標(biāo),繪制長(zhǎng)方形了。
?、诶L制3D場(chǎng)景,需要使用VBO。
glEnableClientState(GL_VERTEX_ARRAY);
//使頂點(diǎn)和顏色數(shù)組可用
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3,GL_FLOAT,16,0);
//設(shè)置頂點(diǎn)和顏色指針
glColorPointer(4,GL_UNSIGNED_BYTE,16,12);
glDrawArrays(GL_POINTS,0,numVerticies);
//根據(jù)頂點(diǎn)數(shù)據(jù)繪圖,參數(shù)可以使用GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS,GL_QUAD_STRIP,GL_POLYGON
(10)前后緩存區(qū)來(lái)回切換,實(shí)現(xiàn)動(dòng)畫(huà)顯示效果。調(diào)用SwapBuffers(),緩沖區(qū)切換通常會(huì)在垂直刷新間隙來(lái)處理,因此,可以在控制面板上關(guān)掉垂直同步,使得緩沖區(qū)切換立刻進(jìn)行。
3 CUDA和OpenGL互操作性能實(shí)例分析
3.1 測(cè)試實(shí)例
這是一個(gè)相對(duì)簡(jiǎn)單的實(shí)例,其主要功能是不斷地動(dòng)態(tài)改變一個(gè)紋理圖案中每個(gè)像素的顏色并顯示。該實(shí)例使用了OpenGL的PBO并利用了OpenGL與CUDA互操作方式,紋理圖案數(shù)據(jù)的生成主要由CUDA的kernel函數(shù)完成,完整程序及CUDA的kernel函數(shù)請(qǐng)參看參考文獻(xiàn)[5]。
如果不使用CUDA,整個(gè)程序結(jié)構(gòu)變化不大,主要差別是生成該紋理圖案的函數(shù)在CPU上運(yùn)行,因而該函數(shù)及其調(diào)用方式要重寫(xiě),具體函數(shù)如下:
void kernel(uchar4*pos,unsigned int width,unsigned int height,float time)
{ unsigned int index,x,y;
for(x=0;x《width;x++)
for(y=0;y《height;y++)
{ unsigned char r=(x+(int)time)&0xff;
unsigned char g=(y+(int)time)&0xff;
unsigned char b=((x+y)+(int)time)&0xff;
index=x*width+y;
pos[index].w=0;
pos[index].x=r;
pos[index].y=g;
pos[index].z=b;
}
}
其中,參數(shù)pos表示像素?cái)?shù)組,width為圖像寬度,height為圖像高度,time是每次調(diào)用該函數(shù)時(shí)固定遞增的一個(gè)值。
3.2 測(cè)試結(jié)果
上述實(shí)例在兩種環(huán)境中做了實(shí)驗(yàn),CUDA版本都是3.2。測(cè)試環(huán)境1的主要配置如下:CPU為Intel Core i3-M380,主頻為2.53 GHz,GPU為 NVIDIA NVS 3100M,內(nèi)存為2 GB。測(cè)試環(huán)境2的主要配置如下:CPU是Intel Core2 duo E7400,主頻為2.8 GHz,GPU使用GeForce 9800 GTX+,內(nèi)存為2 GB。測(cè)試時(shí),顯示設(shè)置的垂直同步要關(guān)閉。
測(cè)試時(shí)設(shè)置紋理圖像的長(zhǎng)和寬都是512,CUDA的線(xiàn)程塊為1 024,每個(gè)線(xiàn)程塊內(nèi)的線(xiàn)程數(shù)為256,在OpenGL的顯示回調(diào)函數(shù)里統(tǒng)計(jì)f/s(刷新率),結(jié)果如表1所示。
從實(shí)驗(yàn)結(jié)果可以看出,CUDA與OpenGL結(jié)合的方式效果顯著,顯示速度比不使用CUDA提高了7~8倍。
CUDA是一種較新的方便使用GPU進(jìn)行通用計(jì)算的架構(gòu),OpenGL是圖形處理的工業(yè)標(biāo)準(zhǔn)。兩者的互操作充分利用了GPU的特點(diǎn),因而顯得非常自然和合理,實(shí)驗(yàn)驗(yàn)證了兩者配合使用的效果。該方式為高性能圖形圖像顯示及科學(xué)計(jì)算可視化提供了良好的模式架構(gòu)。
?
OpenGL是圖形硬件的軟件接口,它是在SGI等多家世界著名的計(jì)算機(jī)公司的倡導(dǎo)下,以SGI的GL三維圖形庫(kù)為基礎(chǔ)制定的一個(gè)通用、共享的、開(kāi)放式的、性能卓越的三維圖形標(biāo)準(zhǔn)。OpenGL在醫(yī)學(xué)成像、地理信息、石油勘探、氣候模擬以及娛樂(lè)動(dòng)畫(huà)上有著廣泛應(yīng)用,它已經(jīng)成為高性能圖形和交互式視景處理的工業(yè)標(biāo)準(zhǔn)。
OpenGL不是一種編程語(yǔ)言,而是一種API(應(yīng)用程序編程接口)。程序員可以使用某種編程語(yǔ)言(如C或C++)編寫(xiě)繪圖軟件,其中調(diào)用了一個(gè)或多個(gè)OpenGL庫(kù)函數(shù)。作為一種API,OpenGL遵循C語(yǔ)言的調(diào)用約定。OpenGL開(kāi)發(fā)資料可參考文獻(xiàn)[1]和參考文獻(xiàn)[2]。
圖形處理器(GPU)原本是處理計(jì)算機(jī)圖形的專(zhuān)用設(shè)備,近十年來(lái),由于高清晰度復(fù)雜圖形實(shí)時(shí)處理的需求,GPU發(fā)展成為高并行度、多線(xiàn)程、多核的處理器。目前,主流GPU的運(yùn)算能力已超過(guò)主流通用CPU,從發(fā)展趨勢(shì)上來(lái)看將來(lái)差距會(huì)越拉越大。為了合理地利用GPU 資源,CUDA(統(tǒng)一計(jì)算設(shè)備架構(gòu))應(yīng)運(yùn)而生。CUDA是一種由NVIDIA推出的通用并行計(jì)算架構(gòu)[3],該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問(wèn)題,并且由于CUDA編程語(yǔ)言基于標(biāo)準(zhǔn)的C語(yǔ)言,從而大大提高了可編程性。
CUDA和OpenGL互操作的基本方式是使用CUDA生成數(shù)據(jù),然后使用OpenGL在屏幕上繪制出數(shù)據(jù)所表示的圖形。兩者的結(jié)合可以通過(guò)兩種方式來(lái)實(shí)現(xiàn):
?。?)使用OpenGL的PBO(像素緩沖區(qū)對(duì)象)。在該方式下,CUDA直接生成像素?cái)?shù)據(jù),OpenGL顯示這些像素;
?。?)使用OpenGL的VBO(頂點(diǎn)緩沖區(qū)對(duì)象)。在該方式下,CUDA生成頂點(diǎn)網(wǎng)格數(shù)據(jù),OpenGL可以根據(jù)需要繪制出平滑的表面圖或線(xiàn)框圖或一系列頂點(diǎn)。
這兩種方式的核心都是利用cudaGLMapBufferObject函數(shù)將OpenGL的緩沖區(qū)映射到CUDA的內(nèi)存空間上,這樣,程序員就可以充分利用CUDA的優(yōu)點(diǎn)寫(xiě)出性能高的程序在該內(nèi)存空間上生成數(shù)據(jù),這些數(shù)據(jù)不需要傳送,OpenGL可以直接使用。如果不使用CUDA,這些數(shù)據(jù)需要由CPU來(lái)計(jì)算產(chǎn)生。一方面,CPU的計(jì)算速度通常比GPU慢;另一方面,這些數(shù)據(jù)需要傳送到GPU上以供OpenGL顯示使用。鑒于此,當(dāng)數(shù)據(jù)量很大時(shí),CUDA和OpenGL的混合使用效果明顯。
2 CUDA和OpenGL互操作的過(guò)程[4]
CUDA和OpenGL互操作具體步驟如下:
?。?)創(chuàng)建窗口及OpenGL運(yùn)行環(huán)境。
(2)設(shè)置OpenGL視口和坐標(biāo)系。要根據(jù)繪制的圖形是2D還是3D等具體情況設(shè)置。(1)和(2)是所有OpenGL程序必需的,這里也沒(méi)什么特殊之處,需要注意的是,后面的一些功能需要OpenGL 2.0及以上版本支持,所以在這里需要進(jìn)行版本檢查。
?。?)創(chuàng)建CUDA環(huán)境。可以使用cuGLCtxCreate或cudaGLSetGLDevice來(lái)設(shè)置CUDA環(huán)境。該設(shè)置一定要放在其他CUDA的API調(diào)用之前。
(4)產(chǎn)生一個(gè)或多個(gè)OpenGL緩沖區(qū)用以和CUDA共享。使用PBO和使用VBO差不多,只是有些函數(shù)調(diào)用參數(shù)不同。以下是具體過(guò)程。
GLuint bufferID;
glGenBuffers(1,&bufferID);//產(chǎn)生一個(gè)buffer ID
glBindBuffer(parameter1,bufferID);
//將其設(shè)置為當(dāng)前非壓縮緩沖區(qū),如果是PBO方式,parameter1設(shè)置為GL_PIXEL_UNPACK_BUFFER,如果
是VBO方式,parameter1設(shè)置為GL_ARRAY_BUFFER
glBufferData(parameter1,parameter2,NULL,GL_DYNAMIC _COPY);
//給該緩沖區(qū)分配數(shù)據(jù),PBO方式下,parameter1設(shè)置為GL_PIXEL_UNPACK_BUFFER,parameter1設(shè)置為圖像的長(zhǎng)度*寬度*4。VBO方式下,parameter1設(shè)置為GL_ARRAY_BUFFER,parameter2設(shè)置為頂點(diǎn)數(shù)*16,因?yàn)槊總€(gè)頂點(diǎn)包含3個(gè)浮點(diǎn)坐標(biāo)(x,y,z)和4個(gè)顏色字節(jié)(RGBA),這樣一個(gè)頂點(diǎn)包含16 B
(5)用CUDA登記緩沖區(qū)。登記可以使用cuGLRegisterBufferObject或
cudaGLRegisterBufferObject,該命令告訴OpenGL和CUDA 驅(qū)動(dòng)程序該緩沖區(qū)為二者共同使用。
?。?)將OpenGL緩沖區(qū)映射到CUDA內(nèi)存??梢允褂胏uGLMapBufferObject或cudaGLMapBufferObject,它實(shí)際是將CUDA內(nèi)存的指針指向OpenGL的緩沖區(qū),這樣如果只有一個(gè)GPU,就不需要數(shù)據(jù)傳遞。當(dāng)映射完成后,OpenGL不能再使用該緩沖區(qū)。
?。?)使用CUDA往該映射的內(nèi)存寫(xiě)圖像數(shù)據(jù)。前面的準(zhǔn)備工作在這里真正發(fā)揮作用了,此時(shí)可以調(diào)用CUDA的kernel,像使用全局內(nèi)存一樣使用映射了的緩沖區(qū),向其中寫(xiě)數(shù)據(jù)。
?。?)取消OpenGL緩沖區(qū)映射。要等前面CUDA的活動(dòng)完成以后,使用cuGLUnmapBufferObject或cudaGLUnmapBufferObject函數(shù)取消映射。
?。?)前面的步驟完成以后就可以真正開(kāi)始繪圖了, OpenGL的PBO和VBO的繪圖方式不同,分別為以下兩個(gè)過(guò)程。
?、偃绻皇抢L制平面圖形,需要使用OpenGL的PBO及紋理。
glEnable(GL_TEXTURE_2D); //使紋理可用
glGenTextures(1,&textureID); //生成一個(gè)textureID
glBindTexture(GL_TEXTURE_2D,textureID);
//使該紋理成為當(dāng)前可用紋理
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,Width, Height,0,GL_BGRA,GL_UNSIGNED_BYTE,NULL);
//分配紋理內(nèi)存。最后的參數(shù)設(shè)置數(shù)據(jù)來(lái)源,這里設(shè)置為NULL,表示數(shù)據(jù)來(lái)自PBO,不是來(lái)自主機(jī)內(nèi)存
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN _FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_ FILTER,GL_LINEAR);//必須設(shè)置濾波模式,GL_LINEAR允許圖形伸縮時(shí)線(xiàn)性差值。如果不需要線(xiàn)性差值,可以用GL_TEXTURE_RECTANGLE_ARB代替GL_TEXTURE_2D以提高性能,同時(shí)在glTexParameteri()調(diào)用里使用GL_NEAREST替換GL_LINEAR
然后就可以指定4個(gè)角的紋理坐標(biāo),繪制長(zhǎng)方形了。
?、诶L制3D場(chǎng)景,需要使用VBO。
glEnableClientState(GL_VERTEX_ARRAY);
//使頂點(diǎn)和顏色數(shù)組可用
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3,GL_FLOAT,16,0);
//設(shè)置頂點(diǎn)和顏色指針
glColorPointer(4,GL_UNSIGNED_BYTE,16,12);
glDrawArrays(GL_POINTS,0,numVerticies);
//根據(jù)頂點(diǎn)數(shù)據(jù)繪圖,參數(shù)可以使用GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS,GL_QUAD_STRIP,GL_POLYGON
(10)前后緩存區(qū)來(lái)回切換,實(shí)現(xiàn)動(dòng)畫(huà)顯示效果。調(diào)用SwapBuffers(),緩沖區(qū)切換通常會(huì)在垂直刷新間隙來(lái)處理,因此,可以在控制面板上關(guān)掉垂直同步,使得緩沖區(qū)切換立刻進(jìn)行。
3 CUDA和OpenGL互操作性能實(shí)例分析
3.1 測(cè)試實(shí)例
這是一個(gè)相對(duì)簡(jiǎn)單的實(shí)例,其主要功能是不斷地動(dòng)態(tài)改變一個(gè)紋理圖案中每個(gè)像素的顏色并顯示。該實(shí)例使用了OpenGL的PBO并利用了OpenGL與CUDA互操作方式,紋理圖案數(shù)據(jù)的生成主要由CUDA的kernel函數(shù)完成,完整程序及CUDA的kernel函數(shù)請(qǐng)參看參考文獻(xiàn)[5]。
如果不使用CUDA,整個(gè)程序結(jié)構(gòu)變化不大,主要差別是生成該紋理圖案的函數(shù)在CPU上運(yùn)行,因而該函數(shù)及其調(diào)用方式要重寫(xiě),具體函數(shù)如下:
void kernel(uchar4*pos,unsigned int width,unsigned int height,float time)
{ unsigned int index,x,y;
for(x=0;x《width;x++)
for(y=0;y《height;y++)
{ unsigned char r=(x+(int)time)&0xff;
unsigned char g=(y+(int)time)&0xff;
unsigned char b=((x+y)+(int)time)&0xff;
index=x*width+y;
pos[index].w=0;
pos[index].x=r;
pos[index].y=g;
pos[index].z=b;
}
}
其中,參數(shù)pos表示像素?cái)?shù)組,width為圖像寬度,height為圖像高度,time是每次調(diào)用該函數(shù)時(shí)固定遞增的一個(gè)值。
3.2 測(cè)試結(jié)果
上述實(shí)例在兩種環(huán)境中做了實(shí)驗(yàn),CUDA版本都是3.2。測(cè)試環(huán)境1的主要配置如下:CPU為Intel Core i3-M380,主頻為2.53 GHz,GPU為 NVIDIA NVS 3100M,內(nèi)存為2 GB。測(cè)試環(huán)境2的主要配置如下:CPU是Intel Core2 duo E7400,主頻為2.8 GHz,GPU使用GeForce 9800 GTX+,內(nèi)存為2 GB。測(cè)試時(shí),顯示設(shè)置的垂直同步要關(guān)閉。
測(cè)試時(shí)設(shè)置紋理圖像的長(zhǎng)和寬都是512,CUDA的線(xiàn)程塊為1 024,每個(gè)線(xiàn)程塊內(nèi)的線(xiàn)程數(shù)為256,在OpenGL的顯示回調(diào)函數(shù)里統(tǒng)計(jì)f/s(刷新率),結(jié)果如表1所示。
從實(shí)驗(yàn)結(jié)果可以看出,CUDA與OpenGL結(jié)合的方式效果顯著,顯示速度比不使用CUDA提高了7~8倍。
CUDA是一種較新的方便使用GPU進(jìn)行通用計(jì)算的架構(gòu),OpenGL是圖形處理的工業(yè)標(biāo)準(zhǔn)。兩者的互操作充分利用了GPU的特點(diǎn),因而顯得非常自然和合理,實(shí)驗(yàn)驗(yàn)證了兩者配合使用的效果。該方式為高性能圖形圖像顯示及科學(xué)計(jì)算可視化提供了良好的模式架構(gòu)。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 基于圖論原理的互操作性模型改進(jìn)方法 16次下載
- 與能源收集的互操作性
- 汽車(chē)自適應(yīng)前燈照明概述及設(shè)計(jì)方案資料下載
- OpenGL常用術(shù)語(yǔ)解析
- Qt OpenGL中文使用教程免費(fèi)下載 38次下載
- OpenGL教程之《OpenGL超級(jí)寶典》中文第七版資料免費(fèi)下載 0次下載
- AMR音頻編碼器概述及文件格式分析 16次下載
- 基于Cortex-M0微控制器概述及性能分析 6次下載
- icepeak教程概述及工程應(yīng)用 13次下載
- 基于DSRC的ETC交易互操作規(guī)范 74次下載
- 示波器探頭概述及應(yīng)用 0次下載
- TD-SCDMA和GSM系統(tǒng)間互操作研究
- 23G互操作培訓(xùn)(TD技術(shù)培訓(xùn))
- XML和VR技術(shù)在GIS中數(shù)據(jù)互操作設(shè)計(jì)與實(shí)現(xiàn)
- 基于XML的現(xiàn)場(chǎng)總線(xiàn)設(shè)備互操作性研究
- 光伏逆變器拓?fù)?b class="flag-6" style="color: red">概述及關(guān)鍵技術(shù) 518次閱讀
- 如何使DS34S132 TDM包IC與其他廠(chǎng)商的TDMoP器件互操作 1101次閱讀
- 使用CUDA進(jìn)行編程的要求有哪些 2357次閱讀
- 構(gòu)造具有動(dòng)態(tài)參數(shù)的CUDA圖表 778次閱讀
- CUDA矩陣乘法優(yōu)化手段詳解 1763次閱讀
- 如何在OpenCV中實(shí)現(xiàn)CUDA加速 4898次閱讀
- OpenGL中的深度、深度緩存、深度測(cè)試 3611次閱讀
- OpenGL繪制圖形單元的技巧介紹 2665次閱讀
- 初學(xué)OpenGL:什么是繪制上下文 2396次閱讀
- opengl主要功能介紹 7658次閱讀
- 交流充電樁的互操作性測(cè)試標(biāo)準(zhǔn) 4083次閱讀
- 淺析交流充電樁的互操作性測(cè)試標(biāo)準(zhǔn) 3278次閱讀
- 概述及匯總ARM的嵌入式操作系統(tǒng) 2951次閱讀
- LTE與eHRPD混合組網(wǎng)的互操作關(guān)鍵 4362次閱讀
- DS34S132與TDMoP器件互操作的實(shí)現(xiàn) 1899次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多