先看看不同的顯示卡上工作組的數量情況。
glgetintegeri_v
(gl_max_compute_work_group_count,
0, data)
;glgetintegeri_v
(gl_max_compute_work_group_count,
1, data +1)
;glgetintegeri_v
(gl_max_compute_work_group_count,
2, data +2)
;glgetintegerv
(gl_max_compute_work_group_invocations,data +3)
;glgetintegeri_v
(gl_max_compute_work_group_size,
0, data +4)
;glgetintegeri_v
(gl_max_compute_work_group_size,
1, data +5)
;glgetintegeri_v
(gl_max_compute_work_group_size,
2, data +6)
; cout <<
"gl_max_compute_work_group_count:"
<< data[0]
<<
" "<< data[1]
<<
" "<< data[2]
<< endl;
cout <<
"gl_max_compute_work_group_invocations:"
<< data[3]
<< endl;
cout <<
"gl_max_compute_work_group_size:"
<< data[4]
<<
" "<< data[5]
<<
" "<< data[6]
<< endl;
整合顯示卡:
高效能invidia處理器:
很明顯獨顯可設定的工作組數量要比整合顯示卡多一些。先看一下相同的維度下整合顯示卡和獨顯的執行時間(毫秒)。
gldispatchcompute
(8000,1
,1);
//著色器設定
layout (local_size_x =
1024
,local_size_y =
1) in;
整合:
獨顯:
很明顯,獨顯的執行速度要比整合顯示卡快很多。
再在整合顯示卡下,修改一下工作組維度看下。
gldispatchcompute(20
,20,20
);//著色器設定
本地工作組的積都是1024的時候,好像並沒有什麼的改善。。。。。。。也許只要設定成x單維的,用gl_globalinvocationid.x做為索引就行。。。
再試下把本地工作組的值減小:
再對比一下感覺31和32佔的比例明顯增多。個人認為還是最好把本地工作組設成乙個顯示卡能支援的最大值 ,但是不同的顯示卡支援的最大值又不同,該怎麼設定?
OpenGL著色器程式解析 著色器基礎
部分內容 於 現代opengl渲染管線嚴重依賴著色器來處理傳入的資料。如果不使用著色器,那麼用opengl可以做到的事情可能只有清除視窗內容了,可見著色器對於opengl的重要性。在opengl 3.0版本以前 含該版本 或者如果你用到了相容模式 compatibility prof?ile 環境,...
Opengl(四) 著色器
1.opengl確保至少有16個包含4個元素的頂點屬性可用。2.不同著色器之間的資料傳輸,在傳送方中宣告乙個輸出,在接收方中宣告乙個同名輸入。3.uniform是全域性的,uniform會一直保留他的資料,直到他被重置或更新。4.設定uniform的方式 glint x glgetuniformlo...
著色器與OpenGL
現代opengl渲染管線嚴重依賴著色器來處理傳入的資料。如果不使用著色器,那麼用opengl可以做到的事情可能只有清除視窗內容了,可見著色器對於opengl的重要性。在opengl 3.0版本以前 含該版本 或者如果你用到了相容模式 compatibility prof?ile 環境,opengl還...