Browse Source

Fix is_inside for block & matrix interfaces

Samuel Thibault 6 years ago
parent
commit
33dc5d298a

+ 7 - 1
src/datawizard/interfaces/block_interface.c

@@ -101,9 +101,15 @@ static int block_pointer_is_inside(void *data_interface, unsigned node, void *pt
 {
 	(void) node;
 	struct starpu_block_interface *block_interface = data_interface;
+	uint32_t ldy = block_interface->ldy;
+	uint32_t ldz = block_interface->ldz;
+	uint32_t nx = block_interface->nx;
+	uint32_t ny = block_interface->ny;
+	uint32_t nz = block_interface->nz;
+	size_t elemsize = block_interface->elemsize;
 
 	return (char*) ptr >= (char*) block_interface->ptr &&
-		(char*) ptr < (char*) block_interface->ptr + block_interface->nx*block_interface->ny*block_interface->nz*block_interface->elemsize;
+		(char*) ptr < (char*) block_interface->ptr + (nz-1)*ldz*elemsize + (ny-1)*ldy*elemsize + nx*elemsize;
 }
 
 static void register_block_handle(starpu_data_handle_t handle, unsigned home_node, void *data_interface)

+ 5 - 1
src/datawizard/interfaces/matrix_interface.c

@@ -165,9 +165,13 @@ static int matrix_pointer_is_inside(void *data_interface, unsigned node, void *p
 {
 	(void) node;
 	struct starpu_matrix_interface *matrix_interface = data_interface;
+	uint32_t ld = matrix_interface->ld;
+	uint32_t nx = matrix_interface->nx;
+	uint32_t ny = matrix_interface->ny;
+	size_t elemsize = matrix_interface->elemsize;
 
 	return (char*) ptr >= (char*) matrix_interface->ptr &&
-		(char*) ptr < (char*) matrix_interface->ptr + matrix_interface->nx*matrix_interface->ny*matrix_interface->elemsize;
+		(char*) ptr < (char*) matrix_interface->ptr + (ny-1)*ld*elemsize + nx*elemsize;
 }