Просмотр исходного кода

Refactor Vulkan backend to allow multiple contexts (#7961)

* Refactor Vulkan backend to allow multiple contexts

* Fix too many shader groups called validation error in llama3 on AMD and Intel GPUs

* Fix Vulkan debug build error
0cc4m 1 год назад
Родитель
Сommit
45c0e2e4c1

Разница между файлами не показана из-за своего большого размера
+ 944 - 606
ggml-vulkan-shaders.hpp


Разница между файлами не показана из-за своего большого размера
+ 801 - 595
ggml-vulkan.cpp


+ 1 - 1
vulkan-shaders/mul_mat_vec.comp

@@ -13,7 +13,7 @@ layout (constant_id = 0) const uint BLOCK_SIZE = 32;
 shared FLOAT_TYPE tmp[BLOCK_SIZE];
 shared FLOAT_TYPE tmp[BLOCK_SIZE];
 
 
 void main() {
 void main() {
-    const uint row = gl_WorkGroupID.x;
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
     const uint tid = gl_LocalInvocationID.x;
     const uint tid = gl_LocalInvocationID.x;
 
 
     uint a_offset, b_offset, d_offset;
     uint a_offset, b_offset, d_offset;

+ 1 - 1
vulkan-shaders/mul_mat_vec_q2_k.comp

@@ -7,7 +7,7 @@ layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
 shared FLOAT_TYPE tmp[32];
 shared FLOAT_TYPE tmp[32];
 
 
 void main() {
 void main() {
-    const uint row = gl_WorkGroupID.x;
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
 
 
     uint a_offset, b_offset, d_offset;
     uint a_offset, b_offset, d_offset;
     get_offsets(a_offset, b_offset, d_offset);
     get_offsets(a_offset, b_offset, d_offset);

+ 1 - 1
vulkan-shaders/mul_mat_vec_q3_k.comp

@@ -7,7 +7,7 @@ layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
 shared FLOAT_TYPE tmp[32];
 shared FLOAT_TYPE tmp[32];
 
 
 void main() {
 void main() {
-    const uint row = gl_WorkGroupID.x;
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
 
 
     uint a_offset, b_offset, d_offset;
     uint a_offset, b_offset, d_offset;
     get_offsets(a_offset, b_offset, d_offset);
     get_offsets(a_offset, b_offset, d_offset);

+ 1 - 1
vulkan-shaders/mul_mat_vec_q4_k.comp

@@ -7,7 +7,7 @@ layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
 shared FLOAT_TYPE tmp[32];
 shared FLOAT_TYPE tmp[32];
 
 
 void main() {
 void main() {
-    const uint row = gl_WorkGroupID.x;
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
 
 
     uint a_offset, b_offset, d_offset;
     uint a_offset, b_offset, d_offset;
     get_offsets(a_offset, b_offset, d_offset);
     get_offsets(a_offset, b_offset, d_offset);

+ 1 - 1
vulkan-shaders/mul_mat_vec_q5_k.comp

@@ -7,7 +7,7 @@ layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
 shared FLOAT_TYPE tmp[32];
 shared FLOAT_TYPE tmp[32];
 
 
 void main() {
 void main() {
-    const uint row = gl_WorkGroupID.x;
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
 
 
     uint a_offset, b_offset, d_offset;
     uint a_offset, b_offset, d_offset;
     get_offsets(a_offset, b_offset, d_offset);
     get_offsets(a_offset, b_offset, d_offset);

+ 1 - 1
vulkan-shaders/mul_mat_vec_q6_k.comp

@@ -7,7 +7,7 @@ layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
 shared FLOAT_TYPE tmp[32];
 shared FLOAT_TYPE tmp[32];
 
 
 void main() {
 void main() {
-    const uint row = gl_WorkGroupID.x;
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
 
 
     uint a_offset, b_offset, d_offset;
     uint a_offset, b_offset, d_offset;
     get_offsets(a_offset, b_offset, d_offset);
     get_offsets(a_offset, b_offset, d_offset);

Некоторые файлы не были показаны из-за большого количества измененных файлов