char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
09294365a
char/aliceai-t5-moe
1#include "virtgpu-shm.h" 2 3#include "virtgpu.h" 4#include "ggml-remoting.h" 5 6#include <assert.h> 7 8static uint32_t virtgpu_ioctl_resource_create_blob (virtgpu * gpu , 9uint32_t blob_mem , 10uint32_t blob_flags , 11size_t blob_size , 12uint64_t blob_id , 13uint32_t * res_id ) { 14#ifdef SIMULATE_BO_SIZE_FIX 15blob_size = align64 (blob_size ,4096 ); 16#endif 17 18drm_virtgpu_resource_create_blob args = { 19 .blob_mem = blob_mem , 20 .blob_flags = blob_flags , 21 .bo_handle = 0 , 22 .res_handle = 0 , 23 .size = blob_size , 24 .pad = 0 , 25 .cmd_size = 0 , 26 .cmd = 0 , 27 .blob_id = blob_id , 28 }; 29 30if (virtgpu_ioctl (gpu ,DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB ,& args )) { 31return 0 ; 32 } 33 34* res_id = args .res_handle ; 35return args .bo_handle ; 36} 37 38static void virtgpu_ioctl_gem_close (virtgpu * gpu ,uint32_t gem_handle ) { 39drm_gem_close args = { 40 .handle = gem_handle , 41 .pad = 0 , 42 }; 43 44const int ret = virtgpu_ioctl (gpu ,DRM_IOCTL_GEM_CLOSE ,& args ); 45assert (!ret ); 46#ifdef NDEBUG 47UNUSED (ret ); 48#endif 49} 50 51static void * virtgpu_ioctl_map (virtgpu * gpu ,uint32_t gem_handle ,size_t size ) { 52drm_virtgpu_map args = { 53 .offset = 0 , 54 .handle = gem_handle , 55 .pad = 0 , 56 }; 57 58if (virtgpu_ioctl (gpu ,DRM_IOCTL_VIRTGPU_MAP ,& args )) { 59return NULL ; 60 } 61 62void * ptr = mmap (NULL ,size ,PROT_READ |PROT_WRITE ,MAP_SHARED ,gpu -> fd ,args .offset ); 63if (ptr == MAP_FAILED ) { 64return NULL ; 65 } 66 67return ptr ; 68} 69 70void virtgpu_shmem_destroy (virtgpu * gpu ,virtgpu_shmem * shmem ) { 71munmap (shmem -> mmap_ptr ,shmem -> mmap_size ); 72virtgpu_ioctl_gem_close (gpu ,shmem -> gem_handle ); 73} 74 75int virtgpu_shmem_create (virtgpu * gpu ,size_t size ,virtgpu_shmem * shmem ) { 76size = align64 (size ,16384 ); 77 78uint32_t res_id ; 79uint32_t gem_handle = virtgpu_ioctl_resource_create_blob (gpu ,VIRTGPU_BLOB_MEM_HOST3D , 80VIRTGPU_BLOB_FLAG_USE_MAPPABLE ,size ,0 ,& res_id ); 81 82if (!gem_handle ) { 83return 1 ; 84 } 85 86void * ptr = virtgpu_ioctl_map (gpu ,gem_handle ,size ); 87if (!ptr ) { 88virtgpu_ioctl_gem_close (gpu ,gem_handle ); 89GGML_LOG_ERROR (GGML_VIRTGPU "%s: virtgpu_ioctl_map failed\n" ,__func__ ); 90return 1 ; 91 } 92 93shmem -> res_id = res_id ; 94shmem -> mmap_size = size ; 95shmem -> mmap_ptr = ptr ; 96shmem -> gem_handle = gem_handle ; 97 98return 0 ; 99}