diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 836d2e4e..65a4c32e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -122,14 +122,14 @@ jobs: version: latest container: ghcr.io/lfortran/lfortran:latest native_multi_image: true - FFLAGS: --coarray=true -DHAVE_TEAM=0 -DHAVE_EVENT_TYPE=0 -DHAVE_LOCK_TYPE=0 -DHAVE_NOTIFY_TYPE=0 -DHAVE_COARRAY -DHAVE_ALLOC_COARRAY=0 -DHAVE_COARRAY_QUERY=0 + FFLAGS: --coarray=true -DHAVE_TEAM=0 -DHAVE_COARRAY -DHAVE_ALLOC_COARRAY=0 -DHAVE_COARRAY_QUERY=0 -DHAVE_EVENT=0 -DHAVE_LOCK_TYPE=0 -DHAVE_NOTIFY_TYPE=0 - os: ubuntu-22.04 compiler: lfortran version: 0.64 container: ghcr.io/lfortran/lfortran:v0.64.0 native_multi_image: true - FFLAGS: --coarray=true -DHAVE_TEAM=0 -DHAVE_EVENT_TYPE=0 -DHAVE_LOCK_TYPE=0 -DHAVE_NOTIFY_TYPE=0 -DHAVE_COARRAY -DHAVE_ALLOC_COARRAY=0 -DHAVE_COARRAY_QUERY=0 + FFLAGS: --coarray=true -DHAVE_TEAM=0 -DHAVE_COARRAY -DHAVE_ALLOC_COARRAY=0 -DHAVE_COARRAY_QUERY=0 -DHAVE_EVENT=0 -DHAVE_LOCK_TYPE=0 -DHAVE_NOTIFY_TYPE=0 - os: ubuntu-22.04 compiler: lfortran @@ -336,9 +336,9 @@ jobs: fi if [ "${NATIVE_MULTI_IMAGE}" == true ] ; then if [[ $COMPILER_VERSION == latest ]] ; then - echo "FFLAGS=$FFLAGS -fcoarray -DHAVE_COARRAY -DHAVE_ALLOC_COARRAY=0 -DHAVE_SAVE_COARRAY=0 -DHAVE_MODULE_COARRAY=0 -DHAVE_COARRAY_INIT=0 -DIGNORE_FAILURES=6" >> "$GITHUB_ENV" + echo "FFLAGS=$FFLAGS -fcoarray -DHAVE_COARRAY -DHAVE_ALLOC_COARRAY=0 -DHAVE_SAVE_COARRAY=0 -DHAVE_MODULE_COARRAY=0 -DHAVE_COARRAY_INIT=0 -DHAVE_PUTGET=0 -DHAVE_EVENT=0 -DHAVE_EVENT_TYPE -DIGNORE_FAILURES=6" >> "$GITHUB_ENV" else - echo "FFLAGS=$FFLAGS -fcoarray -DIGNORE_FAILURES=8" >> "$GITHUB_ENV" + echo "FFLAGS=$FFLAGS -fcoarray -DHAVE_EVENT_TYPE -DIGNORE_FAILURES=8" >> "$GITHUB_ENV" fi fi diff --git a/app/native-multi-image.F90 b/app/native-multi-image.F90 index 9d1d4ffe..78f9831e 100644 --- a/app/native-multi-image.F90 +++ b/app/native-multi-image.F90 @@ -41,15 +41,6 @@ #ifndef HAVE_TEAM_TYPE #define HAVE_TEAM_TYPE HAVE_TEAM #endif -#ifndef HAVE_EVENT_TYPE -#define HAVE_EVENT_TYPE 1 -#endif -#ifndef HAVE_LOCK_TYPE -#define HAVE_LOCK_TYPE 1 -#endif -#ifndef HAVE_NOTIFY_TYPE -#define HAVE_NOTIFY_TYPE 1 -#endif ! TYPES_IMPORT_PRIF: compiler imports the real PRIF definition of ISO_FORTRAN_ENV types #ifndef TYPES_IMPORT_PRIF #define TYPES_IMPORT_PRIF 0 @@ -74,6 +65,13 @@ #define HAVE_COARRAY_INIT HAVE_COARRAY #endif +#ifndef HAVE_PUTGET +#define HAVE_PUTGET HAVE_COARRAY +#endif +#ifndef HAVE_PUTGET_INTRINSIC_SCALAR +#define HAVE_PUTGET_INTRINSIC_SCALAR HAVE_PUTGET +#endif + ! coarray query intrinsics #ifndef HAVE_COARRAY_QUERY #define HAVE_COARRAY_QUERY HAVE_COARRAY @@ -91,6 +89,27 @@ #define HAVE_THIS_IMAGE_COARRAY HAVE_COARRAY_QUERY #endif +#ifndef HAVE_EVENT +#define HAVE_EVENT HAVE_COARRAY +#endif +#ifndef HAVE_EVENT_TYPE +#define HAVE_EVENT_TYPE HAVE_EVENT +#endif +#ifndef HAVE_EVENT_POST_WAIT +#define HAVE_EVENT_POST_WAIT HAVE_EVENT +#endif +#ifndef HAVE_EVENT_QUERY +#define HAVE_EVENT_QUERY HAVE_EVENT +#endif + +#ifndef HAVE_LOCK_TYPE +#define HAVE_LOCK_TYPE 1 +#endif + +#ifndef HAVE_NOTIFY_TYPE +#define HAVE_NOTIFY_TYPE 1 +#endif + ! Helper macros #define CHECK_TYPE_COMPLIANCE(subject_type, subject, is_team, min_size) \ BLOCK ; \ @@ -253,6 +272,7 @@ program native_multi_image # endif # if HAVE_EVENT_TYPE type(event_type), target :: default_event[*] + type(event_type) :: test_event[*] # endif # if HAVE_NOTIFY_TYPE type(notify_type), target :: default_notify[*] @@ -410,12 +430,51 @@ program native_multi_image write(*,'(A,I3)') "this_image(sca_int_3, dim=2) = ", THIS_IMAGE(sca_int_3, dim=2) end if # endif +# if HAVE_PUTGET_INTRINSIC_SCALAR + call status("Testing put/get intrinsic scalar...") + sca_int_1 = THIS_IMAGE() + call sync_all + i = sca_int_1[peer] ! get + if (i /= peer) then + write(*,'(*(A,I3))') "FAIL: get sca_int_1[peer] = ", i, " expected = ", peer + fail_count = fail_count + 1 + end if + call sync_all + sca_int_1[peer] = THIS_IMAGE() ! put + call sync_all + i = sca_int_1 + if (i /= peer) then + write(*,'(*(A,I3))') "FAIL: put to sca_int_1 = ", i, " expected = ", peer + fail_count = fail_count + 1 + end if +# endif # endif # if HAVE_EVENT_TYPE CHECK_TYPE_COMPLIANCE(EVENT_TYPE, default_event, .false., 64) # endif +# if HAVE_EVENT_QUERY + call status("Testing event_query...") + i = 666 + call EVENT_QUERY(test_event, i) + if (i /= 0) then + write(*,'(A,I3)') "FAIL: EVENT_QUERY(test_event) = ", i + fail_count = fail_count + 1 + end if +# endif + +# if HAVE_EVENT_POST_WAIT + call status("Testing event post / event wait...") + if (THIS_IMAGE() == 1) then + !event post (test_event) ! currently broken + event post (test_event[1]) + event wait (test_event, until_count=NUM_IMAGES()) + else + event post (test_event[1]) + end if +# endif + # if HAVE_LOCK_TYPE CHECK_TYPE_COMPLIANCE(LOCK_TYPE, default_lock, .false., 64) # endif diff --git a/include/language-support.F90 b/include/language-support.F90 index da546b82..9455ac28 100644 --- a/include/language-support.F90 +++ b/include/language-support.F90 @@ -57,6 +57,8 @@ #ifndef CAF_IMPORT_CONSTANTS # if defined(__flang__) # define CAF_IMPORT_CONSTANTS 1 +# elif __LFORTRAN_MAJOR__ > 0 || __LFORTRAN_MINOR__ >= 64 +# define CAF_IMPORT_CONSTANTS 1 # else # define CAF_IMPORT_CONSTANTS 0 # endif