opengl的緩衝區可以對映到cuda的位址空間,當做global memory被訪問。
這樣做可以使計算得到的資料直接視覺化,提公升速度。
因為資料儲存在裝置端,沒有裝置端到主機端的傳輸耗費,不論計算還是可是化都相當的快。
具體使用步驟:
1、建立vbo
glgenbuffers(1, vbo);
glbindbuffer(gl_array_buffer, *vbo);
glbufferdata(gl_array_buffer, size, 0, gl_dynamic_draw);
glbindbuffer(gl_array_buffer, 0);
2、註冊vbo
struct cudagraphicsresource *cuda_vbo_resource;
cudagraphicsglregisterbuffer(&cuda_vbo_resource, *vbo, cudagraphicsmapflagswritediscard);
3、對映vbo
cudagraphicsmapresources(1, &cuda_vbo_resource, 0);
4、使用
launch_kernel(dptr, mesh_width, mesh_height, animtime);5、解除對映
cudagraphicsunmapresources(1, &cuda_vbo_resource, 0);
6、解除註冊
cudagraphicsunregisterresource(cuda_vbo_resource);
7、刪除vbo
glbindbuffer(gl_array_buffer, *vbo);
gldeletebuffers(1, vbo);
**:
#include #include #include #include #include #include unsigned int window_width = 512;
unsigned int window_height = 512;
unsigned int mesh_width = 256;
unsigned int mesh_height= 256;
unsigned int timer = 0;
int animflag = 1;
float animtime = 0.0f;
float animinc = 0.01f;
gluint vbo = null;
float rotate_x = 0.0, rotate_y = 0.0;
float translate_z = -3.0;
struct cudagraphicsresource *cuda_vbo_resource;
extern "c" void launch_kernel(float4 *pos, unsigned int mesh_width, unsigned int mesh_height, float time);
void createvbo(gluint *vbo)
}void deletevbo(gluint *vbo)
}void cleanupcuda()
void runcuda()
void initcuda(int argc, char **argv)
void computefps()
}void display()
}void fpsdisplay()
cutboolean initgl(int argc, char **argv)
glclearcolor(0.0, 0.0, 0.0, 1.0);
gldisable(gl_depth_test);
glviewport(0, 0, window_width, window_height);
glmatrixmode(gl_projection);
glloadidentity();
gluperspective(60.0, (glfloat)window_width / (glfloat)window_height, 0.1, 10.0);
return cuttrue;
}int main(int argc, char **argv)
#include __global__ void kernel(float4 *pos, unsigned int width, unsigned int height, float time)
extern "c" void launch_kernel(float4 *pos, unsigned int mesh_width, unsigned int mesh_height, float time)
執行結果:
參考自cuda sdk
hadoop之hive hbase互操作
大家都知道,hive的sql操作非常方便,但是查詢過程中需要啟動mapreduce,無法做到實時響應。hbase是hadoop家族中的分布式資料庫,與傳統關聯式資料庫不同,它底層採用列儲存格式,擴充套件性極高,響應時間也很快,當業務變化大時,可以作為mysql的補充。幸運的是作為hadoop家族中比...
彙編與C互操作
彙編與c互操作 c語言內嵌彙編 c語言呼叫彙編過程 彙編呼叫c語言過程 1 開啟vs2008,建立乙個vc 空工程。2 在solution explorer上右擊工程名,選擇custom build rules 在彈出的對話方塊上勾選microsoft macro assembler。3 在solu...
關於openGl與CUDA協作的具體實現
關於opengl與cuda協作的具體實現 共享緩衝區的使用 乙個在空白opengl螢幕中繪製的例子 先宣告兩個全域性變數 緩衝區物件的id,另乙個用於儲存gl pixel unpack buffer 傳遞給opengl的 資料 gluintbuffer 接下來是cuda對共享緩衝區的 名字 cuda...