Bladeren bron

- use pseudo pointer constants instead of true pointer constants that would not work with dual compilation master-slave devices such as xeon phi

Olivier Aumage 9 jaren geleden
bovenliggende
commit
0b6b4ca63c
2 gewijzigde bestanden met toevoegingen van 9 en 12 verwijderingen
  1. 4 4
      include/fstarpu_mod.f90
  2. 5 8
      src/util/fstarpu.c

+ 4 - 4
include/fstarpu_mod.f90

@@ -255,8 +255,8 @@ module fstarpu_mod
                                 end function fstarpu_get_integer_constant
 
                                 function fstarpu_get_pointer_constant(s) bind(C)
-                                        use iso_c_binding, only: c_ptr,c_char
-                                        type(c_ptr) :: fstarpu_get_pointer_constant
+                                        use iso_c_binding, only: c_intptr_t,c_char
+                                        integer(c_intptr_t) :: fstarpu_get_pointer_constant
                                         character(kind=c_char) :: s
                                 end function fstarpu_get_pointer_constant
 
@@ -274,8 +274,8 @@ module fstarpu_mod
                         FSTARPU_SCRATCH = fstarpu_get_integer_constant(C_CHAR_"FSTARPU_SCRATCH"//C_NULL_CHAR)
                         FSTARPU_REDUX = fstarpu_get_integer_constant(C_CHAR_"FSTARPU_REDUX"//C_NULL_CHAR)
                         ! Initialize Fortran 'pointer' constants from C peers
-                        FSTARPU_DATA = fstarpu_get_pointer_constant(C_CHAR_"FSTARPU_DATA"//C_NULL_CHAR)
-                        FSTARPU_VALUE = fstarpu_get_pointer_constant(C_CHAR_"FSTARPU_VALUE"//C_NULL_CHAR)
+                        FSTARPU_DATA = transfer(fstarpu_get_pointer_constant(C_CHAR_"FSTARPU_DATA"//C_NULL_CHAR),C_NULL_PTR)
+                        FSTARPU_VALUE = transfer(fstarpu_get_pointer_constant(C_CHAR_"FSTARPU_VALUE"//C_NULL_CHAR),C_NULL_PTR)
                         ! Initialize size constants as 'c_ptr'
                         FSTARPU_SZ_INT4 = transfer(int(c_sizeof(FSTARPU_SZ_INT4_dummy),kind=c_intptr_t),C_NULL_PTR)
                         FSTARPU_SZ_INT8 = transfer(int(c_sizeof(FSTARPU_SZ_INT8_dummy),kind=c_intptr_t),C_NULL_PTR)

+ 5 - 8
src/util/fstarpu.c

@@ -27,11 +27,8 @@ static const int fstarpu_rw	= STARPU_RW;
 static const int fstarpu_scratch	= STARPU_SCRATCH;
 static const int fstarpu_redux	= STARPU_REDUX;
 
-static const int _fstarpu_data = STARPU_R | STARPU_W | STARPU_SCRATCH | STARPU_REDUX;
-static const void * const fstarpu_data = &_fstarpu_data;
-
-static const int _fstarpu_value = STARPU_VALUE;
-static const void * const fstarpu_value = &_fstarpu_value;
+static const intptr_t fstarpu_data = STARPU_R | STARPU_W | STARPU_SCRATCH | STARPU_REDUX;
+static const intptr_t fstarpu_value = STARPU_VALUE;
 
 extern void _starpu_pack_arguments(size_t *current_offset, size_t *arg_buffer_size_, char **arg_buffer_, void *ptr, size_t ptr_size);
 
@@ -45,7 +42,7 @@ int fstarpu_get_integer_constant(char *s)
 	else { _FSTARPU_ERROR("unknown integer constant"); }
 }
 
-const void *fstarpu_get_pointer_constant(char *s)
+intptr_t fstarpu_get_pointer_constant(char *s)
 {
 	if (!strcmp(s, "FSTARPU_DATA")) { return fstarpu_data; }
 	if (!strcmp(s, "FSTARPU_VALUE")) { return fstarpu_value; }
@@ -221,7 +218,7 @@ void fstarpu_insert_task(void ***_arglist)
 	task->name = NULL;
 	while (arglist[i] != NULL)
 	{
-		if (arglist[i] == fstarpu_data)
+		if ((intptr_t)arglist[i] == fstarpu_data)
 		{
 			i++;
 			starpu_data_handle_t handle = arglist[i];
@@ -236,7 +233,7 @@ void fstarpu_insert_task(void ***_arglist)
 			}
 			current_buffer++;
 		}
-		else if (arglist[i] == fstarpu_value)
+		else if ((intptr_t)arglist[i] == fstarpu_value)
 		{
 			i++;
 			void *ptr = arglist[i];