@@ -167,7 +167,7 @@ static ggml_cuda_device_info ggml_cuda_init() {
167167 for (int id = 0 ; id < info.device_count ; ++id) {
168168 int device_vmm = 0 ;
169169
170- #if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
170+ #if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM) && !defined(GGML_USE_MUSA)
171171 CUdevice device;
172172 CU_CHECK (cuDeviceGet (&device, id));
173173 CU_CHECK (cuDeviceGetAttribute (&device_vmm, CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED , device));
@@ -179,7 +179,7 @@ static ggml_cuda_device_info ggml_cuda_init() {
179179 alloc_prop.location .id = id;
180180 CU_CHECK (cuMemGetAllocationGranularity (&info.devices [id].vmm_granularity , &alloc_prop, CU_MEM_ALLOC_GRANULARITY_RECOMMENDED ));
181181 }
182- #endif // !defined(GGML_USE_HIPBLAS)
182+ #endif // !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM) && !defined(GGML_USE_MUSA)
183183 info.devices [id].vmm = !!device_vmm;
184184
185185 cudaDeviceProp prop;
@@ -315,7 +315,7 @@ struct ggml_cuda_pool_leg : public ggml_cuda_pool {
315315};
316316
317317// pool with virtual memory
318- #if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
318+ #if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM) && !defined(GGML_USE_MUSA)
319319struct ggml_cuda_pool_vmm : public ggml_cuda_pool {
320320 static const size_t CUDA_POOL_VMM_MAX_SIZE = 1ull << 35 ; // 32 GB
321321
@@ -409,14 +409,14 @@ struct ggml_cuda_pool_vmm : public ggml_cuda_pool {
409409 GGML_ASSERT (ptr == (void *) (pool_addr + pool_used));
410410 }
411411};
412- #endif // !defined(GGML_USE_HIPBLAS)
412+ #endif // !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM) && !defined(GGML_USE_MUSA)
413413
414414std::unique_ptr<ggml_cuda_pool> ggml_backend_cuda_context::new_pool_for_device (int device) {
415- #if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
415+ #if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM) && !defined(GGML_USE_MUSA)
416416 if (ggml_cuda_info ().devices [device].vmm ) {
417417 return std::unique_ptr<ggml_cuda_pool>(new ggml_cuda_pool_vmm (device));
418418 }
419- #endif
419+ #endif // !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM) && !defined(GGML_USE_MUSA)
420420 return std::unique_ptr<ggml_cuda_pool>(new ggml_cuda_pool_leg (device));
421421}
422422
@@ -1341,7 +1341,7 @@ static void ggml_cuda_set_peer_access(const int n_tokens, int main_device) {
13411341static cudaError_t ggml_cuda_Memcpy2DPeerAsync (
13421342 void * dst, int dstDevice, size_t dpitch, void * src, int srcDevice, size_t spitch, size_t width, size_t height, cudaStream_t stream) {
13431343
1344- #if !defined(GGML_USE_HIPBLAS)
1344+ #if !defined(GGML_USE_HIPBLAS) && !defined(GGML_USE_MUSA)
13451345 // cudaMemcpy2DAsync may fail with copies between vmm pools of different devices
13461346 cudaMemcpy3DPeerParms p = {};
13471347 p.dstDevice = dstDevice;
@@ -1355,7 +1355,7 @@ static cudaError_t ggml_cuda_Memcpy2DPeerAsync(
13551355 GGML_UNUSED (dstDevice);
13561356 GGML_UNUSED (srcDevice);
13571357 return cudaMemcpy2DAsync (dst, dpitch, src, spitch, width, height, cudaMemcpyDeviceToDevice, stream);
1358- #endif // !defined(GGML_USE_HIPBLAS)
1358+ #endif // !defined(GGML_USE_HIPBLAS) && !defined(GGML_USE_MUSA)
13591359}
13601360
13611361static void ggml_cuda_op_mul_mat (
@@ -1828,6 +1828,9 @@ static void ggml_cuda_mul_mat_batched_cublas(ggml_backend_cuda_context & ctx, co
18281828 }
18291829 }
18301830#else
1831+ #ifdef GGML_USE_MUSA
1832+ GGML_ASSERT (false );
1833+ #else // !GGML_USE_MUSA
18311834 if (r2 == 1 && r3 == 1 && ggml_is_contiguous_2 (src0) && ggml_is_contiguous_2 (src1)) {
18321835 // there is no broadcast and src0, src1 are contiguous across dims 2, 3
18331836 // use cublasGemmStridedBatchedEx
@@ -1870,6 +1873,7 @@ static void ggml_cuda_mul_mat_batched_cublas(ggml_backend_cuda_context & ctx, co
18701873 cu_compute_type,
18711874 CUBLAS_GEMM_DEFAULT_TENSOR_OP ));
18721875 }
1876+ #endif // GGML_USE_MUSA
18731877#endif
18741878
18751879 if (dst->op_params [0 ] == GGML_PREC_DEFAULT ) {
@@ -3027,7 +3031,7 @@ GGML_CALL bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size
30273031 return false ;
30283032 }
30293033
3030- #if CUDART_VERSION >= 11100
3034+ #if CUDART_VERSION >= 11100 || defined(GGML_USE_MUSA)
30313035 cudaError_t err = cudaHostRegister (buffer, size, cudaHostRegisterPortable | cudaHostRegisterReadOnly);
30323036 if (err != cudaSuccess) {
30333037 // clear the error
0 commit comments