Initial commit.
This commit is contained in:
Executable
+118
@@ -0,0 +1,118 @@
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
project(wfr-examples C CXX)
|
||||
|
||||
|
||||
# Compiler flags
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -DNDEBUG -Wall")
|
||||
set(CMAKE_C_FLAGS_DEBUG "-O0 -g3 -DNDEBUG -Wall")
|
||||
|
||||
# Find WFR-libraries
|
||||
if (NOT WFR_FOUND)
|
||||
if (NOT WFR_DIR)
|
||||
set(WFR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../WFR-lib/dist")
|
||||
endif()
|
||||
find_package(WFR REQUIRED)
|
||||
endif()
|
||||
|
||||
# Find IWIR2WFR compiler
|
||||
if (NOT IWIR2WFR_FOUND)
|
||||
if (NOT IWIR2WFR_DIR)
|
||||
set(IWIR2WFR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../IWIR2WFRcompiler/dist")
|
||||
endif()
|
||||
find_package(IWIR2WFR REQUIRED)
|
||||
endif()
|
||||
|
||||
# We need OpenMP
|
||||
FIND_PACKAGE(OpenMP)
|
||||
if(OPENMP_FOUND)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
||||
endif()
|
||||
|
||||
# Where to install the output
|
||||
get_directory_property(hasParent PARENT_DIRECTORY)
|
||||
if (NOT hasParent)
|
||||
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/dist")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Setup include dir
|
||||
include_directories(${WFR_INCLUDE_DIR})
|
||||
|
||||
# Enable C++11 support
|
||||
ADD_DEFINITIONS( -std=c++11 )
|
||||
|
||||
#
|
||||
# Convenience function for setting up individual unit-tests
|
||||
#
|
||||
function(add_wfr_example name add_inc)
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr)
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.h
|
||||
COMMAND ${IWIR2WFR_EXE} -i ${CMAKE_CURRENT_SOURCE_DIR}/src/${name}/wfr/${name}.iwir -o ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name} -skipmain -printir -repoconfig ${CMAKE_CURRENT_SOURCE_DIR}/src/${name}/wfr/repo/${name}.properties
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr
|
||||
)
|
||||
add_definitions("-pg -g3")
|
||||
add_executable(${name}-wfr.bin ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.cpp ${ARGN})
|
||||
target_include_directories(${name}-wfr.bin PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr ${add_inc})
|
||||
target_link_libraries(${name}-wfr.bin ${WFR_LIBRARIES})
|
||||
add_dependencies(${name}-wfr.bin wfr_lib) # Otherwise we would have race conditions when compiling the parent project with -j
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.h DESTINATION ${CMAKE_INSTALL_PREFIX}/examples/${name}/wfr)
|
||||
install(TARGETS ${name}-wfr.bin DESTINATION ${CMAKE_INSTALL_PREFIX}/examples/${name}/wfr)
|
||||
endfunction()
|
||||
|
||||
function(add_omp_example name add_inc)
|
||||
add_executable(${name}-omp.bin ${CMAKE_CURRENT_SOURCE_DIR}/src/${name}/openmp/${name}.cpp ${ARGN})
|
||||
target_include_directories(${name}-omp.bin PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${name}/openmp ${add_inc})
|
||||
target_link_libraries(${name}-omp.bin ${WFR_LIBRARIES})
|
||||
add_dependencies(${name}-omp.bin wfr_lib) # Otherwise we would have race conditions when compiling the parent project with -j
|
||||
install(TARGETS ${name}-omp.bin DESTINATION ${CMAKE_INSTALL_PREFIX}/examples/${name}/openmp)
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# Setup individual examples
|
||||
#
|
||||
add_wfr_example(montage-pegasus "")
|
||||
add_omp_example(montage-pegasus "")
|
||||
|
||||
add_wfr_example(povray "")
|
||||
add_omp_example(povray "")
|
||||
|
||||
add_wfr_example(raincloud "")
|
||||
add_omp_example(raincloud "")
|
||||
|
||||
|
||||
add_wfr_example(raincloud.test01 "")
|
||||
|
||||
add_wfr_example(raincloud.transformed "")
|
||||
|
||||
add_wfr_example(sparselu-for "")
|
||||
add_omp_example(sparselu-for "")
|
||||
|
||||
add_wfr_example(sparselu-for-trans01 "")
|
||||
|
||||
add_wfr_example(sparselu-while "")
|
||||
add_omp_example(sparselu-while "")
|
||||
|
||||
add_wfr_example(starrs-merge "")
|
||||
add_omp_example(starrs-merge "")
|
||||
|
||||
add_wfr_example(nested_for_01 "")
|
||||
add_wfr_example(nested_for_02 "")
|
||||
add_wfr_example(nested_for_02b "")
|
||||
add_wfr_example(nested_for_02c "")
|
||||
add_wfr_example(nested_for_02d "")
|
||||
add_wfr_example(nested_for_03 "")
|
||||
add_wfr_example(nested_for_04 "")
|
||||
|
||||
add_wfr_example(unrolling_for_01 "")
|
||||
add_wfr_example(unrolling_for_02 "")
|
||||
|
||||
|
||||
add_wfr_example(meteoag01 "")
|
||||
add_wfr_example(meteoag02 "")
|
||||
add_wfr_example(meteoag03 "")
|
||||
|
||||
add_wfr_example(blast01 "")
|
||||
add_wfr_example(blast02 "")
|
||||
|
||||
Executable
+109
@@ -0,0 +1,109 @@
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
project(wfr-examples C CXX)
|
||||
|
||||
|
||||
# Compiler flags
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O3 -g3 -pg -DNDEBUG -Wall")
|
||||
set(CMAKE_C_FLAGS_DEBUG "-O3 -g3 -pg -DNDEBUG -Wall")
|
||||
|
||||
# Find WFR-libraries
|
||||
if (NOT WFR_FOUND)
|
||||
if (NOT WFR_DIR)
|
||||
set(WFR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../WFR-lib/dist")
|
||||
endif()
|
||||
find_package(WFR REQUIRED)
|
||||
endif()
|
||||
|
||||
# Find IWIR2WFR compiler
|
||||
if (NOT IWIR2WFR_FOUND)
|
||||
if (NOT IWIR2WFR_DIR)
|
||||
set(IWIR2WFR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../IWIR2WFRcompiler/dist")
|
||||
endif()
|
||||
find_package(IWIR2WFR REQUIRED)
|
||||
endif()
|
||||
|
||||
# We need OpenMP
|
||||
FIND_PACKAGE(OpenMP)
|
||||
if(OPENMP_FOUND)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
||||
endif()
|
||||
|
||||
# Where to install the output
|
||||
get_directory_property(hasParent PARENT_DIRECTORY)
|
||||
if (NOT hasParent)
|
||||
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/dist")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Setup include dir
|
||||
include_directories(${WFR_INCLUDE_DIR})
|
||||
|
||||
# Enable C++11 support
|
||||
ADD_DEFINITIONS( -std=c++11 )
|
||||
|
||||
#
|
||||
# Convenience function for setting up individual unit-tests
|
||||
#
|
||||
function(add_wfr_example name add_inc)
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr)
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.h
|
||||
COMMAND ${IWIR2WFR_EXE} -i ${CMAKE_CURRENT_SOURCE_DIR}/src/${name}/wfr/${name}.iwir -o ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name} -skipmain -printir -repoconfig ${CMAKE_CURRENT_SOURCE_DIR}/src/${name}/wfr/repo/${name}.properties
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr
|
||||
)
|
||||
add_definitions("-pg -g3")
|
||||
add_executable(${name}-wfr.bin ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.cpp ${ARGN})
|
||||
target_include_directories(${name}-wfr.bin PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr ${add_inc})
|
||||
target_link_libraries(${name}-wfr.bin ${WFR_LIBRARIES})
|
||||
add_dependencies(${name}-wfr.bin wfr_lib) # Otherwise we would have race conditions when compiling the parent project with -j
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${name}/wfr/${name}.h DESTINATION ${CMAKE_INSTALL_PREFIX}/examples/${name}/wfr)
|
||||
install(TARGETS ${name}-wfr.bin DESTINATION ${CMAKE_INSTALL_PREFIX}/examples/${name}/wfr)
|
||||
endfunction()
|
||||
|
||||
function(add_omp_example name add_inc)
|
||||
add_executable(${name}-omp.bin ${CMAKE_CURRENT_SOURCE_DIR}/src/${name}/openmp/${name}.cpp ${ARGN})
|
||||
target_include_directories(${name}-omp.bin PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${name}/openmp ${add_inc})
|
||||
target_link_libraries(${name}-omp.bin ${WFR_LIBRARIES})
|
||||
add_dependencies(${name}-omp.bin wfr_lib) # Otherwise we would have race conditions when compiling the parent project with -j
|
||||
install(TARGETS ${name}-omp.bin DESTINATION ${CMAKE_INSTALL_PREFIX}/examples/${name}/openmp)
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# Setup individual examples
|
||||
#
|
||||
add_wfr_example(montage-pegasus "")
|
||||
add_omp_example(montage-pegasus "")
|
||||
|
||||
add_wfr_example(povray "")
|
||||
add_omp_example(povray "")
|
||||
|
||||
add_wfr_example(raincloud "")
|
||||
add_omp_example(raincloud "")
|
||||
|
||||
|
||||
add_wfr_example(raincloud.test01 "")
|
||||
|
||||
add_wfr_example(raincloud.transformed "")
|
||||
|
||||
add_wfr_example(sparselu-for "")
|
||||
add_omp_example(sparselu-for "")
|
||||
|
||||
add_wfr_example(sparselu-while "")
|
||||
add_omp_example(sparselu-while "")
|
||||
|
||||
add_wfr_example(starrs-merge "")
|
||||
add_omp_example(starrs-merge "")
|
||||
|
||||
add_wfr_example(nested_for_01 "")
|
||||
add_wfr_example(nested_for_02 "")
|
||||
add_wfr_example(nested_for_02b "")
|
||||
add_wfr_example(nested_for_02c "")
|
||||
add_wfr_example(nested_for_02d "")
|
||||
add_wfr_example(nested_for_03 "")
|
||||
add_wfr_example(nested_for_04 "")
|
||||
|
||||
add_wfr_example(unrolling_for_01 "")
|
||||
add_wfr_example(unrolling_for_02 "")
|
||||
|
||||
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
rm -rf default* *.png *.dot wfr_wdir*
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
for i in *.dot; do
|
||||
echo "Creating $i.png"
|
||||
dot -Tpng $i > $i.png
|
||||
done
|
||||
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
[Dolphin]
|
||||
Timestamp=2015,2,11,11,19,2
|
||||
Version=3
|
||||
ViewMode=1
|
||||
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
[Dolphin]
|
||||
Timestamp=2016,11,14,13,29,44
|
||||
Version=3
|
||||
ViewMode=2
|
||||
@@ -0,0 +1,112 @@
|
||||
<IWIR version="1.1" wfname="Blast" xmlns="http://shiwa-workflow.eu/IWIR">
|
||||
<blockScope name="toplevel">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="split_inputs" tasktype="split_inputs">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="input_chunks" type="collection/file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<parallelForEach name="pForEach01">
|
||||
<inputPorts>
|
||||
<loopElements>
|
||||
<loopElement name="input_chunks" type="collection/file"/>
|
||||
</loopElements>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="distributed_script" tasktype="distributed_script">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
<outputPort name="error" type="file"/>
|
||||
<outputPort name="total" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/file"/>
|
||||
<outputPort name="error" type="collection/file"/>
|
||||
<outputPort name="total" type="collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pForEach01/input_chunks" to="distributed_script/input"/>
|
||||
<link from="distributed_script/output" to="pForEach01/output"/>
|
||||
<link from="distributed_script/error" to="pForEach01/error"/>
|
||||
<link from="distributed_script/total" to="pForEach01/total"/>
|
||||
</links>
|
||||
</parallelForEach>
|
||||
|
||||
<task name="cat_output" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="cat_error" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="cat_total" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="finish_job" tasktype="finish_job">
|
||||
<inputPorts>
|
||||
<inputPort name="output" type="file"/>
|
||||
<inputPort name="error" type="file"/>
|
||||
<inputPort name="total" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="result" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="result" type="file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="toplevel/input_file" to="split_inputs/input_file"/>
|
||||
<link from="toplevel/chunk_count" to="split_inputs/chunk_count"/>
|
||||
<link from="split_inputs/input_chunks" to="pForEach01/input_chunks"/>
|
||||
<link from="pForEach01/output" to="cat_output/input"/>
|
||||
<link from="pForEach01/error" to="cat_error/input"/>
|
||||
<link from="pForEach01/total" to="cat_total/input"/>
|
||||
<link from="cat_output/output" to="finish_job/output"/>
|
||||
<link from="cat_error/output" to="finish_job/error"/>
|
||||
<link from="cat_total/output" to="finish_job/total"/>
|
||||
<link from="finish_job/result" to="toplevel/result"/>
|
||||
</links>
|
||||
<properties>
|
||||
<property name="version" value="1.0.0"/>
|
||||
<property name="author" value="matthias"/>
|
||||
<property name="domain" value="Generic"/>
|
||||
</properties>
|
||||
</blockScope>
|
||||
</IWIR>
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
auto sleeptime = sin->input.getSize(); // per file the original code roughly needed 0.7 ms (let's round that to 1 ms).
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds((long int)sleeptime));
|
||||
sout->output.setValue("cat_output.file");
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=cat_files
|
||||
entries=1
|
||||
entry.0=cat_files.code
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
EXECUTE_SIMULATION_MODE
|
||||
sout->output.setValue("output.file");
|
||||
sout->error.setValue("error.file");
|
||||
sout->total.setValue("total.file");
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=distributed_script
|
||||
entries=1
|
||||
entry.0=distributed_script.code
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
EXECUTE_SIMULATION_MODE
|
||||
sout->result.setValue("result.file");
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=finish_job
|
||||
entries=1
|
||||
entry.0=finish_job.code
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#include <boost/program_options.hpp>
|
||||
#include <thread>
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
EXECUTE_SIMULATION_MODE
|
||||
for (long i = 0; i < sin->chunk_count.getValue(); ++i) {
|
||||
sout->input_chunks.setEntryValue(i, "input_chunk");
|
||||
}
|
||||
sout->input_chunks.setFinalised(true);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=split_inputs
|
||||
entries=1
|
||||
entry.0=split_inputs.code
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
|
||||
long chunkCount = 10;
|
||||
bool isHelp = false;
|
||||
boost::program_options::options_description opts("MeteoAG Options");
|
||||
opts.add_options()
|
||||
("help", "Print help message.")
|
||||
("inputchunks", boost::program_options::value<long>(), "Number of input chunks.");
|
||||
boost::program_options::variables_map vm;
|
||||
auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run();
|
||||
boost::program_options::store(parsed, vm);
|
||||
boost::program_options::notify(vm);
|
||||
if (vm.count("help")) {
|
||||
std::cerr << opts << std::endl;
|
||||
isHelp = true;
|
||||
} else {
|
||||
if (vm.count("inputchunks")) {
|
||||
chunkCount = vm["inputchunks"].as<long>();
|
||||
}
|
||||
std::cerr << "inputChunks = " << chunkCount << std::endl;
|
||||
}
|
||||
wfInput.input_file.setValue("input_file");
|
||||
wfInput.chunk_count.setValue(chunkCount);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
wfinput=blast/wfInput.code
|
||||
wfoutput=blast/wfOutput.code
|
||||
includes=blast/includes.code
|
||||
|
||||
atomicTask.0=blast/split_inputs.properties
|
||||
atomicTask.1=blast/distributed_script.properties
|
||||
atomicTask.2=blast/cat_files.properties
|
||||
atomicTask.3=blast/finish_job.properties
|
||||
@@ -0,0 +1,179 @@
|
||||
<IWIR version="1.1" wfname="Blast" xmlns="http://shiwa-workflow.eu/IWIR">
|
||||
<blockScope name="toplevel">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
<inputPort name="parallelReductions" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="split_inputs" tasktype="split_inputs">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="input_chunks" type="collection/file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<parallelFor name="pFor01">
|
||||
<inputPorts>
|
||||
<loopCounter name="counter" from="0" to="" step="1"/>
|
||||
<inputPort name="input_chunks" type="collection/file"/>
|
||||
<inputPort name="parallelReductions" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="helper01" tasktype="helper01">
|
||||
<inputPorts>
|
||||
<inputPort name="input_chunks" type="collection/file"/>
|
||||
<inputPort name="parallelReductions" type="integer"/>
|
||||
<inputPort name="loopCounter" type="integer"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<parallelForEach name="pForEach01">
|
||||
<inputPorts>
|
||||
<loopElements>
|
||||
<loopElement name="input_chunks" type="collection/file"/>
|
||||
</loopElements>
|
||||
</inputPorts>
|
||||
<body>
|
||||
<task name="distributed_script" tasktype="distributed_script">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
<outputPort name="error" type="file"/>
|
||||
<outputPort name="total" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/file"/>
|
||||
<outputPort name="error" type="collection/file"/>
|
||||
<outputPort name="total" type="collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pForEach01/input_chunks" to="distributed_script/input"/>
|
||||
<link from="distributed_script/output" to="pForEach01/output"/>
|
||||
<link from="distributed_script/error" to="pForEach01/error"/>
|
||||
<link from="distributed_script/total" to="pForEach01/total"/>
|
||||
</links>
|
||||
</parallelForEach>
|
||||
|
||||
<task name="cat_output" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="cat_error" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="cat_total" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/file"/>
|
||||
<outputPort name="error" type="collection/file"/>
|
||||
<outputPort name="total" type="collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pFor01/input_chunks" to="helper01/input_chunks"/>
|
||||
<link from="pFor01/parallelReductions" to="helper01/parallelReductions"/>
|
||||
<link from="pFor01/counter" to="helper01/loopCounter"/>
|
||||
<link from="helper01/output" to="pForEach01/input_chunks"/>
|
||||
<link from="pForEach01/output" to="cat_output/input"/>
|
||||
<link from="pForEach01/error" to="cat_error/input"/>
|
||||
<link from="pForEach01/total" to="cat_total/input"/>
|
||||
<link from="cat_output/output" to="pFor01/output"/>
|
||||
<link from="cat_error/output" to="pFor01/error"/>
|
||||
<link from="cat_total/output" to="pFor01/total"/>
|
||||
</links>
|
||||
</parallelFor>
|
||||
|
||||
<task name="cat_output_2" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="cat_error_2" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="cat_total_2" tasktype="cat_files">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="collection/file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="finish_job" tasktype="finish_job">
|
||||
<inputPorts>
|
||||
<inputPort name="output" type="file"/>
|
||||
<inputPort name="error" type="file"/>
|
||||
<inputPort name="total" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="result" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="result" type="file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="toplevel/input_file" to="split_inputs/input_file"/>
|
||||
<link from="toplevel/chunk_count" to="split_inputs/chunk_count"/>
|
||||
<link from="split_inputs/input_chunks" to="pFor01/input_chunks"/>
|
||||
<link from="toplevel/parallelReductions" to="pFor01/parallelReductions"/>
|
||||
<link from="toplevel/parallelReductions" to="pFor01/counter/to"/>
|
||||
<link from="pFor01/output" to="cat_output_2/input"/>
|
||||
<link from="pFor01/error" to="cat_error_2/input"/>
|
||||
<link from="pFor01/total" to="cat_total_2/input"/>
|
||||
<link from="cat_output_2/output" to="finish_job/output"/>
|
||||
<link from="cat_error_2/output" to="finish_job/error"/>
|
||||
<link from="cat_total_2/output" to="finish_job/total"/>
|
||||
<link from="finish_job/result" to="toplevel/result"/>
|
||||
</links>
|
||||
<properties>
|
||||
<property name="version" value="1.0.0"/>
|
||||
<property name="author" value="matthias"/>
|
||||
<property name="domain" value="Generic"/>
|
||||
</properties>
|
||||
</blockScope>
|
||||
</IWIR>
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
auto sleeptime = sin->input.getSize(); // per file the original code roughly needed 0.7 ms (let's round that to 1 ms).
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds((long int)sleeptime));
|
||||
sout->output.setValue("cat_output.file");
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=cat_files
|
||||
entries=1
|
||||
entry.0=cat_files.code
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
EXECUTE_SIMULATION_MODE
|
||||
sout->output.setValue("output.file");
|
||||
sout->error.setValue("error.file");
|
||||
sout->total.setValue("total.file");
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=distributed_script
|
||||
entries=1
|
||||
entry.0=distributed_script.code
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
EXECUTE_SIMULATION_MODE
|
||||
sout->result.setValue("result.file");
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=finish_job
|
||||
entries=1
|
||||
entry.0=finish_job.code
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
for (long i = 0; i < sin->input_chunks.getSize()/(sin->parallelReductions.getValue()+1); ++i) {
|
||||
sout->output.setEntryValue(i, sin->input_chunks.getEntryValue(i));
|
||||
}
|
||||
sout->output.setFinalised(true);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=helper01
|
||||
entries=1
|
||||
entry.0=helper01.code
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
#include <boost/program_options.hpp>
|
||||
#include <thread>
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
EXECUTE_SIMULATION_MODE
|
||||
for (long i = 0; i < sin->chunk_count.getValue(); ++i) {
|
||||
sout->input_chunks.setEntryValue(i, "input_chunk");
|
||||
}
|
||||
sout->input_chunks.setFinalised(true);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=split_inputs
|
||||
entries=1
|
||||
entry.0=split_inputs.code
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
|
||||
long chunkCount = 10;
|
||||
long parallelreductions = 10;
|
||||
bool isHelp = false;
|
||||
boost::program_options::options_description opts("MeteoAG Options");
|
||||
opts.add_options()
|
||||
("help", "Print help message.")
|
||||
("inputchunks", boost::program_options::value<long>(), "Number of input chunks.")
|
||||
("parallelreductions", boost::program_options::value<long>(), "Number of parallel reductions.");
|
||||
boost::program_options::variables_map vm;
|
||||
auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run();
|
||||
boost::program_options::store(parsed, vm);
|
||||
boost::program_options::notify(vm);
|
||||
if (vm.count("help")) {
|
||||
std::cerr << opts << std::endl;
|
||||
isHelp = true;
|
||||
} else {
|
||||
if (vm.count("inputchunks")) {
|
||||
chunkCount = vm["inputchunks"].as<long>();
|
||||
}
|
||||
if (vm.count("parallelreductions")) {
|
||||
parallelreductions = vm["parallelreductions"].as<long>();
|
||||
}
|
||||
std::cerr << "inputChunks = " << chunkCount << std::endl;
|
||||
std::cerr << "parallelreductions = " << parallelreductions << std::endl;
|
||||
}
|
||||
wfInput.input_file.setValue("input_file");
|
||||
wfInput.chunk_count.setValue(chunkCount);
|
||||
wfInput.parallelReductions.setValue(parallelreductions);
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
wfinput=blast/wfInput.code
|
||||
wfoutput=blast/wfOutput.code
|
||||
includes=blast/includes.code
|
||||
|
||||
atomicTask.0=blast/split_inputs.properties
|
||||
atomicTask.1=blast/distributed_script.properties
|
||||
atomicTask.2=blast/cat_files.properties
|
||||
atomicTask.3=blast/finish_job.properties
|
||||
atomicTask.4=blast/helper01.properties
|
||||
@@ -0,0 +1,168 @@
|
||||
<IWIR version="1.1" wfname="meteoAG" xmlns="http://shiwa-workflow.eu/IWIR">
|
||||
<blockScope name="toplevel">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
<inputPort name="if_condition" type="boolean"/>
|
||||
<inputPort name="pForIterations" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="simulation_init" tasktype="simulation_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="input_chunks" type="collection/file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<parallelForEach name="pForEach01">
|
||||
<inputPorts>
|
||||
<loopElements>
|
||||
<loopElement name="input_chunks" type="collection/file"/>
|
||||
</loopElements>
|
||||
<inputPort name="if_condition" type="boolean"/>
|
||||
<inputPort name="pForIterations" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="case_init" tasktype="case_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<parallelFor name="pFor01">
|
||||
<inputPorts>
|
||||
<loopCounter name="loopCounter" from="0" to="" step="1"/>
|
||||
<inputPort name="input" type="file"/>
|
||||
<inputPort name="if_condition" type="boolean"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="rams_makevfile" tasktype="rams_makevfile">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="rams_init" tasktype="rams_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="revu_compare" tasktype="revu_compare">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="raver" tasktype="raver">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<if name="if01">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
<inputPort name="if_condition" type="boolean"/>
|
||||
</inputPorts>
|
||||
<condition>if_condition = true</condition>
|
||||
<then>
|
||||
|
||||
<task name="rams_hist" tasktype="rams_hist">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="revu_dump" tasktype="revu_dump">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
</then>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="if01/input" to="rams_hist/input"/>
|
||||
<link from="rams_hist/output" to="revu_dump/input"/>
|
||||
<link from="revu_dump/output" to="if01/output"/>
|
||||
<link from="if01/input" to="if01/output"/>
|
||||
</links>
|
||||
</if>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pFor01/input" to="rams_makevfile/input"/>
|
||||
<link from="rams_makevfile/output" to="rams_init/input"/>
|
||||
<link from="rams_init/output" to="revu_compare/input"/>
|
||||
<link from="revu_compare/output" to="raver/input"/>
|
||||
<link from="raver/output" to="if01/input"/>
|
||||
<link from="pFor01/if_condition" to="if01/if_condition"/>
|
||||
<link from="if01/output" to="pFor01/output"/>
|
||||
</links>
|
||||
</parallelFor>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pForEach01/input_chunks" to="case_init/input"/>
|
||||
<link from="case_init/output" to="pFor01/input"/>
|
||||
<link from="pForEach01/pForIterations" to="pFor01/loopCounter/to"/>
|
||||
<link from="pForEach01/if_condition" to="pFor01/if_condition"/>
|
||||
<link from="pFor01/output" to="pForEach01/output"/>
|
||||
</links>
|
||||
</parallelForEach>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="toplevel/input_file" to="simulation_init/input_file"/>
|
||||
<link from="toplevel/chunk_count" to="simulation_init/chunk_count"/>
|
||||
<link from="simulation_init/input_chunks" to="pForEach01/input_chunks"/>
|
||||
<link from="toplevel/if_condition" to="pForEach01/if_condition"/>
|
||||
<link from="toplevel/pForIterations" to="pForEach01/pForIterations"/>
|
||||
<link from="pForEach01/output" to="toplevel/output"/>
|
||||
</links>
|
||||
<properties>
|
||||
<property name="version" value="1.0.0"/>
|
||||
<property name="author" value="matthias"/>
|
||||
<property name="domain" value="Generic"/>
|
||||
</properties>
|
||||
</blockScope>
|
||||
</IWIR>
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=case_init
|
||||
entries=1
|
||||
entry.0=case_init.code
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
#include <boost/program_options.hpp>
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=rams_hist
|
||||
entries=1
|
||||
entry.0=rams_hist.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=rams_init
|
||||
entries=1
|
||||
entry.0=rams_init.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=rams_makevfile
|
||||
entries=1
|
||||
entry.0=rams_makevfile.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=raver
|
||||
entries=1
|
||||
entry.0=raver.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=revu_compare
|
||||
entries=1
|
||||
entry.0=revu_compare.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=revu_dump
|
||||
entries=1
|
||||
entry.0=revu_dump.code
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
for (long i = 0; i < sin->chunk_count.getValue(); ++i) {
|
||||
sout->input_chunks.setEntryValue(i, "input_chunk");
|
||||
}
|
||||
sout->input_chunks.setFinalised(true);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=simulation_init
|
||||
entries=1
|
||||
entry.0=simulation_init.code
|
||||
Executable
+38
@@ -0,0 +1,38 @@
|
||||
|
||||
std::string inputFile = "input.file";
|
||||
long chunkCount = 10;
|
||||
long pForIterations = 10;
|
||||
bool ifCondition = true;
|
||||
bool isHelp = false;
|
||||
boost::program_options::options_description opts("MeteoAG Options");
|
||||
opts.add_options()
|
||||
("help", "Print help message.")
|
||||
("inputchunks", boost::program_options::value<long>(), "Number of input chunks.")
|
||||
("pforiterations", boost::program_options::value<long>(), "Number of pFor iterations.")
|
||||
("ifcondition", boost::program_options::value<bool>(), "If condition.");
|
||||
boost::program_options::variables_map vm;
|
||||
auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run();
|
||||
boost::program_options::store(parsed, vm);
|
||||
boost::program_options::notify(vm);
|
||||
if (vm.count("help")) {
|
||||
std::cerr << opts << std::endl;
|
||||
isHelp = true;
|
||||
} else {
|
||||
if (vm.count("inputchunks")) {
|
||||
chunkCount = vm["inputchunks"].as<long>();
|
||||
}
|
||||
if (vm.count("pforiterations")) {
|
||||
pForIterations = vm["pforiterations"].as<long>();
|
||||
}
|
||||
if (vm.count("ifcondition")) {
|
||||
ifCondition = vm["ifcondition"].as<bool>();
|
||||
}
|
||||
std::cerr << "inputChunks = " << chunkCount << std::endl;
|
||||
std::cerr << "pForIterations = " << pForIterations << std::endl;
|
||||
std::cerr << "IfCondition = " << ifCondition << std::endl;
|
||||
}
|
||||
wfInput.input_file.setValue("input_file");
|
||||
wfInput.chunk_count.setValue(chunkCount);
|
||||
wfInput.pForIterations.setValue(pForIterations);
|
||||
wfInput.if_condition.setValue(ifCondition);
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
wfinput=meteoag/wfInput.code
|
||||
wfoutput=meteoag/wfOutput.code
|
||||
includes=meteoag/includes.code
|
||||
|
||||
atomicTask.0=meteoag/simulation_init.properties
|
||||
atomicTask.1=meteoag/case_init.properties
|
||||
atomicTask.2=meteoag/rams_makevfile.properties
|
||||
atomicTask.3=meteoag/rams_init.properties
|
||||
atomicTask.4=meteoag/revu_compare.properties
|
||||
atomicTask.5=meteoag/raver.properties
|
||||
atomicTask.6=meteoag/rams_hist.properties
|
||||
atomicTask.7=meteoag/revu_dump.properties
|
||||
@@ -0,0 +1,256 @@
|
||||
<IWIR version="1.1" wfname="meteoAG" xmlns="http://shiwa-workflow.eu/IWIR">
|
||||
<blockScope name="toplevel">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
<inputPort name="if_condition" type="boolean"/>
|
||||
<inputPort name="pForIterations" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="simulation_init" tasktype="simulation_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input_file" type="file"/>
|
||||
<inputPort name="chunk_count" type="integer"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="input_chunks" type="collection/file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<if name="if01">
|
||||
<inputPorts>
|
||||
<inputPort name="input_chunks" type="collection/file"/>
|
||||
<inputPort name="pForIterations" type="integer"/>
|
||||
<inputPort name="if_condition" type="boolean"/>
|
||||
</inputPorts>
|
||||
<condition>if_condition = true</condition>
|
||||
|
||||
<then>
|
||||
<parallelForEach name="pForEach01_then">
|
||||
<inputPorts>
|
||||
<loopElements>
|
||||
<loopElement name="input_chunks" type="collection/file"/>
|
||||
</loopElements>
|
||||
<inputPort name="pForIterations" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="case_init_then" tasktype="case_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<parallelFor name="pFor01_then">
|
||||
<inputPorts>
|
||||
<loopCounter name="loopCounter" from="0" to="" step="1"/>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="rams_makevfile_then" tasktype="rams_makevfile">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="rams_init_then" tasktype="rams_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="revu_compare_then" tasktype="revu_compare">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="raver_then" tasktype="raver">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="rams_hist_then" tasktype="rams_hist">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="revu_dump_then" tasktype="revu_dump">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pFor01_then/input" to="rams_makevfile_then/input"/>
|
||||
<link from="rams_makevfile_then/output" to="rams_init_then/input"/>
|
||||
<link from="rams_init_then/output" to="revu_compare_then/input"/>
|
||||
<link from="revu_compare_then/output" to="raver_then/input"/>
|
||||
<link from="raver_then/output" to="rams_hist_then/input"/>
|
||||
<link from="rams_hist_then/output" to="revu_dump_then/input"/>
|
||||
<link from="revu_dump_then/output" to="pFor01_then/output"/>
|
||||
</links>
|
||||
</parallelFor>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pForEach01_then/input_chunks" to="case_init_then/input"/>
|
||||
<link from="case_init_then/output" to="pFor01_then/input"/>
|
||||
<link from="pForEach01_then/pForIterations" to="pFor01_then/loopCounter/to"/>
|
||||
<link from="pFor01_then/output" to="pForEach01_then/output"/>
|
||||
</links>
|
||||
</parallelForEach>
|
||||
</then>
|
||||
|
||||
<else>
|
||||
<parallelForEach name="pForEach01_else">
|
||||
<inputPorts>
|
||||
<loopElements>
|
||||
<loopElement name="input_chunks" type="collection/file"/>
|
||||
</loopElements>
|
||||
<inputPort name="pForIterations" type="integer"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="case_init_else" tasktype="case_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<parallelFor name="pFor01_else">
|
||||
<inputPorts>
|
||||
<loopCounter name="loopCounter" from="0" to="" step="1"/>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<body>
|
||||
|
||||
<task name="rams_makevfile_else" tasktype="rams_makevfile">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="rams_init_else" tasktype="rams_init">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="revu_compare_else" tasktype="revu_compare">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
<task name="raver_else" tasktype="raver">
|
||||
<inputPorts>
|
||||
<inputPort name="input" type="file"/>
|
||||
</inputPorts>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="file"/>
|
||||
</outputPorts>
|
||||
</task>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pFor01_else/input" to="rams_makevfile_else/input"/>
|
||||
<link from="rams_makevfile_else/output" to="rams_init_else/input"/>
|
||||
<link from="rams_init_else/output" to="revu_compare_else/input"/>
|
||||
<link from="revu_compare_else/output" to="raver_else/input"/>
|
||||
<link from="raver_else/output" to="pFor01_else/output"/>
|
||||
</links>
|
||||
</parallelFor>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="pForEach01_else/input_chunks" to="case_init_else/input"/>
|
||||
<link from="case_init_else/output" to="pFor01_else/input"/>
|
||||
<link from="pForEach01_else/pForIterations" to="pFor01_else/loopCounter/to"/>
|
||||
<link from="pFor01_else/output" to="pForEach01_else/output"/>
|
||||
</links>
|
||||
</parallelForEach>
|
||||
</else>
|
||||
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="if01/input_chunks" to="pForEach01_then/input_chunks"/>
|
||||
<link from="if01/pForIterations" to="pForEach01_then/pForIterations"/>
|
||||
<link from="pForEach01_then/output" to="if01/output"/>
|
||||
<link from="if01/input_chunks" to="pForEach01_else/input_chunks"/>
|
||||
<link from="if01/pForIterations" to="pForEach01_else/pForIterations"/>
|
||||
<link from="pForEach01_else/output" to="if01/output"/>
|
||||
</links>
|
||||
</if>
|
||||
|
||||
</body>
|
||||
<outputPorts>
|
||||
<outputPort name="output" type="collection/collection/file"/>
|
||||
</outputPorts>
|
||||
<links>
|
||||
<link from="toplevel/input_file" to="simulation_init/input_file"/>
|
||||
<link from="toplevel/chunk_count" to="simulation_init/chunk_count"/>
|
||||
<link from="simulation_init/input_chunks" to="if01/input_chunks"/>
|
||||
<link from="toplevel/if_condition" to="if01/if_condition"/>
|
||||
<link from="toplevel/pForIterations" to="if01/pForIterations"/>
|
||||
<link from="if01/output" to="toplevel/output"/>
|
||||
</links>
|
||||
<properties>
|
||||
<property name="version" value="1.0.0"/>
|
||||
<property name="author" value="matthias"/>
|
||||
<property name="domain" value="Generic"/>
|
||||
</properties>
|
||||
</blockScope>
|
||||
</IWIR>
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=case_init
|
||||
entries=1
|
||||
entry.0=case_init.code
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
#include <boost/program_options.hpp>
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=rams_hist
|
||||
entries=1
|
||||
entry.0=rams_hist.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=rams_init
|
||||
entries=1
|
||||
entry.0=rams_init.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=rams_makevfile
|
||||
entries=1
|
||||
entry.0=rams_makevfile.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=raver
|
||||
entries=1
|
||||
entry.0=raver.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=revu_compare
|
||||
entries=1
|
||||
entry.0=revu_compare.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=revu_dump
|
||||
entries=1
|
||||
entry.0=revu_dump.code
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
for (long i = 0; i < sin->chunk_count.getValue(); ++i) {
|
||||
sout->input_chunks.setEntryValue(i, "input_chunk");
|
||||
}
|
||||
sout->input_chunks.setFinalised(true);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=simulation_init
|
||||
entries=1
|
||||
entry.0=simulation_init.code
|
||||
Executable
+38
@@ -0,0 +1,38 @@
|
||||
|
||||
std::string inputFile = "input.file";
|
||||
long chunkCount = 10;
|
||||
long pForIterations = 10;
|
||||
bool ifCondition = true;
|
||||
bool isHelp = false;
|
||||
boost::program_options::options_description opts("MeteoAG Options");
|
||||
opts.add_options()
|
||||
("help", "Print help message.")
|
||||
("inputchunks", boost::program_options::value<long>(), "Number of input chunks.")
|
||||
("pforiterations", boost::program_options::value<long>(), "Number of pFor iterations.")
|
||||
("ifcondition", boost::program_options::value<bool>(), "If condition.");
|
||||
boost::program_options::variables_map vm;
|
||||
auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run();
|
||||
boost::program_options::store(parsed, vm);
|
||||
boost::program_options::notify(vm);
|
||||
if (vm.count("help")) {
|
||||
std::cerr << opts << std::endl;
|
||||
isHelp = true;
|
||||
} else {
|
||||
if (vm.count("inputchunks")) {
|
||||
chunkCount = vm["inputchunks"].as<long>();
|
||||
}
|
||||
if (vm.count("pforiterations")) {
|
||||
pForIterations = vm["pforiterations"].as<long>();
|
||||
}
|
||||
if (vm.count("ifcondition")) {
|
||||
ifCondition = vm["ifcondition"].as<bool>();
|
||||
}
|
||||
std::cerr << "inputChunks = " << chunkCount << std::endl;
|
||||
std::cerr << "pForIterations = " << pForIterations << std::endl;
|
||||
std::cerr << "IfCondition = " << ifCondition << std::endl;
|
||||
}
|
||||
wfInput.input_file.setValue("input_file");
|
||||
wfInput.chunk_count.setValue(chunkCount);
|
||||
wfInput.pForIterations.setValue(pForIterations);
|
||||
wfInput.if_condition.setValue(ifCondition);
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
wfinput=meteoag/wfInput.code
|
||||
wfoutput=meteoag/wfOutput.code
|
||||
includes=meteoag/includes.code
|
||||
|
||||
atomicTask.0=meteoag/simulation_init.properties
|
||||
atomicTask.1=meteoag/case_init.properties
|
||||
atomicTask.2=meteoag/rams_makevfile.properties
|
||||
atomicTask.3=meteoag/rams_init.properties
|
||||
atomicTask.4=meteoag/revu_compare.properties
|
||||
atomicTask.5=meteoag/raver.properties
|
||||
atomicTask.6=meteoag/rams_hist.properties
|
||||
atomicTask.7=meteoag/revu_dump.properties
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=case_init
|
||||
entries=1
|
||||
entry.0=case_init.code
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->pForEachIterations.setValue((sin->chunk_count.getValue()/10) - 1);
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
name=helper01
|
||||
entries=1
|
||||
entry.0=helper01.code
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
sout->input01.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10));
|
||||
sout->input02.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 1));
|
||||
sout->input03.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 2));
|
||||
sout->input04.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 3));
|
||||
sout->input05.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 4));
|
||||
sout->input06.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 5));
|
||||
sout->input07.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 6));
|
||||
sout->input08.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 7));
|
||||
sout->input09.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 8));
|
||||
sout->input10.setValue(sin->input_chunks.getEntryValue(sin->counter.getValue() * 10 + 9));
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
name=helper02
|
||||
entries=1
|
||||
entry.0=helper02.code
|
||||
@@ -0,0 +1,34 @@
|
||||
|
||||
long i = 0;
|
||||
for ( auto& o : sin->output01.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output02.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output03.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output04.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output05.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output06.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output07.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output08.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output09.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
for ( auto& o : sin->output10.getValue()) {
|
||||
sout->output.setEntryValue(i++, o.getValue());
|
||||
}
|
||||
sout->output.setFinalised(true);
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
name=helper03
|
||||
entries=1
|
||||
entry.0=helper03.code
|
||||
Executable
+1
@@ -0,0 +1 @@
|
||||
#include <boost/program_options.hpp>
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
sout->output.setValue(sin->input);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
name=rams_hist
|
||||
entries=1
|
||||
entry.0=rams_hist.code
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user