20
20
id <MTLBuffer > buffer;
21
21
};
22
22
23
+ static void * g_ptr_base = (void *)0x1234 ;
24
+
23
25
struct ggml_metal_context {
24
26
int n_cb;
25
27
@@ -222,8 +224,8 @@ void ggml_metal_set_n_cb(struct ggml_metal_context * ctx, int n_cb) {
222
224
default : {}
223
225
}
224
226
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 );
227
229
return ((struct ggml_metal_buffer_wrapper *) tensor->extra )->buffer ;
228
230
}
229
231
@@ -917,7 +919,7 @@ static void ggml_backend_metal_free_data(struct ggml_backend_buffer * alloc) {
917
919
918
920
printf (" XXXXXXXXXXXXXXX ALOC: %p %p %p size = %zu \n " , (void * )wrapper, (void *)&wrapper->buffer , (void *)[wrapper->buffer contents ], size);
919
921
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);
921
923
buffer->interface .init_tensor = ggml_backend_metal_init_tensor;
922
924
buffer->interface .free_data = ggml_backend_metal_free_data;
923
925
buffer->backend_data = wrapper;
@@ -932,7 +934,7 @@ static void ggml_backend_metal_set_tensor_async(struct ggml_backend * backend, s
932
934
struct ggml_metal_buffer_wrapper * wrapper = (struct ggml_metal_buffer_wrapper *)tensor->extra ;
933
935
char * contents = (char *)[wrapper->buffer contents ];
934
936
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 ;
936
938
937
939
printf (" XXXXXXXXXXXXXXX SET : %p %p %p offset = %zu \n " , (void *)(tensor->data ), (void *)&wrapper->buffer , (void *)contents, offset);
938
940
@@ -945,12 +947,13 @@ static void ggml_backend_metal_set_tensor_async(struct ggml_backend * backend, s
945
947
946
948
static void ggml_backend_metal_get_tensor_async (struct ggml_backend * backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
947
949
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 );
948
951
GGML_ASSERT (tensor->extra != nil && " tensor not allocated" );
949
952
950
953
struct ggml_metal_buffer_wrapper * wrapper = (struct ggml_metal_buffer_wrapper *)tensor->extra ;
951
954
char * contents = (char *)[wrapper->buffer contents ];
952
955
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 ;
954
957
955
958
printf (" XXXXXXXXXXXXXXX GET : %p %p %p offset = %zu \n " , (void *)(tensor->data ), (void *)&wrapper->buffer , (void *)contents, offset);
956
959
0 commit comments