2020 id <MTLBuffer > buffer;
2121};
2222
23+ static void * g_ptr_base = (void *)0x1234 ;
24+
2325struct ggml_metal_context {
2426 int n_cb;
2527
@@ -222,8 +224,8 @@ void ggml_metal_set_n_cb(struct ggml_metal_context * ctx, int n_cb) {
222224 default : {}
223225 }
224226
225- *offs = (size_t ) tensor->data ;
226- printf (" %s : offs = %zu \n " , __func__, *offs);
227+ *offs = (size_t ) tensor->data - ( size_t ) g_ptr_base ;
228+ printf (" %s : offs = %zu , %p \n " , __func__, *offs, tensor-> extra );
227229 return ((struct ggml_metal_buffer_wrapper *) tensor->extra )->buffer ;
228230}
229231
@@ -917,7 +919,7 @@ static void ggml_backend_metal_free_data(struct ggml_backend_buffer * alloc) {
917919
918920 printf (" XXXXXXXXXXXXXXX ALOC: %p %p %p size = %zu \n " , (void * )wrapper, (void *)&wrapper->buffer , (void *)[wrapper->buffer contents ], size);
919921
920- struct ggml_backend_buffer * buffer = ggml_allocator_simple_init (nil , size, TENSOR_ALIGNMENT);
922+ struct ggml_backend_buffer * buffer = ggml_allocator_simple_init (g_ptr_base , size, TENSOR_ALIGNMENT);
921923 buffer->interface .init_tensor = ggml_backend_metal_init_tensor;
922924 buffer->interface .free_data = ggml_backend_metal_free_data;
923925 buffer->backend_data = wrapper;
@@ -932,7 +934,7 @@ static void ggml_backend_metal_set_tensor_async(struct ggml_backend * backend, s
932934 struct ggml_metal_buffer_wrapper * wrapper = (struct ggml_metal_buffer_wrapper *)tensor->extra ;
933935 char * contents = (char *)[wrapper->buffer contents ];
934936
935- const size_t t_data = (size_t ) tensor->data ;
937+ const size_t t_data = (size_t ) tensor->data - ( size_t ) g_ptr_base ;
936938
937939 printf (" XXXXXXXXXXXXXXX SET : %p %p %p offset = %zu \n " , (void *)(tensor->data ), (void *)&wrapper->buffer , (void *)contents, offset);
938940
@@ -945,12 +947,13 @@ static void ggml_backend_metal_set_tensor_async(struct ggml_backend * backend, s
945947
946948static void ggml_backend_metal_get_tensor_async (struct ggml_backend * backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
947949 GGML_ASSERT (offset + size <= ggml_nbytes (tensor) && " tensor read out of bounds" );
950+ printf (" XXXXXXXXXXXXXXX GET : %d %p \n " , (void *)(tensor->data ), (void *)tensor->extra );
948951 GGML_ASSERT (tensor->extra != nil && " tensor not allocated" );
949952
950953 struct ggml_metal_buffer_wrapper * wrapper = (struct ggml_metal_buffer_wrapper *)tensor->extra ;
951954 char * contents = (char *)[wrapper->buffer contents ];
952955
953- const size_t t_data = (size_t ) tensor->data ;
956+ const size_t t_data = (size_t ) tensor->data - ( size_t ) g_ptr_base ;
954957
955958 printf (" XXXXXXXXXXXXXXX GET : %p %p %p offset = %zu \n " , (void *)(tensor->data ), (void *)&wrapper->buffer , (void *)contents, offset);
956959
0 commit comments