static cublasHandle_t g_cublas_handles[GGML_CUDA_MAX_DEVICES] = {nullptr};
+[[noreturn]]
+static __device__ void bad_arch() {
+ printf("ERROR: ggml-cuda was compiled without support for the current GPU architecture.\n");
+ __trap();
+
+ (void) bad_arch; // suppress unused function warning
+}
+
static __device__ __forceinline__ float warp_reduce_sum(float x) {
#pragma unroll
for (int mask = 16; mask > 0; mask >>= 1) {
// second part effectively subtracts 8 from each quant value
return d4 * (sumi * ds8f.x - (8*vdr/QI4_0) * ds8f.y);
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
// scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it
return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1));
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
// second part effectively subtracts 16 from each quant value
return d5 * (sumi * ds8f.x - (16*vdr/QI5_0) * ds8f.y);
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return sumi*d5d8 + m5s8 / (QI5_1 / vdr);
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return d8_0*d8_1 * sumi;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
// scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it
return sumi*d8d8 + m8s8 / (QI8_1 / vdr);
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return dm2f.x*sumf_d - dm2f.y*sumf_m;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return d8 * (dm2f.x*sumi_d - dm2f.y*sumi_m);
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return d3 * sumf;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return d3*d8 * sumi;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return dm4f.x*sumf_d - dm4f.y*sumf_m;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return dm4f.x*sumf_d - dm4f.y*sumf_m;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return dm5f.x*sumf_d - dm5f.y*sumf_m;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return dm4f.x*sumf_d - dm4f.y*sumf_m;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return d*sumf;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return d6 * sumf_d;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
}
return dall * sumf_d - dmin * sumf_m;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
#endif
return d * sumf_d;
#else
- assert(false);
- return 0.0f; // only to satisfy the compiler
+ bad_arch();
#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
#endif
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q4_0_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q4_1_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q5_0_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q5_1_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q8_0_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q2_K_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q3_K_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q4_K_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q5_K_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}
(vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst);
#else
(void) vec_dot_q6_K_q8_1_mul_mat;
- assert(false);
+ bad_arch();
#endif // __CUDA_ARCH__ >= CC_VOLTA
}