




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
GPU并行計算與CUDA編程第10課本周介紹內容CUDA與OpenGL混合編程做圖形渲染OpenGL介紹OpenGL安裝CUDA混合編程代碼例程:simpleGL.cuOpenGL介紹無論是對于游戲軟件還是高性能計算,OpenGL是可視化程序最通用的編程接口。作為一種標準化接口,開發(fā)者可以使用OpenGL制作出運行在任何支持OpenGL硬件和操作系統(tǒng)的圖形和特效,使得3D游戲軟件可以移植到多種平臺上。參考《WhateEveryCUDAProgrammerShouldKnowaboutOpenGL》:“參考資料/1055_gtc09.pdf”O(jiān)penGL介紹-CUDA和OpenGL的分離從編程角度
當OpenGL將內存映射入CUDA內存空間之前,OpenGL的專家可以盡量地利用舊式程序和他們的專業(yè)知識,以及所有強大的工具,如GLSL(OpenGLShadingLanguage)和Cg。當緩沖區(qū)映射入CUDA內存空間之后,CUDA編程者則可以展現(xiàn)他們的計算才能。從開發(fā)投入的角度
該映射方式可有效利用現(xiàn)有的傳統(tǒng)OpenGL軟件。從本質上說,通過將緩沖區(qū)映射到CUDA存儲空間,DUDA代碼可以逐步加入到現(xiàn)有的傳統(tǒng)支持庫與應用程序中。該特性使得一些組織可以在較低風險下測試CUDA代碼,從這種編程方法中獲得了性能和編程效率上的好處。OpenGL介紹:GLUTOpenGL實用工具(OpenGLUtilityToolkit,GLUT)是用于編寫獨立于窗口系統(tǒng)的OpenGL程序的編程接口。使用GLUT編寫的程序可以在多種平臺上編譯。NVIDIA在CUDASDK示例中也是用了GLUT。
功能:
1.進行OpenGL渲染的窗口
2.處理毀掉驅動事件
3.鼠標和鍵盤輸入設備OpenGL安裝:Ubuntu下安裝OpenGL圖形庫1.安裝OpenGLLibrarysudoapt-getinstalllibgl1-mesa-dev2.安裝OpenGLUtilities(OpenGLUtilities是一組建構于OpenGLLibrary之上的工具組,提供許多很方便的函式,使OpenGL更強大且更容易使用。)sudoapt-getinstalllibglu1-mesa-dev3.安裝OpenGLUtilityToolkit(OpenGLUtilityToolkit是建立在OpenGLUtilities上面的工具箱,除了強化了OpenGLUtilities的不足之外,也增加了OpenGL對于視窗界面支援)sudoapt-getinstallfreeglut3-dev4.安裝glew(glew是一個跨平臺的C++庫,是一個OpenGL圖形接口擴展庫)sudoapt-getinstalllibglew-dev5.安裝glx(glx是linux下OpenGL的XWindowSystem接口擴展庫,它允許通過x調用OpenGL庫)sudoapt-getinstalllibgl1-mesa-glxOpenGL不同頭文件及庫的說明參考:“參考資料/OpenGL不同頭文件及庫的說明.pdf”混合編程:通過OpenGL映射GPU內存從CUDA編程者角度看,OpenGL在GPU上創(chuàng)建并管理的通過緩沖的內存區(qū)域稱為緩沖對象。CUDAKernel將一段緩沖映射如CUDA內存空間,可實現(xiàn)CUDA和OpenGL的互操作。當釋放該緩沖或解除映射時,其控制權重回OpenGL。因為不需要進行內存拷貝,所以映射是一種處理速度很快的低開銷操作,實現(xiàn)OpenGL和CUDA之間的高速互操作能力。與OpenGL進行互操作,需要在所有其他Runtime調用之前用cudaGLSetGLDevice()函數(shù)來指定CUDA設備。注意,cudaSetDevice()和cudaGLSetGLDevice()是互相排斥的。一旦對某個資源對CUDA進行了注冊,便可以根據需要通過cudaGraphicsMapResources()和sourceSetMapFlags()方法可用于設備提示標識(例如,只讀,只寫等),以便CUDA驅動程序進行優(yōu)化資源管理。混合編程:CUDA使用的兩種OpenGL內存對象像素緩沖對象(PBO):OpenGL中用于存儲像素的一段內存。2D圖像是由多個像素和顏色點組成的。CUDA程序映射PBO,并逐個像素生成或修改圖像,然后利用OpenGL進行顯示。向量緩沖對象(VBO):OpenGL中用于存儲3D向量的一段內存。CUDA程序映射VBO,生成或修改3D位置信息,之后OpenGL將這些網格渲染成彩色表面、3D線框圖像或3D點集。
glBindBuffer()
glBufferData()/glBufferSubData()/glGetBufferSubData()
glMapBuffer()/glUnmapBuffer()混合編程:步驟CUDA和OpenGL互操作具體步驟如下:(1)創(chuàng)建窗口及OpenGL運行環(huán)境。(2)設置OpenGL視口和坐標系。要根據繪制的圖形是2D還是3D等具體情況設置。(1)和(2)是所有OpenGL程序必需的,這里也沒什么特殊之處,需要注意的是,后面的一些功能需要OpenGL2.0及以上版本支持,所以在這里需要進行版本檢查。(3)創(chuàng)建CUDA環(huán)境。可以使用cuGLCtxCreate或cudaGLSetGLDevice來設置CUDA環(huán)境。該設置一定要放在其他CUDA的API調用之前。(4)產生一個或多個OpenGL緩沖區(qū)用以和CUDA共享。使用PBO和使用VBO差不多,只是有些函數(shù)調用參數(shù)不同。以下是具體過程。GLuintbufferID;glGenBuffers(1,&bufferID);//產生一個bufferIDglBindBuffer(parameter1,bufferID);//將其設置為當前非壓縮緩沖區(qū),如果是PBO方式,parameter1設置為GL_PIXEL_UNPACK_BUFFER,如果是VBO方式,parameter1設置為GL_ARRAY_BUFFERglBufferData(parameter1,parameter2,NULL,GL_DYNAMIC_COPY);//給該緩沖區(qū)分配數(shù)據,PBO方式下,parameter1設置為GL_PIXEL_UNPACK_BUFFER,parameter2設置為圖像的長度*寬度*4。VBO方式下,parameter1設置為GL_ARRAY_BUFFER,parameter2設置為頂點數(shù)*16,因為每個頂點包含3個浮點坐標(x,y,z)和4個顏色字節(jié)(RGBA),這樣一個頂點包含16B混合編程:步驟(5)用CUDA登記緩沖區(qū)。登記可以使用cuGLRegisterBufferObject或cudaGLRegisterBufferObject,該命令告訴OpenGL和CUDA驅動程序該緩沖區(qū)為二者共同使用。(6)將OpenGL緩沖區(qū)映射到CUDA內存??梢允褂胏uGLMapBufferObject或cudaGLMapBufferObject,它實際是將CUDA內存的指針指向OpenGL的緩沖區(qū),這樣如果只有一個GPU,就不需要數(shù)據傳遞。當映射完成后,OpenGL不能再使用該緩沖區(qū)。(7)使用CUDA往該映射的內存寫圖像數(shù)據。前面的準備工作在這里真正發(fā)揮作用了,此時可以調用CUDA的kernel,像使用全局內存一樣使用映射了的緩沖區(qū),向其中寫數(shù)據。(8)取消OpenGL緩沖區(qū)映射。要等前面CUDA的活動完成以后,使用cuGLUnmapBufferObject或cudaGLUnmapBufferObject函數(shù)取消映射。(9)前面的步驟完成以后就可以真正開始繪圖了,OpenGL的PBO和VBO的繪圖方式不同,分別為以下兩個過程。①如果只是繪制平面圖形,需要使用OpenGL的PBO及紋理。glEnable(GL_TEXTURE_2D);//使紋理可用glGenTextures(1,&textureID);//生成一個textureIDglBindTexture(GL_TEXTURE_2D,textureID);//使該紋理成為當前可用紋理glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,Width,Height,0,GL_BGRA,GL_UNSIGNED_BYTE,NULL);//分配紋理內存。最后的參數(shù)設置數(shù)據來源,這里設置為NULL,表示數(shù)據來自PBO,不是來自主機內存glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//必須設置濾波模式,GL_LINEAR允許圖形伸縮時線性差值。如果不需要線性差值,可以用GL_TEXTURE_RECTANGLE_ARB代替GL_TEXTURE_2D以提高性能,同時在glTexParameteri()調用里使用GL_NEAREST替換GL_LINEAR然后就可以指定4個角的紋理坐標,繪制長方形了。②繪制3D場景,需要使用VBO。glEnableClientState(GL_VERTEX_ARRAY);//使頂點和顏色數(shù)組可用glEnableClientState(GL_COLOR_ARRAY);glVertexPointer(3,GL_FLOAT,16,0);//設置頂點和顏色指針glColorPointer(4,GL_UNSIGNED_BYTE,16,12);glDrawArrays(GL_POINTS,0,numVerticies);//根據頂點數(shù)據繪圖,參數(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ū)來回切換,實現(xiàn)動畫顯示效果。調用SwapBuffers(),緩沖區(qū)切換通常會在垂直刷新間隙來處理,因此,可以在控制面板上關掉垂直同步,使得緩沖區(qū)切換立刻進行。代碼例程simpleGL.cu(356-394行):1、2345678代碼例程9本周作業(yè)“代碼/test_openGL_cuda.cu”是一個簡單版的使用CUDA計算出一條sin曲線各點的函數(shù)值,
存入數(shù)組,
然后用OpenGL顯示,請把該程序功能改為一個使用VBO顯示的3D效果。法律聲明【聲明】本視頻和幻燈片為煉數(shù)成金網絡課程的教學資料,所有資料只能在課程內使用,不得在課程以外范圍散播,違者將可能被追究法律和經濟責任。課程詳情訪問煉數(shù)成金培訓網站
煉數(shù)成金逆向收費式網絡課程Dataguru(煉數(shù)成金)是專業(yè)數(shù)據分析網站,提供教育,媒體,內容,社區(qū),出版,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 全國粵教版信息技術七年級下冊第二章第八節(jié)《活動3:機器人尋寶比賽》教學設計
- Unit 5 Safety Lesson 2(教學設計)-2024-2025學年人教新起點版英語四年級上冊
- 因數(shù)中間或末尾有零的乘法水平測驗模擬題大全附答案
- Module2 Unit2 What's your name?(教學設計)-2024-2025學年外研版(三起)英語三年級上冊
- 威海溫室玻璃大棚施工方案
- 2025至2031年中國自動稱重定量打包機行業(yè)投資前景及策略咨詢研究報告
- 西藏自治區(qū)林芝市第二高級中學高中信息技術:3.1 文本信息的加工與表達 教學設計
- 2025至2031年中國電腦雕刻卡行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國多功能制藥試驗機行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國鋁合金架翻轉板數(shù)據監(jiān)測研究報告
- GA/T 2016-2023公安視頻圖像信息系統(tǒng)運維管理規(guī)范
- 第1課+古代亞非(教學設計)【中職專用】《世界歷史》(高教版2023基礎模塊)
- 老年人誤吸的預防
- 血糖監(jiān)測(操作)課件
- 學校管理者的五堂必修課
- 2024年高三政治練習題及答案:認識論
- 《快遞實務》課件 項目1 走進快遞
- 國家基本藥物知識培訓課件
- 雞肉食品行業(yè)報告
- 火車站消防指導培訓課件
- 婦產科全套課件
評論
0/150
提交評論