国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

電子發燒友App

硬聲App

掃碼添加小助手

加入工程師交流群

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>CUDA和OpenGL的概述及互操作的分析

CUDA和OpenGL的概述及互操作的分析

2017-10-24 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

 1 CUDA與OpenGL概述
  OpenGL是圖形硬件的軟件接口,它是在SGI等多家世界著名的計算機公司的倡導下,以SGI的GL三維圖形庫為基礎制定的一個通用、共享的、開放式的、性能卓越的三維圖形標準。OpenGL在醫學成像、地理信息、石油勘探、氣候模擬以及娛樂動畫上有著廣泛應用,它已經成為高性能圖形和交互式視景處理的工業標準。
  OpenGL不是一種編程語言,而是一種API(應用程序編程接口)。程序員可以使用某種編程語言(如C或C++)編寫繪圖軟件,其中調用了一個或多個OpenGL庫函數。作為一種API,OpenGL遵循C語言的調用約定。OpenGL開發資料可參考文獻[1]和參考文獻[2]。
  圖形處理器GPU)原本是處理計算機圖形的專用設備,近十年來,由于高清晰度復雜圖形實時處理的需求,GPU發展成為高并行度、多線程、多核的處理器。目前,主流GPU的運算能力已超過主流通用CPU,從發展趨勢上來看將來差距會越拉越大。為了合理地利用GPU 資源,CUDA(統一計算設備架構)應運而生。CUDA是一種由NVIDIA推出的通用并行計算架構[3],該架構使GPU能夠解決復雜的計算問題,并且由于CUDA編程語言基于標準的C語言,從而大大提高了可編程性。
  CUDA和OpenGL互操作的基本方式是使用CUDA生成數據,然后使用OpenGL在屏幕上繪制出數據所表示的圖形。兩者的結合可以通過兩種方式來實現:
  (1)使用OpenGL的PBO(像素緩沖區對象)。在該方式下,CUDA直接生成像素數據,OpenGL顯示這些像素;
  (2)使用OpenGL的VBO(頂點緩沖區對象)。在該方式下,CUDA生成頂點網格數據,OpenGL可以根據需要繪制出平滑的表面圖或線框圖或一系列頂點。
  這兩種方式的核心都是利用cudaGLMapBufferObject函數將OpenGL的緩沖區映射到CUDA的內存空間上,這樣,程序員就可以充分利用CUDA的優點寫出性能高的程序在該內存空間上生成數據,這些數據不需要傳送,OpenGL可以直接使用。如果不使用CUDA,這些數據需要由CPU來計算產生。一方面,CPU的計算速度通常比GPU慢;另一方面,這些數據需要傳送到GPU上以供OpenGL顯示使用。鑒于此,當數據量很大時,CUDA和OpenGL的混合使用效果明顯。
  2 CUDA和OpenGL互操作的過程[4]
  CUDA和OpenGL互操作具體步驟如下:
  (1)創建窗口及OpenGL運行環境。
  (2)設置OpenGL視口和坐標系。要根據繪制的圖形是2D還是3D等具體情況設置。(1)和(2)是所有OpenGL程序必需的,這里也沒什么特殊之處,需要注意的是,后面的一些功能需要OpenGL 2.0及以上版本支持,所以在這里需要進行版本檢查。
  (3)創建CUDA環境。可以使用cuGLCtxCreate或cudaGLSetGLDevice來設置CUDA環境。該設置一定要放在其他CUDA的API調用之前。
  (4)產生一個或多個OpenGL緩沖區用以和CUDA共享。使用PBO和使用VBO差不多,只是有些函數調用參數不同。以下是具體過程。
  GLuint bufferID;
  glGenBuffers(1,&bufferID);//產生一個buffer ID
  glBindBuffer(parameter1,bufferID);
  //將其設置為當前非壓縮緩沖區,如果是PBO方式,parameter1設置為GL_PIXEL_UNPACK_BUFFER,如果
  是VBO方式,parameter1設置為GL_ARRAY_BUFFER
  glBufferData(parameter1,parameter2,NULL,GL_DYNAMIC _COPY);
  //給該緩沖區分配數據,PBO方式下,parameter1設置為GL_PIXEL_UNPACK_BUFFER,parameter1設置為圖像的長度*寬度*4。VBO方式下,parameter1設置為GL_ARRAY_BUFFER,parameter2設置為頂點數*16,因為每個頂點包含3個浮點坐標(x,y,z)和4個顏色字節(RGBA),這樣一個頂點包含16 B
  (5)用CUDA登記緩沖區。登記可以使用cuGLRegisterBufferObject或
  cudaGLRegisterBufferObject,該命令告訴OpenGL和CUDA 驅動程序該緩沖區為二者共同使用。
  (6)將OpenGL緩沖區映射到CUDA內存。可以使用cuGLMapBufferObject或cudaGLMapBufferObject,它實際是將CUDA內存的指針指向OpenGL的緩沖區,這樣如果只有一個GPU,就不需要數據傳遞。當映射完成后,OpenGL不能再使用該緩沖區。
  (7)使用CUDA往該映射的內存寫圖像數據。前面的準備工作在這里真正發揮作用了,此時可以調用CUDA的kernel,像使用全局內存一樣使用映射了的緩沖區,向其中寫數據。
  (8)取消OpenGL緩沖區映射。要等前面CUDA的活動完成以后,使用cuGLUnmapBufferObject或cudaGLUnmapBufferObject函數取消映射。
  (9)前面的步驟完成以后就可以真正開始繪圖了, OpenGL的PBO和VBO的繪圖方式不同,分別為以下兩個過程。
  ①如果只是繪制平面圖形,需要使用OpenGL的PBO及紋理。
  glEnable(GL_TEXTURE_2D); //使紋理可用
  glGenTextures(1,&textureID); //生成一個textureID
  glBindTexture(GL_TEXTURE_2D,textureID);
  //使該紋理成為當前可用紋理
  glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,Width, Height,0,GL_BGRA,GL_UNSIGNED_BYTE,NULL);
  //分配紋理內存。最后的參數設置數據來源,這里設置為NULL,表示數據來自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);
  //使頂點和顏色數組可用
  glEnableClientState(GL_COLOR_ARRAY);
  glVertexPointer(3,GL_FLOAT,16,0);
  //設置頂點和顏色指針
  glColorPointer(4,GL_UNSIGNED_BYTE,16,12);
  glDrawArrays(GL_POINTS,0,numVerticies);
  //根據頂點數據繪圖,參數可以使用GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES,GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS,GL_QUAD_STRIP,GL_POLYGON
  (10)前后緩存區來回切換,實現動畫顯示效果。調用SwapBuffers(),緩沖區切換通常會在垂直刷新間隙來處理,因此,可以在控制面板上關掉垂直同步,使得緩沖區切換立刻進行。
  3 CUDA和OpenGL互操作性能實例分析
  3.1 測試實例
  這是一個相對簡單的實例,其主要功能是不斷地動態改變一個紋理圖案中每個像素的顏色并顯示。該實例使用了OpenGL的PBO并利用了OpenGL與CUDA互操作方式,紋理圖案數據的生成主要由CUDA的kernel函數完成,完整程序及CUDA的kernel函數請參看參考文獻[5]。
  如果不使用CUDA,整個程序結構變化不大,主要差別是生成該紋理圖案的函數在CPU上運行,因而該函數及其調用方式要重寫,具體函數如下:
  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;
  }
  }
  其中,參數pos表示像素數組,width為圖像寬度,height為圖像高度,time是每次調用該函數時固定遞增的一個值。
  3.2 測試結果
  上述實例在兩種環境中做了實驗,CUDA版本都是3.2。測試環境1的主要配置如下:CPU為Intel Core i3-M380,主頻為2.53 GHz,GPU為 NVIDIA NVS 3100M,內存為2 GB。測試環境2的主要配置如下:CPU是Intel Core2 duo E7400,主頻為2.8 GHz,GPU使用GeForce 9800 GTX+,內存為2 GB。測試時,顯示設置的垂直同步要關閉。
  CUDA和OpenGL的概述及互操作的分析
  測試時設置紋理圖像的長和寬都是512,CUDA的線程塊為1 024,每個線程塊內的線程數為256,在OpenGL的顯示回調函數里統計f/s(刷新率),結果如表1所示。
  從實驗結果可以看出,CUDA與OpenGL結合的方式效果顯著,顯示速度比不使用CUDA提高了7~8倍。
  CUDA是一種較新的方便使用GPU進行通用計算的架構,OpenGL是圖形處理的工業標準。兩者的互操作充分利用了GPU的特點,因而顯得非常自然和合理,實驗驗證了兩者配合使用的效果。該方式為高性能圖形圖像顯示及科學計算可視化提供了良好的模式架構。
