diff --git a/Makefile.am b/Makefile.am index 09288605fdb7ff0e34ddac06a4d0e0177bfb725b..b9643821fb8fbcf778f9f323923b65ac8e1c5338 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,4 +19,4 @@ ACLOCAL_AMFLAGS = -I m4 # Show the way... -SUBDIRS = src examples doc +SUBDIRS = src examples fortran_examples doc diff --git a/configure.ac b/configure.ac index 3ec22c1ed0a4ff137b9eb966f43620c06295a097..3896778f0ed8c90b412995fa48fe912220af5af3 100644 --- a/configure.ac +++ b/configure.ac @@ -34,6 +34,7 @@ AM_CONFIG_HEADER(config.h) AX_CHECK_ENABLE_DEBUG AC_PROG_CC AM_PROG_CC_C_O +AC_PROG_FC # Enable POSIX and platform extension preprocessor macros. AC_USE_SYSTEM_EXTENSIONS diff --git a/fortran_examples/Makefile.am b/fortran_examples/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..755b49cf45a91d7344afa4489d5ddd6d9565080f --- /dev/null +++ b/fortran_examples/Makefile.am @@ -0,0 +1,13 @@ + + +# Add the source directory and debug to CFLAGS +AM_FFLAGS = -I../src -DCPU_TPS=2.67e9 -DTIMERS + +# Set-up the library +bin_PROGRAMS = test + +# Sources for test +test_SOURCES = test.F90 +test_FFLAGS = $(AM_FFLAGS) +test_LDADD = ../src/.libs/libquicksched.a + diff --git a/fortran_examples/build.sh b/fortran_examples/build.sh new file mode 100755 index 0000000000000000000000000000000000000000..9f7e6c006441afa857e7def529936957d2f50873 --- /dev/null +++ b/fortran_examples/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gfortran test.F90 ../src/.libs/libquicksched.a -I../src/ -fopenmp diff --git a/fortran_examples/matrix.mod b/fortran_examples/matrix.mod new file mode 100644 index 0000000000000000000000000000000000000000..8943c118452403f800c753d2ea49e27e5f4086dd --- /dev/null +++ b/fortran_examples/matrix.mod @@ -0,0 +1,298 @@ +GFORTRAN module version '10' created from test.F90 +MD5:fa9f6d31a9b7402e8af180ad7d74e632 -- If you edit this, you'll get what you deserve. + +(() () () () () () () () () () () () () () () () () () () () () () () () +() () ()) + +() + +(('c_funptr' '__iso_c_binding' 2) ('c_ptr' '__iso_c_binding' 3)) + +() + +() + +() + +(2 'C_funptr' '__iso_c_binding' '' 1 ((DERIVED UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_BIND_C IS_C_INTEROP IS_ISO_C) ( +DERIVED 2 0 1 1 UNKNOWN ()) 0 0 () () 0 ((4 '__c_funptr_c_address' ( +INTEGER 8 0 1 0 INTEGER ()) () (UNKNOWN-FL UNKNOWN-INTENT UNKNOWN-PROC +UNKNOWN UNKNOWN 0 0) UNKNOWN-ACCESS ())) UNKNOWN-ACCESS () () 2 44 0) +3 'C_ptr' '__iso_c_binding' '' 1 ((DERIVED UNKNOWN-INTENT UNKNOWN-PROC +UNKNOWN UNKNOWN 0 0 IS_BIND_C IS_C_INTEROP IS_ISO_C) (DERIVED 3 0 1 1 +UNKNOWN ()) 0 0 () () 0 ((5 '__c_ptr_c_address' (INTEGER 8 0 1 0 INTEGER +()) () (UNKNOWN-FL UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0) +UNKNOWN-ACCESS ())) UNKNOWN-ACCESS () () 2 42 0) +6 '__iso_c_binding' '__iso_c_binding' '' 1 ((MODULE UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 INTRINSIC) (UNKNOWN 0 0 0 0 UNKNOWN ()) +0 0 () () 0 () () () 2 0) +7 'c_alert' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U00000007') () 0 () () () +2 35) +8 'c_associated' '__iso_c_binding' '__iso_c_binding_c_associated' 1 (( +PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL UNKNOWN 0 0 FUNCTION +ALWAYS_EXPLICIT IS_ISO_C) (LOGICAL 4 0 0 0 LOGICAL ()) 9 0 (10 11) () 8 +() () () 2 47) +12 'c_backspace' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U00000008') () 0 () () () +2 36) +13 'c_bool' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +LOGICAL ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '1') () 0 () +() () 2 32) +14 'c_carriage_return' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U0000000d') () 0 () () () +2 39) +15 'c_char' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +CHARACTER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '1') () 0 +() () () 2 33) +16 'c_double' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +REAL ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () () +() 2 25) +17 'c_double_complex' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +COMPLEX ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 29) +18 'c_f_pointer' '__iso_c_binding' '__iso_c_binding_c_f_pointer' 1 (( +PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE +ALWAYS_EXPLICIT IS_ISO_C) (UNKNOWN 0 0 0 0 UNKNOWN ()) 19 0 (20 21 22) () +0 () () () 2 46) +23 'c_f_procpointer' '__iso_c_binding' '__iso_c_binding_c_f_procpointer' +1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL UNKNOWN 0 0 SUBROUTINE +IS_ISO_C) (UNKNOWN 0 0 0 0 UNKNOWN ()) 24 0 (25 26) () 0 () () () 2 50) +27 'c_float' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +REAL ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '4') () 0 () () +() 2 24) +28 'c_float128' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +REAL ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '16') () 0 () () +() 2 27) +29 'c_float128_complex' '__iso_c_binding' '' 1 ((PARAMETER +UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) ( +INTEGER 4 0 1 1 COMPLEX ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) +0 '16') () 0 () () () 2 31) +30 'c_float_complex' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +COMPLEX ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '4') () 0 () +() () 2 28) +31 'c_form_feed' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U0000000c') () 0 () () () +2 37) +32 'c_funloc' '__iso_c_binding' '__iso_c_binding_c_funloc' 1 (( +PROCEDURE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 EXTERNAL +FUNCTION PURE IS_ISO_C) (DERIVED 2 0 0 0 DERIVED ()) 0 0 () () 32 () () +() 2 49) +33 'c_funptr' '__iso_c_binding' '' 1 ((PROCEDURE UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 FUNCTION GENERIC) (UNKNOWN 0 0 0 0 +UNKNOWN ()) 0 0 () () 0 () () () 2 44) +34 'c_horizontal_tab' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U00000009') () 0 () () () +2 40) +35 'c_int' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '4') () 0 () +() () 2 0) +36 'c_int128_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '16') () 0 () +() () 2 13) +37 'c_int16_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '2') () 0 () +() () 2 10) +38 'c_int32_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '4') () 0 () +() () 2 11) +39 'c_int64_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 12) +40 'c_int8_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '1') () 0 () +() () 2 9) +41 'c_int_fast128_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '16') () 0 () +() () 2 23) +42 'c_int_fast16_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 20) +43 'c_int_fast32_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 21) +44 'c_int_fast64_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 22) +45 'c_int_fast8_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '1') () 0 () +() () 2 19) +46 'c_int_least128_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '16') () 0 () +() () 2 18) +47 'c_int_least16_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '2') () 0 () +() () 2 15) +48 'c_int_least32_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '4') () 0 () +() () 2 16) +49 'c_int_least64_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 17) +50 'c_int_least8_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '1') () 0 () +() () 2 14) +51 'c_intmax_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 4) +52 'c_intptr_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 5) +53 'c_loc' '__iso_c_binding' '__iso_c_binding_c_loc' 1 ((PROCEDURE +UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 EXTERNAL FUNCTION PURE +IS_ISO_C) (DERIVED 3 0 0 0 DERIVED ()) 0 0 () () 53 () () () 2 48) +54 'c_long' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 2) +55 'c_long_double' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +REAL ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '10') () 0 () () +() 2 26) +56 'c_long_double_complex' '__iso_c_binding' '' 1 ((PARAMETER +UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) ( +INTEGER 4 0 1 1 COMPLEX ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) +0 '10') () 0 () () () 2 30) +57 'c_long_long' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 3) +58 'c_new_line' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U0000000a') () 0 () () () +2 38) +59 'c_null_char' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U00000000') () 0 () () () +2 34) +60 'c_null_funptr' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_BIND_C IS_C_INTEROP IS_ISO_C) ( +DERIVED 2 0 1 1 UNKNOWN ()) 0 0 () (STRUCTURE (DERIVED 2 0 0 0 DERIVED ()) +0 (((NULL (UNKNOWN 0 0 0 1 UNKNOWN ()) 0) ())) ()) () 0 () () () 2 45) +61 'c_null_ptr' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_BIND_C IS_C_INTEROP IS_ISO_C) ( +DERIVED 3 0 1 1 UNKNOWN ()) 0 0 () (STRUCTURE (DERIVED 3 0 0 0 DERIVED ()) +0 (((NULL (UNKNOWN 0 0 0 1 UNKNOWN ()) 0) ())) ()) () 0 () () () 2 43) +62 'c_ptr' '__iso_c_binding' '' 1 ((PROCEDURE UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 FUNCTION GENERIC) (UNKNOWN 0 0 0 0 +UNKNOWN ()) 0 0 () () 0 () () () 2 42) +63 'c_ptrdiff_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 6) +64 'c_short' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '2') () 0 () +() () 2 1) +65 'c_signed_char' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '1') () 0 () +() () 2 8) +66 'c_size_t' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (INTEGER 4 0 1 1 +INTEGER ()) 0 0 () (CONSTANT (INTEGER 4 0 1 1 UNKNOWN ()) 0 '8') () 0 () +() () 2 7) +67 'c_sizeof' '__iso_c_binding' '' 1 ((PROCEDURE UNKNOWN-INTENT +UNKNOWN-PROC DECL UNKNOWN 0 0 INTRINSIC FUNCTION) (INTEGER 8 0 0 0 +INTEGER ()) 68 0 (69) () 0 () () () 2 48) +70 'c_vertical_tab' '__iso_c_binding' '' 1 ((PARAMETER UNKNOWN-INTENT +UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 IS_C_INTEROP IS_ISO_C) (CHARACTER 1 0 1 +1 CHARACTER ((CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1'))) 0 0 () ( +CONSTANT (CHARACTER 1 0 1 1 UNKNOWN (())) 0 1 '\U0000000b') () 0 () () () +2 41) +71 'hello' 'matrix' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL +UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 72 0 (73) () 0 () () +() 0 0) +74 'matrix' 'matrix' '' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN +UNKNOWN 0 0) (UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0) +75 'runner' 'matrix' '' 1 ((PROCEDURE UNKNOWN-INTENT MODULE-PROC DECL +UNKNOWN 0 0 SUBROUTINE) (UNKNOWN 0 0 0 0 UNKNOWN ()) 76 0 (77 78) () 0 () +() () 0 0) +10 'C_ptr_1' '__iso_c_binding' '' 9 ((DERIVED IN UNKNOWN-PROC UNKNOWN +UNKNOWN 0 0 VALUE DUMMY) (DERIVED 3 0 0 0 DERIVED ()) 0 0 () () 0 () () +() 0 0 0) +11 'C_ptr_2' '__iso_c_binding' '' 9 ((DERIVED IN UNKNOWN-PROC UNKNOWN +UNKNOWN 0 0 OPTIONAL VALUE DUMMY) (DERIVED 3 0 0 0 DERIVED ()) 0 0 () () +0 () () () 0 0 0) +20 'Cptr' '__iso_c_binding' '' 19 ((DERIVED IN UNKNOWN-PROC UNKNOWN +UNKNOWN 0 0 VALUE DUMMY) (DERIVED 3 0 0 0 DERIVED ()) 0 0 () () 0 () () +() 0 0 0) +21 'fptr' '__iso_c_binding' '' 19 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC +UNKNOWN UNKNOWN 0 0 POINTER DUMMY) (VOID 0 0 0 0 VOID ()) 0 0 () () 0 () +() () 0 0) +22 'shape' '__iso_c_binding' '' 19 ((VARIABLE IN UNKNOWN-PROC UNKNOWN +UNKNOWN 0 0 DIMENSION OPTIONAL DUMMY) (VOID 4 0 0 0 VOID ()) 0 0 () (1 0 +ASSUMED_SHAPE (CONSTANT (INTEGER 4 0 0 0 INTEGER ()) 0 '1') ()) 0 () () +() 0 0) +25 'Cptr' '__iso_c_binding' '' 24 ((DERIVED IN UNKNOWN-PROC UNKNOWN +UNKNOWN 0 0 VALUE DUMMY) (DERIVED 2 0 0 0 DERIVED ()) 0 0 () () 0 () () +() 0 0 0) +26 'fptr' '__iso_c_binding' '' 24 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC +UNKNOWN UNKNOWN 0 0 DUMMY PROC_POINTER) (VOID 0 0 0 0 VOID ()) 0 0 () () +0 () () () 0 0) +69 'x' '' '' 68 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 DUMMY) ( +UNKNOWN 0 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0) +73 'task_num' '' '' 72 ((VARIABLE IN UNKNOWN-PROC UNKNOWN UNKNOWN 0 0 +DUMMY) (INTEGER 4 0 0 0 INTEGER ()) 0 0 () () 0 () () () 0 0) +77 'typ' '' '' 76 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN UNKNOWN +0 0 VALUE DUMMY) (INTEGER 4 0 1 0 INTEGER ()) 0 0 () () 0 () () () 0 0) +78 'data' '' '' 76 ((VARIABLE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN +UNKNOWN 0 0 VALUE DUMMY) (DERIVED 3 0 0 0 DERIVED ()) 0 0 () () 0 () () +() 0 0) +) + +('C_funptr' 0 2 'C_ptr' 0 3 '__iso_c_binding' 0 6 'c_alert' 0 7 +'c_associated' 0 8 'c_backspace' 0 12 'c_bool' 0 13 'c_carriage_return' +0 14 'c_char' 0 15 'c_double' 0 16 'c_double_complex' 0 17 'c_f_pointer' +0 18 'c_f_procpointer' 0 23 'c_float' 0 27 'c_float128' 0 28 +'c_float128_complex' 0 29 'c_float_complex' 0 30 'c_form_feed' 0 31 +'c_funloc' 0 32 'c_funptr' 0 33 'c_horizontal_tab' 0 34 'c_int' 0 35 +'c_int128_t' 0 36 'c_int16_t' 0 37 'c_int32_t' 0 38 'c_int64_t' 0 39 +'c_int8_t' 0 40 'c_int_fast128_t' 0 41 'c_int_fast16_t' 0 42 +'c_int_fast32_t' 0 43 'c_int_fast64_t' 0 44 'c_int_fast8_t' 0 45 +'c_int_least128_t' 0 46 'c_int_least16_t' 0 47 'c_int_least32_t' 0 48 +'c_int_least64_t' 0 49 'c_int_least8_t' 0 50 'c_intmax_t' 0 51 +'c_intptr_t' 0 52 'c_loc' 0 53 'c_long' 0 54 'c_long_double' 0 55 +'c_long_double_complex' 0 56 'c_long_long' 0 57 'c_new_line' 0 58 +'c_null_char' 0 59 'c_null_funptr' 0 60 'c_null_ptr' 0 61 'c_ptr' 0 62 +'c_ptrdiff_t' 0 63 'c_short' 0 64 'c_signed_char' 0 65 'c_size_t' 0 66 +'c_sizeof' 0 67 'c_vertical_tab' 0 70 'hello' 0 71 'matrix' 0 74 'runner' +0 75) diff --git a/fortran_examples/test.F90 b/fortran_examples/test.F90 new file mode 100644 index 0000000000000000000000000000000000000000..e8d0182359fcbcc8cb77248d45ddbd4912025468 --- /dev/null +++ b/fortran_examples/test.F90 @@ -0,0 +1,57 @@ +Module matrix +Use, Intrinsic :: ISO_C_BINDING +Implicit None + +Contains + +Subroutine hello(task_num) +Integer, Intent(In) :: task_num + +print *, task_num +End Subroutine + +Subroutine runner(typ, data) +Integer(Kind=C_INT), VALUE :: typ +Type(C_PTR), VALUE :: data +Integer, Pointer :: c(:) + +call c_f_pointer(data, c, [1]) + +if(typ == 1) then + call hello(Int(c(1)) ) +else + print *, "Unknown task type" +end if + +End Subroutine + +End Module matrix + + +Program task_universe +Use, Intrinsic :: ISO_C_BINDING +Use :: quicksched +Use :: matrix +Implicit None + +Type(C_PTR) :: sched +Integer :: i,j +Integer(Kind=C_INT), Dimension(10), Target :: datas +Type(C_FUNPTR) :: fun +Integer(Kind=C_INT), Parameter :: nr_threads=2 + +fun = C_FUNLOC(runner) +sched = f_qsched_create() + +call qsched_init(sched, nr_threads, 0) + +do i = 1, 100 + datas(1) = Int(i, C_INT) + j = qsched_addtask(sched, 1, 0, C_LOC(datas(1)), INT(sizeof(j)*1, C_INT), 1) + if(j >= 2 .and. mod(j,2) == 0) call qsched_addunlock(sched, INT(j, C_INT), INT(j-2, C_INT)) +end do + + + Call qsched_run(sched, nr_threads, fun) +call f_qsched_destroy(sched) +End Program diff --git a/src/Makefile.am b/src/Makefile.am index aded79764b0145d6f8207d3612de346caaf6fb5b..b7192048b10e15a1e40560cb1a629095d821ff5a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -26,7 +26,7 @@ GIT_CMD = @GIT_CMD@ # Build the libquicksched library lib_LTLIBRARIES = libquicksched.la -libquicksched_la_SOURCES = qsched.c queue.c +libquicksched_la_SOURCES = qsched.c queue.c fqsched.F90 # List required headers include_HEADERS = atomic.h lock.h queue.h qsched.h task.h res.h error.h diff --git a/src/qsched.F90 b/src/fqsched.F90 similarity index 82% rename from src/qsched.F90 rename to src/fqsched.F90 index 5f6198ff4e5c7af07b86efbeda785489a62f24eb..b9db2cb9117a49b088b4d8a233542f4e91214db1 100644 --- a/src/qsched.F90 +++ b/src/fqsched.F90 @@ -6,12 +6,25 @@ Module quicksched !!TODO May need a qsched_get_qsched to get a pointer? + Type(C_PTR) Function f_qsched_create() BIND(C) + Use, Intrinsic :: ISO_C_BINDING + Implicit None + + End Function + + Subroutine f_qsched_destroy(s) BIND(C) + Use, Intrinsic :: ISO_C_BINDING + Implicit None + + Type(C_PTR), VALUE :: s + End Subroutine + Subroutine qsched_init(s, nr_queues, flags) BIND(C) Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: nr_queues Integer(Kind=C_INT), Intent(In), VALUE :: flags End Subroutine @@ -20,7 +33,7 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: owner Integer(Kind=C_INT), Intent(In), VALUE :: parent End Function @@ -29,7 +42,7 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: t Integer(Kind=C_INT), Intent(In), VALUE :: res End Subroutine @@ -38,7 +51,7 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: ta Integer(Kind=C_INT), Intent(In), VALUE :: tb @@ -48,10 +61,10 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: types Integer(Kind=C_INT), Intent(In), VALUE :: flags !TODO Careful with unsigned - Type(C_PTR), Intent(In), VALUE :: data + Type(C_PTR), VALUE :: data Integer(Kind=C_INT), Intent(In), VALUE :: data_size IntegeR(Kind=C_INT), Intent(In), VALUE :: cost @@ -61,7 +74,7 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: t Integer(Kind=C_INT), Intent(In), VALUE :: res End Subroutine @@ -70,7 +83,7 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s End Subroutine @@ -78,7 +91,7 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: nr_threads Type(C_FUNPTR), INTENT(In), VALUE :: fun End Subroutine @@ -87,7 +100,7 @@ Module quicksched Use, Intrinsic :: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s End Subroutine @@ -97,7 +110,7 @@ Module quicksched Use, Intrinsic:: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: nr_tasks Integer(Kind=C_INT), Intent(In), VALUE :: nr_res Integer(Kind=C_INT), Intent(In), VALUE :: nr_deps @@ -111,7 +124,7 @@ Module quicksched Use, Intrinsic:: ISO_C_BINDING Implicit None - Type(C_PTR), Intent(InOut), VALUE :: s + Type(C_PTR), VALUE :: s Integer(Kind=C_INT), Intent(In), VALUE :: res Integer(Kind=C_INT), Intent(In), VALUE :: owner diff --git a/src/qsched.c b/src/qsched.c index f6ce8b26349b91fc1f64afcab843266a5b0dc274..45e0dac9f483ad82967c7a07773e623cd95436c7 100644 --- a/src/qsched.c +++ b/src/qsched.c @@ -1646,3 +1646,16 @@ void qsched_init ( struct qsched *s , int nr_queues , int flags ) { lock_init( &s->lock ); } + + +struct qsched * f_qsched_create() +{ + struct qsched *s; + s = (struct qsched *) malloc(sizeof(struct qsched)); + return s; +} +void f_qsched_destroy( struct qsched *s) +{ + free(s); +} + diff --git a/src/qsched.h b/src/qsched.h index b9ee503cc4e1d5afd08179c7a56eaed516dcb2c1..fa424b41f8e6d2c20893aea11ecf083e2597880f 100644 --- a/src/qsched.h +++ b/src/qsched.h @@ -211,3 +211,6 @@ void qsched_reset ( struct qsched *s ); void qsched_addtask_dynamic ( struct qsched *s , int type , unsigned int flags , void *data , int data_size , int cost , qsched_res_t *locks , int nr_locks , qsched_res_t *uses , int nr_uses ); void qsched_ensure ( struct qsched *s , int nr_tasks , int nr_res , int nr_deps , int nr_locks , int nr_uses , int size_data ); void qsched_res_own ( struct qsched *s , qsched_res_t res , int owner ); + +struct qsched * f_qsched_create(); +void f_qsched_destroy( struct qsched *s);