char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
ffaafde16
char/aliceai-t5-moe
1#include "virtgpu-forward-impl.h" 2 3void * apir_buffer_get_base (virtgpu * gpu ,apir_buffer_context_t * buffer_context ) { 4apir_encoder * encoder ; 5apir_decoder * decoder ; 6ApirForwardReturnCode ret ; 7 8REMOTE_CALL_PREPARE (gpu ,encoder ,APIR_COMMAND_TYPE_BUFFER_GET_BASE ); 9 10apir_encode_apir_buffer_host_handle_t (encoder ,& buffer_context -> host_handle ); 11 12REMOTE_CALL (gpu ,encoder ,decoder ,ret ); 13 14uintptr_t base ; 15apir_decode_uintptr_t (decoder ,& base ); 16 17remote_call_finish (gpu ,encoder ,decoder ); 18 19return (void * )base ; 20} 21 22void apir_buffer_set_tensor (virtgpu * gpu , 23apir_buffer_context_t * buffer_context , 24ggml_tensor * tensor , 25const void * data , 26size_t offset , 27size_t size ) { 28apir_encoder * encoder ; 29apir_decoder * decoder ; 30ApirForwardReturnCode ret ; 31 32REMOTE_CALL_PREPARE (gpu ,encoder ,APIR_COMMAND_TYPE_BUFFER_SET_TENSOR ); 33 34apir_encode_apir_buffer_host_handle_t (encoder ,& buffer_context -> host_handle ); 35apir_encode_ggml_tensor (encoder ,tensor ); 36 37virtgpu_shmem temp_shmem ;// Local storage for large buffers 38virtgpu_shmem * shmem = & temp_shmem ; 39bool using_shared_shmem = false; 40 41if (size <=gpu -> data_shmem .mmap_size ) { 42// Lock mutex before using shared data_shmem buffer 43if (mtx_lock (& gpu -> data_shmem_mutex )!= thrd_success ) { 44GGML_ABORT (GGML_VIRTGPU "%s: Failed to lock data_shmem mutex" ,__func__ ); 45 } 46using_shared_shmem = true; 47shmem = & gpu -> data_shmem ; 48 49 }else if (virtgpu_shmem_create (gpu ,size ,shmem )) { 50GGML_ABORT (GGML_VIRTGPU "%s: Couldn't allocate the guest-host shared buffer" ,__func__ ); 51 } 52 53memcpy (shmem -> mmap_ptr ,data ,size ); 54apir_encode_virtgpu_shmem_res_id (encoder ,shmem -> res_id ); 55 56apir_encode_size_t (encoder ,& offset ); 57apir_encode_size_t (encoder ,& size ); 58 59REMOTE_CALL (gpu ,encoder ,decoder ,ret ); 60 61remote_call_finish (gpu ,encoder ,decoder ); 62 63// Unlock mutex before cleanup 64if (using_shared_shmem ) { 65mtx_unlock (& gpu -> data_shmem_mutex ); 66 }else { 67virtgpu_shmem_destroy (gpu ,shmem ); 68 } 69 70return ; 71} 72 73void apir_buffer_get_tensor (virtgpu * gpu , 74apir_buffer_context_t * buffer_context , 75const ggml_tensor * tensor , 76void * data , 77size_t offset , 78size_t size ) { 79apir_encoder * encoder ; 80apir_decoder * decoder ; 81ApirForwardReturnCode ret ; 82 83REMOTE_CALL_PREPARE (gpu ,encoder ,APIR_COMMAND_TYPE_BUFFER_GET_TENSOR ); 84 85apir_encode_apir_buffer_host_handle_t (encoder ,& buffer_context -> host_handle ); 86apir_encode_ggml_tensor (encoder ,tensor ); 87 88virtgpu_shmem temp_shmem ;// Local storage for large buffers 89virtgpu_shmem * shmem = & temp_shmem ; 90bool using_shared_shmem = false; 91 92if (size <=gpu -> data_shmem .mmap_size ) { 93// Lock mutex before using shared data_shmem buffer 94if (mtx_lock (& gpu -> data_shmem_mutex )!= thrd_success ) { 95GGML_ABORT (GGML_VIRTGPU "%s: Failed to lock data_shmem mutex" ,__func__ ); 96 } 97using_shared_shmem = true; 98shmem = & gpu -> data_shmem ; 99 100 }else if (virtgpu_shmem_create (gpu ,size ,shmem )) { 101GGML_ABORT (GGML_VIRTGPU "%s: Couldn't allocate the guest-host shared buffer" ,__func__ ); 102 } 103 104apir_encode_virtgpu_shmem_res_id (encoder ,shmem -> res_id ); 105apir_encode_size_t (encoder ,& offset ); 106apir_encode_size_t (encoder ,& size ); 107 108REMOTE_CALL (gpu ,encoder ,decoder ,ret ); 109 110memcpy (data ,shmem -> mmap_ptr ,size ); 111 112remote_call_finish (gpu ,encoder ,decoder ); 113 114// Unlock mutex before cleanup 115if (using_shared_shmem ) { 116mtx_unlock (& gpu -> data_shmem_mutex ); 117 }else { 118virtgpu_shmem_destroy (gpu ,shmem ); 119 } 120} 121 122bool apir_buffer_cpy_tensor (virtgpu * gpu , 123apir_buffer_context_t * buffer_context , 124const ggml_tensor * src , 125const ggml_tensor * dst ) { 126apir_encoder * encoder ; 127apir_decoder * decoder ; 128ApirForwardReturnCode ret ; 129 130REMOTE_CALL_PREPARE (gpu ,encoder ,APIR_COMMAND_TYPE_BUFFER_CPY_TENSOR ); 131 132apir_encode_apir_buffer_host_handle_t (encoder ,& buffer_context -> host_handle ); 133apir_encode_ggml_tensor (encoder ,src ); 134apir_encode_ggml_tensor (encoder ,dst ); 135 136REMOTE_CALL (gpu ,encoder ,decoder ,ret ); 137 138bool ret_val ; 139apir_decode_bool_t (decoder ,& ret_val ); 140 141remote_call_finish (gpu ,encoder ,decoder ); 142 143return ret_val ; 144} 145 146void apir_buffer_clear (virtgpu * gpu ,apir_buffer_context_t * buffer_context ,uint8_t value ) { 147apir_encoder * encoder ; 148apir_decoder * decoder ; 149ApirForwardReturnCode ret ; 150 151REMOTE_CALL_PREPARE (gpu ,encoder ,APIR_COMMAND_TYPE_BUFFER_CLEAR ); 152 153apir_encode_apir_buffer_host_handle_t (encoder ,& buffer_context -> host_handle ); 154apir_encode_uint8_t (encoder ,& value ); 155 156REMOTE_CALL (gpu ,encoder ,decoder ,ret ); 157 158remote_call_finish (gpu ,encoder ,decoder ); 159} 160 161void apir_buffer_free_buffer (virtgpu * gpu ,apir_buffer_context_t * buffer_context ) { 162apir_encoder * encoder ; 163apir_decoder * decoder ; 164ApirForwardReturnCode ret ; 165 166REMOTE_CALL_PREPARE (gpu ,encoder ,APIR_COMMAND_TYPE_BUFFER_FREE_BUFFER ); 167 168apir_encode_apir_buffer_host_handle_t (encoder ,& buffer_context -> host_handle ); 169 170REMOTE_CALL (gpu ,encoder ,decoder ,ret ); 171 172remote_call_finish (gpu ,encoder ,decoder ); 173}