?
OpenGL CUDA 像素緩沖
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1冷柜-電氣控制系統講解
  2. 13.68 MB  |  4次下載  |  10 積分
  3. 2安川A1000變頻器中文版說明書
  4. 20.16 MB  |  3次下載  |  3 積分
  5. 3直流電路的組成和基本定律
  6. 1.67 MB   |  2次下載  |  免費
  7. 4丹佛斯2800系列變頻器說明書
  8. 8.00 MB  |  1次下載  |  5 積分
  9. 5PC8011同步開關型降壓3.5A單節鋰電池充電管理電路技術手冊
  10. 0.74 MB   |  1次下載  |  免費
  11. 6ES7243E+ES8311音頻錄制與播放電路資料
  12. 0.06 MB   |  1次下載  |  5 積分
  13. 7SDM02 激光測距模塊產品手冊
  14. 0.43 MB   |  1次下載  |  免費
  15. 8SDFM 激光測距模塊模組手冊
  16. 0.54 MB   |  1次下載  |  免費

本月

  1. 1CH341編程器軟件NeoProgrammer_2.2.0.10
  2. 20.47 MB   |  170次下載  |  1 積分
  3. 22025智能家居傳感器市場分析及創新應用
  4. 3.11 MB  |  43次下載  |  免費
  5. 3RV1126B系列開發板產品資料
  6. 4.19 MB  |  18次下載  |  免費
  7. 4CH341編程軟件下載
  8. 2.50 MB   |  16次下載  |  5 積分
  9. 5全志系列-米爾基于T153核心板開發板 四核異構、3路千兆網,賦能多元化工業場景
  10. 3.05 MB  |  12次下載  |  免費
  11. 6【開源】60余套STM32單片機、嵌入式Linux、物聯網、人工智能項目案例及入門學習資源包
  12. 10.55 MB  |  8次下載  |  免費
  13. 7冷柜-電氣控制系統講解
  14. 13.68 MB  |  4次下載  |  10 積分
  15. 8特斯拉MODEL S車載充電機主電路回路原理圖
  16. 0.81 MB   |  4次下載  |  3 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935137次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233094次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191448次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183356次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81604次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73824次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65991次下載  |  10 積分