From 0345245e860375a32c9a437c4a9d9cae807134e9 Mon Sep 17 00:00:00 2001 From: Shashank Date: Mon, 29 May 2017 12:40:26 +0530 Subject: CMSCOPE changed --- modules/parallel/sci_gateway/c/.deps/.dirstamp | 0 .../c/.deps/libsciparallel_la-gw_parallel.Plo | 274 ++++++ .../libsciparallel_la-sci_parallel_concurrency.Plo | 267 ++++++ modules/parallel/sci_gateway/c/.dirstamp | 0 .../c/.libs/libsciparallel_la-gw_parallel.o | Bin 0 -> 6384 bytes .../libsciparallel_la-sci_parallel_concurrency.o | Bin 0 -> 6104 bytes modules/parallel/sci_gateway/c/gw_parallel.c | 38 + .../sci_gateway/c/libsciparallel_la-gw_parallel.lo | 12 + .../libsciparallel_la-sci_parallel_concurrency.lo | 12 + .../sci_gateway/c/sci_parallel_concurrency.c | 32 + modules/parallel/sci_gateway/cpp/.deps/.dirstamp | 0 .../.deps/libsciparallel_la-sci_parallel_run.Plo | 642 +++++++++++++ modules/parallel/sci_gateway/cpp/.dirstamp | 0 .../cpp/.libs/libsciparallel_la-sci_parallel_run.o | Bin 0 -> 558776 bytes .../cpp/libsciparallel_la-sci_parallel_run.lo | 12 + .../parallel/sci_gateway/cpp/sci_parallel_run.cpp | 996 +++++++++++++++++++++ modules/parallel/sci_gateway/parallel_gateway.xml | 27 + 17 files changed, 2312 insertions(+) create mode 100755 modules/parallel/sci_gateway/c/.deps/.dirstamp create mode 100755 modules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo create mode 100755 modules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo create mode 100755 modules/parallel/sci_gateway/c/.dirstamp create mode 100755 modules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.o create mode 100755 modules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.o create mode 100755 modules/parallel/sci_gateway/c/gw_parallel.c create mode 100755 modules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo create mode 100755 modules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo create mode 100755 modules/parallel/sci_gateway/c/sci_parallel_concurrency.c create mode 100755 modules/parallel/sci_gateway/cpp/.deps/.dirstamp create mode 100755 modules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo create mode 100755 modules/parallel/sci_gateway/cpp/.dirstamp create mode 100755 modules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.o create mode 100755 modules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo create mode 100755 modules/parallel/sci_gateway/cpp/sci_parallel_run.cpp create mode 100755 modules/parallel/sci_gateway/parallel_gateway.xml (limited to 'modules/parallel/sci_gateway') diff --git a/modules/parallel/sci_gateway/c/.deps/.dirstamp b/modules/parallel/sci_gateway/c/.deps/.dirstamp new file mode 100755 index 000000000..e69de29bb diff --git a/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo new file mode 100755 index 000000000..013fb983a --- /dev/null +++ b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo @@ -0,0 +1,274 @@ +sci_gateway/c/libsciparallel_la-gw_parallel.lo: \ + sci_gateway/c/gw_parallel.c /usr/include/stdc-predef.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h \ + ../../modules/api_scilab/includes/api_scilab.h \ + ../../modules/core/includes/stack-c.h \ + ../../modules/core/includes/core_math.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + ../../modules/core/includes/stack-def.h \ + ../../modules/core/includes/machine.h \ + ../../modules/core/includes/stackTypeVariable.h \ + ../../modules/core/includes/BOOL.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/core/includes/stack1.h \ + ../../modules/core/includes/scisparse.h \ + ../../modules/core/includes/stack2.h \ + ../../modules/core/includes/stack3.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/core/includes/sci_types.h \ + ../../modules/api_scilab/includes/api_common.h \ + ../../modules/api_scilab/includes/api_scilab.h \ + ../../modules/api_scilab/includes/api_double.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/api_scilab/includes/api_string.h /usr/include/wchar.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + ../../modules/api_scilab/includes/api_int.h \ + ../../modules/api_scilab/includes/api_poly.h \ + ../../modules/api_scilab/includes/api_sparse.h \ + ../../modules/api_scilab/includes/api_boolean.h \ + ../../modules/api_scilab/includes/api_boolean_sparse.h \ + ../../modules/api_scilab/includes/api_pointer.h \ + ../../modules/api_scilab/includes/api_list.h \ + ../../modules/api_scilab/includes/api_error.h \ + ../../modules/api_scilab/includes/api_handle.h \ + ../../modules/api_scilab/includes/api_optional.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/api_scilab/includes/api_hypermat.h \ + ../../modules/core/includes/core_math.h \ + ../../modules/core/includes/sci_types.h includes/gw_parallel.h \ + includes/dynlib_parallel.h ../../modules/core/includes/MALLOC.h \ + ../../modules/core/includes/sci_mem_alloc.h \ + ../../modules/core/includes/callFunctionFromGateway.h + +/usr/include/stdc-predef.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +../../modules/api_scilab/includes/api_scilab.h: + +../../modules/core/includes/stack-c.h: + +../../modules/core/includes/core_math.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +../../modules/core/includes/stack-def.h: + +../../modules/core/includes/machine.h: + +../../modules/core/includes/stackTypeVariable.h: + +../../modules/core/includes/BOOL.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/core/includes/stack1.h: + +../../modules/core/includes/scisparse.h: + +../../modules/core/includes/stack2.h: + +../../modules/core/includes/stack3.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/core/includes/sci_types.h: + +../../modules/api_scilab/includes/api_common.h: + +../../modules/api_scilab/includes/api_scilab.h: + +../../modules/api_scilab/includes/api_double.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/api_scilab/includes/api_string.h: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +../../modules/api_scilab/includes/api_int.h: + +../../modules/api_scilab/includes/api_poly.h: + +../../modules/api_scilab/includes/api_sparse.h: + +../../modules/api_scilab/includes/api_boolean.h: + +../../modules/api_scilab/includes/api_boolean_sparse.h: + +../../modules/api_scilab/includes/api_pointer.h: + +../../modules/api_scilab/includes/api_list.h: + +../../modules/api_scilab/includes/api_error.h: + +../../modules/api_scilab/includes/api_handle.h: + +../../modules/api_scilab/includes/api_optional.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/api_scilab/includes/api_hypermat.h: + +../../modules/core/includes/core_math.h: + +../../modules/core/includes/sci_types.h: + +includes/gw_parallel.h: + +includes/dynlib_parallel.h: + +../../modules/core/includes/MALLOC.h: + +../../modules/core/includes/sci_mem_alloc.h: + +../../modules/core/includes/callFunctionFromGateway.h: diff --git a/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo new file mode 100755 index 000000000..971b5bac3 --- /dev/null +++ b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo @@ -0,0 +1,267 @@ +sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo: \ + sci_gateway/c/sci_parallel_concurrency.c /usr/include/stdc-predef.h \ + includes/gw_parallel.h includes/dynlib_parallel.h includes/concurrency.h \ + ../../modules/api_scilab/includes/api_scilab.h \ + ../../modules/core/includes/stack-c.h /usr/include/string.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h \ + ../../modules/core/includes/core_math.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + ../../modules/core/includes/stack-def.h \ + ../../modules/core/includes/machine.h \ + ../../modules/core/includes/stackTypeVariable.h \ + ../../modules/core/includes/BOOL.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/core/includes/stack1.h \ + ../../modules/core/includes/scisparse.h \ + ../../modules/core/includes/stack2.h \ + ../../modules/core/includes/stack3.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/core/includes/sci_types.h \ + ../../modules/api_scilab/includes/api_common.h \ + ../../modules/api_scilab/includes/api_scilab.h \ + ../../modules/api_scilab/includes/api_double.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/api_scilab/includes/api_string.h /usr/include/wchar.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + ../../modules/api_scilab/includes/api_int.h \ + ../../modules/api_scilab/includes/api_poly.h \ + ../../modules/api_scilab/includes/api_sparse.h \ + ../../modules/api_scilab/includes/api_boolean.h \ + ../../modules/api_scilab/includes/api_boolean_sparse.h \ + ../../modules/api_scilab/includes/api_pointer.h \ + ../../modules/api_scilab/includes/api_list.h \ + ../../modules/api_scilab/includes/api_error.h \ + ../../modules/api_scilab/includes/api_handle.h \ + ../../modules/api_scilab/includes/api_optional.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/api_scilab/includes/api_hypermat.h \ + ../../modules/core/includes/core_math.h \ + ../../modules/core/includes/sci_types.h + +/usr/include/stdc-predef.h: + +includes/gw_parallel.h: + +includes/dynlib_parallel.h: + +includes/concurrency.h: + +../../modules/api_scilab/includes/api_scilab.h: + +../../modules/core/includes/stack-c.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +../../modules/core/includes/core_math.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +../../modules/core/includes/stack-def.h: + +../../modules/core/includes/machine.h: + +../../modules/core/includes/stackTypeVariable.h: + +../../modules/core/includes/BOOL.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/core/includes/stack1.h: + +../../modules/core/includes/scisparse.h: + +../../modules/core/includes/stack2.h: + +../../modules/core/includes/stack3.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/core/includes/sci_types.h: + +../../modules/api_scilab/includes/api_common.h: + +../../modules/api_scilab/includes/api_scilab.h: + +../../modules/api_scilab/includes/api_double.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/api_scilab/includes/api_string.h: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +../../modules/api_scilab/includes/api_int.h: + +../../modules/api_scilab/includes/api_poly.h: + +../../modules/api_scilab/includes/api_sparse.h: + +../../modules/api_scilab/includes/api_boolean.h: + +../../modules/api_scilab/includes/api_boolean_sparse.h: + +../../modules/api_scilab/includes/api_pointer.h: + +../../modules/api_scilab/includes/api_list.h: + +../../modules/api_scilab/includes/api_error.h: + +../../modules/api_scilab/includes/api_handle.h: + +../../modules/api_scilab/includes/api_optional.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/api_scilab/includes/api_hypermat.h: + +../../modules/core/includes/core_math.h: + +../../modules/core/includes/sci_types.h: diff --git a/modules/parallel/sci_gateway/c/.dirstamp b/modules/parallel/sci_gateway/c/.dirstamp new file mode 100755 index 000000000..e69de29bb diff --git a/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.o b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.o new file mode 100755 index 000000000..12e712215 Binary files /dev/null and b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.o differ diff --git a/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.o b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.o new file mode 100755 index 000000000..42b25a9c3 Binary files /dev/null and b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.o differ diff --git a/modules/parallel/sci_gateway/c/gw_parallel.c b/modules/parallel/sci_gateway/c/gw_parallel.c new file mode 100755 index 000000000..7c78dafac --- /dev/null +++ b/modules/parallel/sci_gateway/c/gw_parallel.c @@ -0,0 +1,38 @@ +/* +* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +* Copyright (C) 2010 - DIGITEO - Allan CORNET +* +* This file must be used under the terms of the CeCILL. +* This source file is licensed as described in the file COPYING, which +* you should have received as part of this distribution. The terms +* are also available at +* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +* +*/ +#include +#include "api_scilab.h" +#include "gw_parallel.h" +#include "MALLOC.h" +#include "callFunctionFromGateway.h" + +/*--------------------------------------------------------------------------*/ +static gw_generic_table Tab[] = +{ + {sci_parallel_run, "parallel_run"} + , {sci_parallel_concurrency, "parallel_concurrency"} +}; +/*--------------------------------------------------------------------------*/ +int gw_parallel(void) +{ + Rhs = Max(0, Rhs); + + if (pvApiCtx == NULL) + { + pvApiCtx = (StrCtx*)MALLOC(sizeof(StrCtx)); + } + + pvApiCtx->pstName = (char*)Tab[Fin - 1].name; + callFunctionFromGateway(Tab, SIZE_CURRENT_GENERIC_TABLE(Tab)); + return 0; +} +/*--------------------------------------------------------------------------*/ diff --git a/modules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo b/modules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo new file mode 100755 index 000000000..47c5a21f2 --- /dev/null +++ b/modules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo @@ -0,0 +1,12 @@ +# sci_gateway/c/libsciparallel_la-gw_parallel.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libsciparallel_la-gw_parallel.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/modules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo b/modules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo new file mode 100755 index 000000000..0f389c2f7 --- /dev/null +++ b/modules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo @@ -0,0 +1,12 @@ +# sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libsciparallel_la-sci_parallel_concurrency.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/modules/parallel/sci_gateway/c/sci_parallel_concurrency.c b/modules/parallel/sci_gateway/c/sci_parallel_concurrency.c new file mode 100755 index 000000000..3255f0a4d --- /dev/null +++ b/modules/parallel/sci_gateway/c/sci_parallel_concurrency.c @@ -0,0 +1,32 @@ +/* +* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +* Copyright (C) 2010 - DIGITEO - Bernard HUGUENEY +* +* This file must be used under the terms of the CeCILL. +* This source file is licensed as described in the file COPYING, which +* you should have received as part of this distribution. The terms +* are also available at +* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +* +*/ + +#include "gw_parallel.h" +#include "concurrency.h" /* prototype for concurrency query function */ +#include "api_scilab.h" + + +/* Just a simple scilab wrapper to parallelConcurrency(): +* returns non zero when called from a concurrent execution context +*/ + +int sci_parallel_concurrency(char *fname, unsigned long fname_len) +{ + CheckRhs(0, 0); + CheckLhs(1, 1); + + createScalarDouble(pvApiCtx, Rhs + 1, (double)parallelConcurrency()); + + LhsVar(1) = Rhs + 1; + PutLhsVar(); + return 0; +} diff --git a/modules/parallel/sci_gateway/cpp/.deps/.dirstamp b/modules/parallel/sci_gateway/cpp/.deps/.dirstamp new file mode 100755 index 000000000..e69de29bb diff --git a/modules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo b/modules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo new file mode 100755 index 000000000..5e4f9f83c --- /dev/null +++ b/modules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo @@ -0,0 +1,642 @@ +sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo: \ + sci_gateway/cpp/sci_parallel_run.cpp /usr/include/stdc-predef.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + ../../modules/api_scilab/includes/api_scilab.h \ + ../../modules/core/includes/stack-c.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + ../../modules/core/includes/core_math.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/math-vector.h \ + /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + ../../modules/core/includes/stack-def.h \ + ../../modules/core/includes/machine.h \ + ../../modules/core/includes/stackTypeVariable.h \ + ../../modules/core/includes/BOOL.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/core/includes/stack1.h \ + ../../modules/core/includes/scisparse.h \ + ../../modules/core/includes/stack2.h \ + ../../modules/core/includes/stack3.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/core/includes/sci_types.h \ + ../../modules/api_scilab/includes/api_common.h \ + ../../modules/api_scilab/includes/api_scilab.h \ + ../../modules/api_scilab/includes/api_double.h \ + ../../modules/core/includes/doublecomplex.h \ + ../../modules/api_scilab/includes/api_string.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + ../../modules/api_scilab/includes/api_int.h \ + ../../modules/api_scilab/includes/api_poly.h \ + ../../modules/api_scilab/includes/api_sparse.h \ + ../../modules/api_scilab/includes/api_boolean.h \ + ../../modules/api_scilab/includes/api_boolean_sparse.h \ + ../../modules/api_scilab/includes/api_pointer.h \ + ../../modules/api_scilab/includes/api_list.h \ + ../../modules/api_scilab/includes/api_error.h \ + ../../modules/api_scilab/includes/api_handle.h \ + ../../modules/api_scilab/includes/api_optional.h \ + ../../modules/core/includes/stack-optional.h \ + ../../modules/api_scilab/includes/api_hypermat.h \ + ../../modules/core/includes/core_math.h \ + ../../modules/core/includes/sci_types.h includes/gw_parallel.h \ + includes/dynlib_parallel.h \ + ../../modules/dynamic_link/includes/dynamic_link.h \ + ../../modules/dynamic_link/includes/dynlib_dynamic_link.h \ + ../../modules/core/includes/BOOL.h ../../modules/core/includes/machine.h \ + ../../modules/core/includes/MALLOC.h \ + ../../modules/core/includes/sci_mem_alloc.h \ + ../../modules/output_stream/includes/Scierror.h \ + ../../modules/output_stream/includes/do_error_number.h \ + ../../modules/localization/includes/localization.h \ + /usr/include/libintl.h ../../modules/parameters/includes/parameters.h \ + ../../modules/core/includes/Thread_Wrapper.h /usr/include/pthread.h \ + /usr/include/sched.h /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + ../../modules/core/includes/stack-def.h \ + /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman-linux.h includes/concurrency.h \ + /usr/include/c++/5/cstdlib \ + /usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/cpu_defines.h \ + /usr/include/c++/5/cstring src/cpp/parallel_run.hxx \ + /usr/include/c++/5/algorithm /usr/include/c++/5/utility \ + /usr/include/c++/5/bits/stl_relops.h /usr/include/c++/5/bits/stl_pair.h \ + /usr/include/c++/5/bits/move.h /usr/include/c++/5/bits/concept_check.h \ + /usr/include/c++/5/bits/stl_algobase.h \ + /usr/include/c++/5/bits/functexcept.h \ + /usr/include/c++/5/bits/exception_defines.h \ + /usr/include/c++/5/bits/cpp_type_traits.h \ + /usr/include/c++/5/ext/type_traits.h \ + /usr/include/c++/5/ext/numeric_traits.h \ + /usr/include/c++/5/bits/stl_iterator_base_types.h \ + /usr/include/c++/5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/5/debug/debug.h /usr/include/c++/5/bits/stl_iterator.h \ + /usr/include/c++/5/bits/ptr_traits.h \ + /usr/include/c++/5/bits/predefined_ops.h \ + /usr/include/c++/5/bits/stl_algo.h \ + /usr/include/c++/5/bits/algorithmfwd.h \ + /usr/include/c++/5/bits/stl_heap.h /usr/include/c++/5/bits/stl_tempbuf.h \ + /usr/include/c++/5/bits/stl_construct.h /usr/include/c++/5/new \ + /usr/include/c++/5/exception \ + /usr/include/c++/5/bits/atomic_lockfree_defines.h \ + /usr/include/c++/5/ext/alloc_traits.h \ + /usr/include/c++/5/bits/allocator.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h \ + /usr/include/c++/5/ext/new_allocator.h \ + /usr/include/c++/5/bits/memoryfwd.h /usr/include/c++/5/vector \ + /usr/include/c++/5/bits/stl_uninitialized.h \ + /usr/include/c++/5/bits/stl_vector.h \ + /usr/include/c++/5/bits/stl_bvector.h \ + /usr/include/c++/5/bits/range_access.h \ + /usr/include/c++/5/bits/vector.tcc /usr/include/c++/5/iterator \ + /usr/include/c++/5/ostream /usr/include/c++/5/ios \ + /usr/include/c++/5/iosfwd /usr/include/c++/5/bits/stringfwd.h \ + /usr/include/c++/5/bits/postypes.h /usr/include/c++/5/cwchar \ + /usr/include/c++/5/bits/char_traits.h \ + /usr/include/c++/5/bits/localefwd.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/c++locale.h \ + /usr/include/c++/5/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/5/cctype \ + /usr/include/ctype.h /usr/include/c++/5/bits/ios_base.h \ + /usr/include/c++/5/ext/atomicity.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/gthr.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/gthr-default.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/atomic_word.h \ + /usr/include/c++/5/bits/locale_classes.h /usr/include/c++/5/string \ + /usr/include/c++/5/bits/ostream_insert.h \ + /usr/include/c++/5/bits/cxxabi_forced.h \ + /usr/include/c++/5/bits/stl_function.h \ + /usr/include/c++/5/backward/binders.h \ + /usr/include/c++/5/bits/basic_string.h \ + /usr/include/c++/5/bits/basic_string.tcc \ + /usr/include/c++/5/bits/locale_classes.tcc /usr/include/c++/5/stdexcept \ + /usr/include/c++/5/streambuf /usr/include/c++/5/bits/streambuf.tcc \ + /usr/include/c++/5/bits/basic_ios.h \ + /usr/include/c++/5/bits/locale_facets.h /usr/include/c++/5/cwctype \ + /usr/include/wctype.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/ctype_base.h \ + /usr/include/c++/5/bits/streambuf_iterator.h \ + /usr/include/x86_64-linux-gnu/c++/5/bits/ctype_inline.h \ + /usr/include/c++/5/bits/locale_facets.tcc \ + /usr/include/c++/5/bits/basic_ios.tcc \ + /usr/include/c++/5/bits/ostream.tcc /usr/include/c++/5/istream \ + /usr/include/c++/5/bits/istream.tcc \ + /usr/include/c++/5/bits/stream_iterator.h /usr/include/c++/5/iostream \ + /usr/lib/gcc/x86_64-linux-gnu/5/include/omp.h \ + ../../modules/core/includes/scilabmode.h /usr/include/semaphore.h \ + /usr/include/x86_64-linux-gnu/bits/semaphore.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/5/functional /usr/include/c++/5/limits + +/usr/include/stdc-predef.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../../modules/api_scilab/includes/api_scilab.h: + +../../modules/core/includes/stack-c.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +../../modules/core/includes/core_math.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/math-vector.h: + +/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap-16.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +../../modules/core/includes/stack-def.h: + +../../modules/core/includes/machine.h: + +../../modules/core/includes/stackTypeVariable.h: + +../../modules/core/includes/BOOL.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/core/includes/stack1.h: + +../../modules/core/includes/scisparse.h: + +../../modules/core/includes/stack2.h: + +../../modules/core/includes/stack3.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/core/includes/sci_types.h: + +../../modules/api_scilab/includes/api_common.h: + +../../modules/api_scilab/includes/api_scilab.h: + +../../modules/api_scilab/includes/api_double.h: + +../../modules/core/includes/doublecomplex.h: + +../../modules/api_scilab/includes/api_string.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +../../modules/api_scilab/includes/api_int.h: + +../../modules/api_scilab/includes/api_poly.h: + +../../modules/api_scilab/includes/api_sparse.h: + +../../modules/api_scilab/includes/api_boolean.h: + +../../modules/api_scilab/includes/api_boolean_sparse.h: + +../../modules/api_scilab/includes/api_pointer.h: + +../../modules/api_scilab/includes/api_list.h: + +../../modules/api_scilab/includes/api_error.h: + +../../modules/api_scilab/includes/api_handle.h: + +../../modules/api_scilab/includes/api_optional.h: + +../../modules/core/includes/stack-optional.h: + +../../modules/api_scilab/includes/api_hypermat.h: + +../../modules/core/includes/core_math.h: + +../../modules/core/includes/sci_types.h: + +includes/gw_parallel.h: + +includes/dynlib_parallel.h: + +../../modules/dynamic_link/includes/dynamic_link.h: + +../../modules/dynamic_link/includes/dynlib_dynamic_link.h: + +../../modules/core/includes/BOOL.h: + +../../modules/core/includes/machine.h: + +../../modules/core/includes/MALLOC.h: + +../../modules/core/includes/sci_mem_alloc.h: + +../../modules/output_stream/includes/Scierror.h: + +../../modules/output_stream/includes/do_error_number.h: + +../../modules/localization/includes/localization.h: + +/usr/include/libintl.h: + +../../modules/parameters/includes/parameters.h: + +../../modules/core/includes/Thread_Wrapper.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +../../modules/core/includes/stack-def.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman-linux.h: + +includes/concurrency.h: + +/usr/include/c++/5/cstdlib: + +/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/cpu_defines.h: + +/usr/include/c++/5/cstring: + +src/cpp/parallel_run.hxx: + +/usr/include/c++/5/algorithm: + +/usr/include/c++/5/utility: + +/usr/include/c++/5/bits/stl_relops.h: + +/usr/include/c++/5/bits/stl_pair.h: + +/usr/include/c++/5/bits/move.h: + +/usr/include/c++/5/bits/concept_check.h: + +/usr/include/c++/5/bits/stl_algobase.h: + +/usr/include/c++/5/bits/functexcept.h: + +/usr/include/c++/5/bits/exception_defines.h: + +/usr/include/c++/5/bits/cpp_type_traits.h: + +/usr/include/c++/5/ext/type_traits.h: + +/usr/include/c++/5/ext/numeric_traits.h: + +/usr/include/c++/5/bits/stl_iterator_base_types.h: + +/usr/include/c++/5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/5/debug/debug.h: + +/usr/include/c++/5/bits/stl_iterator.h: + +/usr/include/c++/5/bits/ptr_traits.h: + +/usr/include/c++/5/bits/predefined_ops.h: + +/usr/include/c++/5/bits/stl_algo.h: + +/usr/include/c++/5/bits/algorithmfwd.h: + +/usr/include/c++/5/bits/stl_heap.h: + +/usr/include/c++/5/bits/stl_tempbuf.h: + +/usr/include/c++/5/bits/stl_construct.h: + +/usr/include/c++/5/new: + +/usr/include/c++/5/exception: + +/usr/include/c++/5/bits/atomic_lockfree_defines.h: + +/usr/include/c++/5/ext/alloc_traits.h: + +/usr/include/c++/5/bits/allocator.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h: + +/usr/include/c++/5/ext/new_allocator.h: + +/usr/include/c++/5/bits/memoryfwd.h: + +/usr/include/c++/5/vector: + +/usr/include/c++/5/bits/stl_uninitialized.h: + +/usr/include/c++/5/bits/stl_vector.h: + +/usr/include/c++/5/bits/stl_bvector.h: + +/usr/include/c++/5/bits/range_access.h: + +/usr/include/c++/5/bits/vector.tcc: + +/usr/include/c++/5/iterator: + +/usr/include/c++/5/ostream: + +/usr/include/c++/5/ios: + +/usr/include/c++/5/iosfwd: + +/usr/include/c++/5/bits/stringfwd.h: + +/usr/include/c++/5/bits/postypes.h: + +/usr/include/c++/5/cwchar: + +/usr/include/c++/5/bits/char_traits.h: + +/usr/include/c++/5/bits/localefwd.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/c++locale.h: + +/usr/include/c++/5/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/5/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/5/bits/ios_base.h: + +/usr/include/c++/5/ext/atomicity.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/gthr.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/gthr-default.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/atomic_word.h: + +/usr/include/c++/5/bits/locale_classes.h: + +/usr/include/c++/5/string: + +/usr/include/c++/5/bits/ostream_insert.h: + +/usr/include/c++/5/bits/cxxabi_forced.h: + +/usr/include/c++/5/bits/stl_function.h: + +/usr/include/c++/5/backward/binders.h: + +/usr/include/c++/5/bits/basic_string.h: + +/usr/include/c++/5/bits/basic_string.tcc: + +/usr/include/c++/5/bits/locale_classes.tcc: + +/usr/include/c++/5/stdexcept: + +/usr/include/c++/5/streambuf: + +/usr/include/c++/5/bits/streambuf.tcc: + +/usr/include/c++/5/bits/basic_ios.h: + +/usr/include/c++/5/bits/locale_facets.h: + +/usr/include/c++/5/cwctype: + +/usr/include/wctype.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/ctype_base.h: + +/usr/include/c++/5/bits/streambuf_iterator.h: + +/usr/include/x86_64-linux-gnu/c++/5/bits/ctype_inline.h: + +/usr/include/c++/5/bits/locale_facets.tcc: + +/usr/include/c++/5/bits/basic_ios.tcc: + +/usr/include/c++/5/bits/ostream.tcc: + +/usr/include/c++/5/istream: + +/usr/include/c++/5/bits/istream.tcc: + +/usr/include/c++/5/bits/stream_iterator.h: + +/usr/include/c++/5/iostream: + +/usr/lib/gcc/x86_64-linux-gnu/5/include/omp.h: + +../../modules/core/includes/scilabmode.h: + +/usr/include/semaphore.h: + +/usr/include/x86_64-linux-gnu/bits/semaphore.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/5/functional: + +/usr/include/c++/5/limits: diff --git a/modules/parallel/sci_gateway/cpp/.dirstamp b/modules/parallel/sci_gateway/cpp/.dirstamp new file mode 100755 index 000000000..e69de29bb diff --git a/modules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.o b/modules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.o new file mode 100755 index 000000000..193c57803 Binary files /dev/null and b/modules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.o differ diff --git a/modules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo b/modules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo new file mode 100755 index 000000000..9a7dc3668 --- /dev/null +++ b/modules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo @@ -0,0 +1,12 @@ +# sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/libsciparallel_la-sci_parallel_run.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/modules/parallel/sci_gateway/cpp/sci_parallel_run.cpp b/modules/parallel/sci_gateway/cpp/sci_parallel_run.cpp new file mode 100755 index 000000000..b4a914ac1 --- /dev/null +++ b/modules/parallel/sci_gateway/cpp/sci_parallel_run.cpp @@ -0,0 +1,996 @@ +/* +* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +* Copyright (C) 2010 - DIGITEO - Bernard HUGUENEY +* +* This file must be used under the terms of the CeCILL. +* This source file is licensed as described in the file COPYING, which +* you should have received as part of this distribution. The terms +* are also available at +* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +* +*/ +extern "C" { + +#ifdef _MSC_VER +#include +#endif +#include +#include "api_scilab.h" +#include "gw_parallel.h" +#include "dynamic_link.h" +#include "MALLOC.h" +#include "Scierror.h" +#include "localization.h" +#include "parameters.h" +#include "Thread_Wrapper.h" /* locks for concurrency access */ +#include "stack-def.h" /* #define nlgh nsiz*4 */ +#include "stack-c.h" + +#ifdef _MSC_VER +#include "mmapWindows.h" +#include "strdup_windows.h" +#else +#include +#ifndef MAP_ANONYMOUS +# define MAP_ANONYMOUS MAP_ANON +#endif +#endif + +#include "concurrency.h" /* prototype for concurrency query function */ +} + +#include +#include +/*#include for debug purposes only */ +#include "parallel_run.hxx" + + + +#include +#include +#include +#include +#include +#include +#include +/* +* +We can handle k Rhs et m Lhs. Currently, only real (double) matrix are implemented. +In fact, from a performance point of view, only Random-Acces data types where it is possible to "extract" a column in O(1) +(plus memcpy for macro a args) are making sense. This rules out most Scilab data types except for matrices of double / int. + + +[R1, ... , Rm] = parallel_run(A1, ... , Ak, f [,Types] [,Dims]) + +If Args are of différent sizes, the smallest are recycled. + +Types : matrix of <=m strings of the names (as in typeof()) of the m lhs fo 'f'. default to "constant" +Rows : matrix of doubles 1 x <=m or 2 x <=m giving the nb of rows (or rows and columns) of the m lhs of f. default to 1 + +/!\ due to matrix data layout in Scilab (i.e. Fortran columnswise storage) +, a matrix [a11,a12,a13;a21,a22,a23] contains 3 (ncols) arguments of 2 (nrows) elements; +*/ + +extern "C" +{ + int sci_parallel_run(char *fname, unsigned long fname_len); +} + +namespace +{ +int threadConcurrencyLevel; +int processConcurrencyLevel; + +/* to distinguish scilab variable 'address' from usual int* */ +typedef int* scilabVar_t; + +int currentTop; /* Top is fragile : this var mimics Top to avoid touching the real one */ +char* currentFname = 0; /* name of the current Scilab function, to be used un error messages btw, what is the api_scilab equivalent of get_fname()?*/ + +SciErr err; /* store error status from api_scilab functions */ + +/* often, we handle nb of dimensions (rows and cols) at once. +* I'd have gone for std::size_t but Scilab uses int :( */ +typedef std::pair dim_t; + +/* A scilab variable description is a typename and a matric dimension, just to add a default constructor on the inherited struct +* character string a static (no dynamic alloc/destruction) +*/ +struct scilabDesc_t : std::pair +{ + scilabDesc_t(char const* name = "constant", dim_t dim = dim_t(1, 1)) /* default variable is a scalar i.e. 1x1 matrix of typename "constant" */ + : std::pair(name, dim) + { + } + /* for debug purposes only + std::string toString() const + { + std::stringstream buf; + buf<::first<<" :"<::second.first + <<" x "<::second.second; + return buf.str(); + } + */ +}; + +/* types to be used in unions of function pointers */ +typedef void (*functionToCall_t)(char const*const*, char*const*); +typedef void (*wrapperFunction_t)(double const*, double*); +typedef void (*loadedFunction_t)(); +typedef void (*simpleFunction_t)(int ); + +/* ptr to data type */ +typedef union +{ + double* doublePtr; + int* intPtr; + char* bytePtr; + char** strArrayPtr; + void* opaquePtr; + int sciCFunction; +} unionOfPtrs_t; + +/* a functional version of getVarType that can be composed +* @param int* address of the scilab var +* @return the type (0 on error) +*/ +int getVarType(scilabVar_t var) +{ + int res(0); + err = getVarType(pvApiCtx, var, &res); + return res; +} + +/* return the typename (as in typeof() ) +* @param int* address of the scilab var +* @return the name +* only implements the current valid types for parallel_run args. +*/ +char const* getTypeName(scilabVar_t var) +{ + char const* res; + switch (getVarType(var)) + { + case sci_matrix: + { + res = "constant"; + break; + } + default: + { + res = "unimplemented type in getTypeName"; + } + } + return res; +} +/* get nb of Rows & Cols of a Scilab var : a fonctional version of getVarDimension that can be composed. +* @param the address of the variable +* @return the dimensions in a std::pair of nb of rows, nb of columns. (0,0) on error. +*/ +dim_t getRowsCols(scilabVar_t var) +{ + dim_t res(0, 0); + err = getVarDimension(pvApiCtx, var, &res.first, &res.second); + return res; +} +/* get nb of Rows of a Scilab var (would not be needed with tr1) +* @param the address of the variable +* @return the nb of rows, 0 on error. +*/ +int getRows(scilabVar_t var) +{ + return getRowsCols(var).first; +} +/* get nb of Columns of a Scilab var (would not be needed with tr1) +* @param the address of the variable +* @return the nb of columns, 0 on error. +*/ +int getCols(scilabVar_t var) +{ + return getRowsCols(var).second; +} + +/* test if the scilab var can be a function (either because it *is* one or because it can be the name of a function : 1x1 string marix) +* @param var the scilab var +* @return bool true iff it can be a function +*/ +bool isFunctionOrString(scilabVar_t var) +{ + bool res; + switch (getVarType(var)) + { + case sci_u_function : + case sci_c_function : + { + res = true; + break; + } + case sci_strings : + { + res = (getRows(var) == 1) && (getCols(var) == 1); + break; + } + default : + { + res = false; + } + } + return res; +} +/* get ptr to data of a Scilab variable +* @param var 'address' of the scilab var +* @return ptr to the data +*/ +unionOfPtrs_t getData(scilabVar_t var) +{ + unionOfPtrs_t res = {0}; + switch (getVarType(var)) // unhandled data types should be caught during arg validation + { + case sci_matrix : + { + if (!isVarComplex(pvApiCtx, var)) + { + int unused; + err = getMatrixOfDouble(pvApiCtx, var, &unused, &unused, &res.doublePtr); + } + else + { + /* TODO suggest workaround in tutorial */ + + // std::cerr<<"complex data not yet implemented var @"<(n); + } + } + return d; +} + +/* Get the description from a scilab variable. +* If n is provided, it instead returns the description of +* either a slice (n==0) or a concatenation (n>1) of the variable. +* @param var scilab variable address +* @param n either slice or concatenation +* @return the description +*/ +scilabDesc_t getDesc(scilabVar_t var, std::size_t n = 1) +{ + return scilabDesc_t( getTypeName(var), sliceOrConcat(getRowsCols(var), n)); +} + +/* allocate a scilab variable according to a provided description. +* If n is provided, it instead allocates +* either a slice (n==0) or a concatenation (n>1) of the variable. +* @param d scilab variable description +* @param n either slice or concatenation +* @return the variable address +* only real matrices are implemented yet. +*/ +scilabVar_t allocVar(scilabDesc_t d, std::size_t n = 1) +{ + scilabVar_t res(0); + if (std::strcmp(d.first, "constant") == 0) + { + double* unused; + dim_t toAlloc(sliceOrConcat(d.second, n)); + err = allocMatrixOfDouble(pvApiCtx, ++currentTop, toAlloc.first, toAlloc.second, &unused); + ++Nbvars; + // std::cerr<<"alloc var :"<(varData) + nbFilled + , expectedVar.second.first * expectedVar.second.second - nbFilled + , std::numeric_limits::quiet_NaN() ); + + } + } +} +/* +wrapper on a native c function or a scilab macro called on scilab variables. + +constructed on : +- scilab variable for the function (external native function name, sci_c_function (buggy) or macro name)scilab matrices of arguments +- expected lhs + +upon construction, allocate scilab result variables and computes all necessary meta data. +*/ +struct wrapper +{ + + typedef std::vector sizes_container; + + /* wrapper contructor + * @param args_begin iterator to the first args of parallel_run + * @param function_it iterator to the function argument of parallel_run + * @param args_end iterator past the end of parallel_run args + * @param function_lhs number of lhs (of parallel_run and of the function: it is the same) + */ + template + wrapper(VarsIt begin, VarsIt functionIt, VarsIt end, std::size_t functionLhs) + { + registerArgs(begin, functionIt); + n = *std::max_element(argsNb.begin(), argsNb.end()); + getFunction(*functionIt); + allocCompleteResults(begin, functionIt + 1, end, functionLhs); + } + + /* the member function performing the call to the function (foreign function of Scilab macro) + * @ param args array of ptrs to args data + * @ param res array of ptrs to res data + */ + void operator()(char const** args, char ** res) + { + (*this.*(this->fPtr))(args, res); + } + + /* It is idiomatic to pass functors by value in C++, but our wrapper is heavy, + * so we provide a lightweight handle */ + struct handle + { + handle(wrapper& r) : w(r) + { + } + /* just forward to the underlying wrapper */ + void operator()(char const** args, char ** res) const + { + w(args, res); + } + wrapper& w; + }; + handle getHandle() + { + return handle(*this); + } + /* @return begin iterator to the array of pointers to arguments data */ + char const*const* argsDataBegin() const + { + return &argsData[0].bytePtr; + } + /* @return begin iterator to the array of arguments sizes */ + std::size_t const* argsSizesBegin() const + { + return &argsSizes[0]; + } + /* @return begin iterator to the array of arguments number of elements (they are not requires to have the same nb of elements */ + std::size_t const* argsNbBegin() const + { + return &argsNb[0]; + } + /* @return nb of tasks (calls) to perform = max(args_nb_begin(), args_nb_begin()+rhs) */ + std::size_t tasksNb() const + { + return n; + } + /* @return begin iterator to the array of pointers to result data */ + char * const* resDataBegin() + { + return &resData[0].bytePtr; + } + /* @return begin iterator to the array of results sizes */ + std::size_t const* resSizesBegin() const + { + return &resSizes[0]; + } + /* @return nb of rhs vars of the function */ + std::size_t nbRhs() const + { + return rhsDesc.size(); + } + /* @return true if the underlying function is a foreign function, false if it is a Scilab macro */ + bool isForeignFunction() const + { + return function.toCall != 0 ; + } + +private: + /* ptr to foreign function (types used where storing, calling or wrapping) */ + union + { + functionToCall_t toCall; + loadedFunction_t toLoad; + wrapperFunction_t wrapper; + } function; + /* register a matrix of arguments to be used as rhs) */ + template + void registerArgs(ArgIt it, ArgIt end) + { + std::transform(it, end, std::back_inserter(argsData), &getData); + std::transform(it, end, std::back_inserter(argsSizes), &getSizeOfColumn); + std::transform(it, end, std::back_inserter(argsNb), &getCols); + std::transform(it, end, std::back_inserter(rhsDesc), std::bind2nd(std::ptr_fun(&getDesc), 0)); /* get a slice as model for function rhs*/ + } + + /* alloc the scilab variables that will hold the complete collection of results + * @param first_arg_position only used to compute the args positions for error messages + * @param res_types_begin, res_types_end iterator range on the args describing result, can be empty + * @param nb_lhs number of lhs */ + template + void allocCompleteResults(VarPtrIt begin, VarPtrIt resBegin, VarPtrIt resEnd, std::size_t nbLhs) + { + lhsDesc.resize(nbLhs); + if (resBegin != resEnd) + { + if (getVarType(*resBegin) == sci_strings) + { + // std::cerr<<"we have a type lhs arg\n"; + ++resBegin; + } + if (resBegin != resEnd) + { + if (getVarType(*resBegin) == sci_matrix) + { + // std::cerr<<"we have a dim lhs arg\n"; + dim_t const tmp(getRowsCols(*resBegin)); + double const*const data(getData(*resBegin).doublePtr); + switch (tmp.second) + { + + case 2: + { + // std::cerr<<"we have rows and cols\n"; + for (int i(0); i < tmp.first && i < tmp.first * tmp.second; ++i) + { + lhsDesc[i].second.first = static_cast(data[i]); + lhsDesc[i].second.second = static_cast(data[i + tmp.first]); + } + break; + } + case 1: + { + // std::cerr<<"we have rows \n"; + for (int i(0); i < tmp.first && i < tmp.first * tmp.second; ++i) + { + lhsDesc[i].second.first = static_cast(data[i]); + } + break; + } + default : + { + Scierror(999, _("%s: Wrong size of input argument #%d: Number of columns are incompatible ") + , currentFname, std::distance(begin, resBegin)); + } + } + } + } + } + /* we want to have to result var at hand before calling the scilab macro so we must create it now before the args */ + std::transform(lhsDesc.begin(), lhsDesc.end(), std::back_inserter(scilabCollectionsOfLhs), std::bind2nd(std::ptr_fun(&allocVar), n)); + /* we store addr of result data and the size for the parallel wrapper */ + std::transform(scilabCollectionsOfLhs.begin(), scilabCollectionsOfLhs.end(), std::back_inserter(resData), &getData); + std::transform(scilabCollectionsOfLhs.begin(), scilabCollectionsOfLhs.end(), std::back_inserter(resSizes), &getSizeOfColumn); + } + + /* extract the function form the scilab variable (i.e.string) reprensenting it. + * @param v the variable + * @return nothing useful but GetRhsVar() macro wants to be able to return an int :( + */ + int getFunction(scilabVar_t var) + { + function.toCall = 0; + switch (getVarType(var)) + { + case sci_c_function : + { + int unused[2]; + GetRhsVar(2, EXTERNAL_DATATYPE, unused, unused + 1, &scilabFunction); + fPtr = &wrapper::macro; + break; + } + case sci_strings : + { + char* funName; + getAllocatedSingleString(pvApiCtx, var, &funName); + int found; + found = SearchInDynLinks(funName, &function.toLoad); + fPtr = &wrapper::nativeFunction; + if (found == -1) + { + /* should check amongst defined macros with getmacroslist (cf dans core/src/c/getvariablesname.c) and check that type is sci_XXX */ + function.toCall = 0; + scilabFunctionName = funName; + scilabFunctionNameLength = std::strlen(scilabFunctionName); + fPtr = &wrapper::macro; + } + } + } + return 0; + } + + /* performs the Scilab macro call + * @param byName bool template parameter tells if the macro is called by name or by ptr (ptr is currently broken). + * @param args array of ptrs to args data + * @param res array of ptr to res data + */ + template + void macro(char const** args, char ** res) + { + /* rhs models from */ + int saveNbvars = Nbvars, saveTop = currentTop; + for ( std::vector::const_iterator it(rhsDesc.begin()) + ; it != rhsDesc.end(); ++it, ++args) + { + scilabVar_t scilabArg = allocVar(*it); /* create a var for a slice (col)of the parallel_run Rhs arg */ + memcpy(getData(scilabArg).bytePtr, *args, getSizeOfData(scilabArg)); + } + + int sciRhs = static_cast(rhsDesc.size()); + int sciLhs = static_cast(lhsDesc.size()); + + std::size_t dummyVars(0); /* alloc safety variable to ensure space on the stack upon return*/ + int sciArgPos = saveTop + 1; + for ( ; sciRhs + dummyVars < sciLhs + maxSafetyLhs; ++dummyVars, ++Nbvars) + { + double* unused; + err = allocMatrixOfDouble(pvApiCtx, ++currentTop, 0, 0, &unused); + } + Nbvars = Rhs + Lhs + sciRhs; + bool success(byName + ? C2F(scistring)(&sciArgPos, scilabFunctionName, &sciLhs, &sciRhs, static_cast(scilabFunctionNameLength)) + : C2F(scifunction)(&sciArgPos, &scilabFunction, &sciLhs, &sciRhs) + ); + // result r is now on first position on stack + { + Nbvars = static_cast(Rhs + Lhs + sciRhs + dummyVars); + int resPos = Rhs + Lhs + 1; //+1 + + for ( std::vector::iterator it(lhsDesc.begin()) + ; it != lhsDesc.end(); ++it, ++resPos, ++res) + { + scilabVar_t scilabRes; + if (success) + { + err = getVarAddressFromPosition(pvApiCtx, resPos, &scilabRes); + } + scilabDesc_t resDesc; + if (!success || err.iErr) + { + /* there was an error getting the result variable */ + resDesc = *it; /* pretend we got the right type */ + resDesc.second.first = resDesc.second.second = 0; /* but 0 elements */ + } + else + { + /* copy the returned data */ + memcpy(*res, getData(scilabRes).bytePtr, getSizeOfData(scilabRes)); + resDesc = getDesc(scilabRes); + } + fillUndefinedData(*res, resDesc, *it); + } + Nbvars = saveNbvars; + currentTop = saveTop; + } + } + void nativeFunction(char const** args, char ** res) + { + function.toCall(args, res); + } + + /* we prealloc as much scilab var more than requested lhs in case the scilab macro call back returns more thant requested.*/ + static unsigned int const maxSafetyLhs = 20; + + std::size_t n; /* nb of calls to perform */ + sizes_container argsSizes, argsNb, resSizes; /* sizes of arguments, nb of elements for each argument, sizes for results */ + std::vector argsData; /* ptrs to args data */ + std::vector resData; /* ptrs to res data */ + + /* the member function to call, dispatches to macro of foreign function */ + void(wrapper::*fPtr)(char const** args, char ** res); + + int scilabFunction; /* the scilab function 'ptr' for scifunction */ + char* scilabFunctionName;/* the scilab function name for scistring */ + std::size_t scilabFunctionNameLength;/* the scilab function name length for scistring */ + + /* store models of scilab lhs and rhs variables */ + std::vector lhsDesc, rhsDesc; + std::vector scilabCollectionsOfLhs; /* lhs vars of the parallel_run function : collections of the lhs form the function*/ + +}; +/* Checks if the function parallel_run arguments are valid. +* 1 or more matrices of doubles +* 1 matrix of 1 string +* 0 or 1 matrix of strings and/or 1 matrix of doubles with 1 ou 2 columns +* 0 or 1 configuration plist +* +* @retun true is the args are valid */ +bool check_args(void) +{ + { + if (Rhs < 2) + { + return false; + } + bool before_function(true), at_least_one_arg(false); + bool ok(true); + for ( int pos(1); pos <= Rhs && ok; ++pos) + { + int* addr; + err = getVarAddressFromPosition(pvApiCtx, pos, &addr); + int type; + err = getVarType( pvApiCtx, addr, &type ); + if (before_function) + { + switch (type) + { + case sci_matrix : + { + /* check not complex "%s: This feature has not been implemented.\n" */ + ok = !isVarComplex( pvApiCtx, addr); + at_least_one_arg = true; + break; + } + case sci_strings : + { + /* check dim = 1x1 */ + int rows, cols; + err = getMatrixOfString(pvApiCtx, addr, &rows, &cols, 0, 0); + ok = (rows == 1) && (cols == 1); + }/* no break */ + case sci_c_function: + { + before_function = false; + break; + } + default : + { + Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), currentFname, 1); + ok = false; + } + } + } + else + { + switch (type) + { + case sci_strings : + { + break; + } + case sci_matrix : + { + /* check not complex and ncol <=2 */ + ok = !isVarComplex( pvApiCtx, addr); + if (ok) + { + int rows, cols; + double* unused; + err = getMatrixOfDouble(pvApiCtx, addr, &rows, &cols, &unused); + ok = (cols <= 2); + break; + } + } + case sci_mlist : /* config plist (which is a mlist) */ + { + break; + } + + default : + { + ok = false; + } + } + } + } + return ok && at_least_one_arg && (!before_function); + } +} + +/* Get configuration options form the config parameter +* +* in : +* @param config_arg_pos position where the config arg can be +* +* in/out: +* +* @param nb_workers int config value for the key "nb_workers" +* @param shared_memory bool config value for the key "shared_memory" +* @param dynamic_scheduling bool config value for the key "dynamic_scheduling" +* @param chunk_size int config value for the key "chunk_size" +* @param prologue char* config value for the key "prologue" +* @param prologue char* config value for the key "epilogue" +* +* @return bool true if there was a configuration argument in position config_arg_pos. +*/ +bool getConfigParameters +(int config_arg_pos, int& nb_workers, bool& shared_memory, bool& dynamic_scheduling, int& chunk_size, char const*& prologue, char const*& epilogue) +{ + int log(0); + int* addr = NULL; + getVarAddressFromPosition(pvApiCtx, config_arg_pos, &addr); + bool has_config_arg(checkPList(pvApiCtx, addr) != 0); + if (has_config_arg) + { + int found; + getIntInPList(pvApiCtx, addr, "nb_workers", &nb_workers, &found, nb_workers, log, CHECK_NONE); + int tmp; + getIntInPList(pvApiCtx, addr, "shared_memory", &tmp, &found, shared_memory ? 1 : 0, log, CHECK_NONE); + shared_memory = (tmp != 0); + getIntInPList(pvApiCtx, addr, "dynamic_scheduling", &tmp, &found, dynamic_scheduling ? 1 : 0, log, CHECK_NONE); + dynamic_scheduling = (tmp != 0); + getIntInPList(pvApiCtx, addr, "chunk_size", &chunk_size, &found, chunk_size, log, CHECK_NONE); + getStringInPList(pvApiCtx, addr, "prologue", const_cast(&prologue), &found, const_cast(prologue), log, CHECK_NONE); + getStringInPList(pvApiCtx, addr, "epilogue", const_cast(&epilogue), &found, const_cast(epilogue), log, CHECK_NONE); + } + return has_config_arg; +} + +/* +A simple wrapper just wraps prologues and epilogues, each taking only a scalar argument (the process number). +*/ +struct simple_wrapper +{ + /* the constructor + * @param the macro or foreign function name, empty string allowed: the function then does nothing. + */ + explicit simple_wrapper(char const* name): fun(name) + { + } + /* the operator : calls the function or macro passing a scalar argument on the stack + * @param i the scalar to pass on the stack as a real value. + */ + void operator()(int i) + { + if (*fun) + { + /* do nothing on empty name */ + union + { + loadedFunction_t toLoad; + simpleFunction_t toCall; + } function; + int found = SearchInDynLinks(const_cast(fun), &function.toLoad); + if (found != -1) + { + function.toCall(i); + } + else + { + double* tmpPtr; + err = allocMatrixOfDouble(pvApiCtx, ++Top, 1, 1, &tmpPtr); + *tmpPtr = static_cast(i); + ++Nbvars; + int lhs(0), rhs(1); + C2F(scistring)(&(Top), const_cast(fun), &lhs, &rhs, static_cast(strlen(fun))); + --Nbvars; + --Top; + } + } + } + char const* fun; +}; + +struct ConcurrencyState +{ + ConcurrencyState() + { + lock = static_cast<__threadSignalLock*>(mmap(0, sizeof( __threadSignalLock), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0)); + processConcurrencyLevelPtr = static_cast(mmap(0, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0)); + __InitSignalLock(lock); + } + + struct ScopedUpdater + { + ScopedUpdater(ConcurrencyState& c, bool threads) + : lock(c.lock), countPtr( threads + ? &c.threadConcurrencyLevel + : c.processConcurrencyLevelPtr) + { + __LockSignal(lock); + ++(*countPtr); + __UnLockSignal(lock); + } + ~ScopedUpdater() + { + __LockSignal(lock); + --(*countPtr); + __UnLockSignal(lock); + } + __threadSignalLock* lock; + int* countPtr; + }; + ScopedUpdater scopedUpdater(bool threads) + { + return ScopedUpdater(*this, threads); + } + + int get() const + { + __LockSignal(lock); + int res((threadConcurrencyLevel ? 1 : 0) | (*processConcurrencyLevelPtr ? 2 : 0)); + __UnLockSignal(lock); + return res; + } + + ~ConcurrencyState()/* called by exit() for static variables */ + { + __UnLockSignal(lock); + } + __threadSignalLock* lock; + int* processConcurrencyLevelPtr; /* must be in shared mem */ + int threadConcurrencyLevel; +}; + + +} + +ConcurrencyState concurrencyState; + +int parallelConcurrency() +{ + return concurrencyState.get(); +} + +int parallelForbidden(char const* fname) +{ + Scierror(999, _("%s: This function is forbidden in a concurrent execution context.\n"), fname); + return 0; +} + + + +/* Calling point from Scilab. +* checking args and contruction a wrapper around function call of a foreign function or a Scilab macro. +* this wrapper (in fact, a handle) is then passed to another wrapper that will parallelize the calls. +* the parallel wrapper is independant of Scilab (thanks to this wrapper) and is implemented in parallel_wrapper.hpp. +* +* Calling parallel_run is +* 1 checking args +* 2 constructing wrapper pre allocating result Scilab vars and abstracting arrays of args and results pointers +* (in parallel_wrapper ) +* 3 contructing a parallel_wrapper +* 4 calling the parallel_wrapper according to config options (i.e. nb of workers) +* 4.1 for each call to be made, adjusting the args and res ptr +* 4.2 calling the wrapper +* +*/ +int sci_parallel_run(char *fname, unsigned long fname_len) +{ + typedef std::vector varsContainer_t; + currentFname = fname; //get_fname(fname, fname_len); uses a static buffer :( + currentTop = Rhs; +#ifdef _MSC_VER + Nbvars = max(Rhs, Top); +#else + Nbvars = std::max(Rhs, Top); +#endif + if ( !check_args()) + { + Scierror(999, _("%s: Wrong number of input argument(s).\n"), fname); /* need a better error message */ + return 0; + } + + + int nbArgsToHandle(Rhs); + /* parameters default values */ + int nbWorkers(0), chunkSize(1); + bool sharedMemory(false), dynamicScheduling(false); + char const* prologueName(""); + char const* epilogueName(""); + /* If there is a config parameter, use it to update the parameters value */ + if ( getConfigParameters(Rhs, nbWorkers, sharedMemory, dynamicScheduling, chunkSize, prologueName, epilogueName)) + { + --nbArgsToHandle; + } + varsContainer_t stack(nbArgsToHandle); + for (int i(0); i != nbArgsToHandle; ++i) + { + err = getVarAddressFromPosition(pvApiCtx, i + 1, &stack[i]); + } + varsContainer_t::iterator functionArg = std::find_if(stack.begin(), stack.end(), &isFunctionOrString); + wrapper w(stack.begin(), functionArg, stack.end(), Lhs); + bool const withThreads(w.isForeignFunction() && sharedMemory); + + ConcurrencyState::ScopedUpdater u(concurrencyState.scopedUpdater(withThreads)); + + simple_wrapper prologue(prologueName), epilogue(epilogueName); + + make_parallel_wrapper(w.argsDataBegin(), w.argsSizesBegin(), w.argsNbBegin(), w.nbRhs(), w.tasksNb() + , w.resDataBegin(), w.resSizesBegin() + , Lhs, w.getHandle(), prologue, epilogue)(withThreads, nbWorkers, dynamicScheduling, chunkSize); + + for (int i(0); i != Lhs; ++i) + { + LhsVar(i + 1) = Rhs + i + 1; + } + + PutLhsVar(); /* to be moved to gateway */ + + return 0; +} diff --git a/modules/parallel/sci_gateway/parallel_gateway.xml b/modules/parallel/sci_gateway/parallel_gateway.xml new file mode 100755 index 000000000..0ec701a99 --- /dev/null +++ b/modules/parallel/sci_gateway/parallel_gateway.xml @@ -0,0 +1,27 @@ + + + + + + + + + + -- cgit