Initial commit.

This commit is contained in:
Matthias
2017-07-24 16:52:05 +02:00
commit a9ead100ef
59 changed files with 19191 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
cmake_minimum_required(VERSION 2.8)
project(CCGrid-raincloud-experiments C CXX)
find_package (Threads)
set(WFR_DIR /home/matthias/Uni/Work/WorkflowsOnManycores/wfr-eclipse-workspace/dist/)
get_filename_component(INSTALL_DIR "bin" ABSOLUTE)
set(WFR_INCLUDES ${WFR_DIR}/include)
set(WFR_LIBS
${WFR_DIR}/lib/libwfr.a
${WFR_DIR}/lib/libboost_filesystem.a
${WFR_DIR}/lib/libboost_program_options.a
${WFR_DIR}/lib/libboost_system.a
${WFR_DIR}/lib/libodb-sqlite.a
${WFR_DIR}/lib/libodb.a
${WFR_DIR}/lib/libsqlite3.a
${CMAKE_THREAD_LIBS_INIT}
${CMAKE_DL_LIBS}
)
set(CMAKE_CXX_FLAGS "-O3 -g3 -DNDEBUG -Wall")
set(CMAKE_C_FLAGS "-O3 -g3 -DNDEBUG -Wall")
file(MAKE_DIRECTORY ${INSTALL_DIR})
add_subdirectory(src/01.original)
add_subdirectory(src/02.loopunswitching)
add_subdirectory(src/03.loopunrolling)
add_subdirectory(src/04.loopnesting)
add_subdirectory(src/05.ifoptimization01)
add_subdirectory(src/06.ifoptimization02)
add_subdirectory(src/07.softwarepipelining01)
add_subdirectory(src/08.softwarepipelining02)
add_subdirectory(src/09.reduction01)
add_subdirectory(src/10.reduction02)
add_subdirectory(src/11.elimination01)
add_subdirectory(src/12.elimination02)
add_subdirectory(src/13.loophoisting01)
add_subdirectory(src/14.loophoisting02)
add_subdirectory(src/15.meteoag01)
add_subdirectory(src/16.meteoag02)
add_subdirectory(src/17.meteoag03)
add_subdirectory(src/18.blast01)
add_subdirectory(src/19.blast02)
+4
View File
@@ -0,0 +1,4 @@
[Dolphin]
Timestamp=2016,11,17,12,54,17
Version=3
ViewMode=1
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(raincloud-01-original C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin raincloud.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+454
View File
@@ -0,0 +1,454 @@
#include "raincloud.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
#include <atomic>
std::atomic<uint64_t> iterCount = ATOMIC_VAR_INIT(0);
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->finalTars);
WFR_PORT_INIT_COLLECTION(sout->outfiles);
WFR_CHILD_OUTBUFFER_GET(a1out, DecisionNode_2_out, a1, 7, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->finalTars, a1out->LMtarsList));
}
WFR_CHILD_OUTBUFFER_GET(a2out, ParallelForEach_1_out, a2, 3, 0);
if (a2out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->outfiles, a2out->outfiles));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->finalTars.isReady() && sout->outfiles.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(prepareLMInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, prepareLM_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->FAC1, a1in->Fac1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->VAR2, a1in->Var2));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->datain, a1in->datain));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->VAR1, a1in->Var1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->topo, a1in->topo));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->NGroup, a1in->NGroup));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->FAC2, a1in->Fac2));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->topo.isReady() && sin->datain.isReady() && sin->NGroup.isReady() && sin->VAR1.isReady() && sin->FAC1.isReady() && sin->VAR2.isReady() && sin->FAC2.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(prepareLMExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, prepareLM_in);
WFR_SELF_OUTBUFFER_INIT(sout, prepareLM_out);
WFR_PORT_INIT_COLLECTION(sout->PLMlistTars);
/*boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../prepareLMDummy.sh %d", wpath.string().c_str(), sin->NGroup.getValue());
printf("%s\n", cmd);
int ret = system(cmd);
for (int t = 0; t < sin->NGroup.getValue(); t++) {
char file[1024];
snprintf(file, 1024, "%s/PLMout_g_uid%d.tar.gz", wpath.string().c_str(), t+1);
sout->PLMlistTars.setEntryValue(t, std::string(file));
}
sout->PLMlistTars.setFinalised(true);*/
for (int t = 0; t < sin->NGroup.getValue(); t++) {
sout->PLMlistTars.setEntryValue(t, std::string("file"));
}
sout->PLMlistTars.setFinalised(true);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(ParallelForEach_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, ParallelForEach_1_in);
WFR_PORT_INIT_COLLECTION(sin->PLMTars);
WFR_PRED_OUTBUFFER_GET(a1in, prepareLM_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PLMTars, a1in->PLMlistTars));
}
WFR_PARENT_INBUFFER_GET(a2in, toplevel_in, a2);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->cond_decisionPostProcessSingle, a2in->decisionPostProcessSingle));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(ParallelForEach_1OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, ParallelForEach_1_out);
WFR_PORT_INIT_COLLECTION(sout->PPSlistTars);
WFR_PORT_INIT_COLLECTION(sout->outfiles);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->PPSlistTars, DecisionNode_1_out, PPSlistTars, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, PPSlistTars);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->outfiles, linearModel_out, outfile, 4);
WFR_LOOP_FINALIZE_COLLECTION(sout, outfiles);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->PPSlistTars.isReady() && sout->outfiles.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(ParallelForEach_1CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, ParallelForEach_1_in);
if (sin != nullptr && sin->PLMTars.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->PLMTars.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(linearModelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, linearModel_in);
WFR_PARENT_INBUFFER_GET(a1in, ParallelForEach_1_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PLMTar, a1in->PLMTars.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->PLMTar.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(linearModelExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, linearModel_in);
WFR_SELF_OUTBUFFER_INIT(sout, linearModel_out);
/*boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../linearModelDummy.sh %d", wpath.string().c_str(), WFR_SELF_GETITERATIONID());
int ret = system(cmd);
char file1[1024];
snprintf(file1, 1024, "%s/LMout_g.tar.gz", wpath.string().c_str());
sout->LMTar.setValue(std::string(file1));
char file2[1024];
snprintf(file2, 1024, "%s/out.txt", wpath.string().c_str());
sout->outfile.setValue(std::string(file2));*/
iterCount.fetch_add(1);
sout->LMTar.setValue(std::string("file1"));
sout->outfile.setValue(std::string("file2"));
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(DecisionNode_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, DecisionNode_1_in);
WFR_PARENT_INBUFFER_GET(a1in, ParallelForEach_1_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->cond_decisionPostProcessSingle, a1in->cond_decisionPostProcessSingle));
}
WFR_PRED_OUTBUFFER_GET(a2in, linearModel_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->LMTar, a2in->LMTar));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(DecisionNode_1OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, DecisionNode_1_out);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, postProcessSingle_out, a1, 6, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->PPSlistTars, a1out->PPSTar));
}
} else {
WFR_SELF_INBUFFER_GET(a1in, DecisionNode_1_in);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->PPSlistTars, a1in->LMTar));
if (retval) {
instance.setInstanceStatus(wfs::ActivityInstanceStatus::Finished);
((wfs::CompositeActivityInstance&)instance).notifyChildHasFinished(instance);
}
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->PPSlistTars.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(DecisionNode_1BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, DecisionNode_1_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->cond_decisionPostProcessSingle.isReady() ) {
if ((sin->cond_decisionPostProcessSingle.getValue() == true)) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(postProcessSingleInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, postProcessSingle_in);
WFR_PARENT_INBUFFER_GET(a1in, DecisionNode_1_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->LMTar, a1in->LMTar));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->LMTar.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(postProcessSingleExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, postProcessSingle_in);
WFR_SELF_OUTBUFFER_INIT(sout, postProcessSingle_out);
/*auto lmtar = sin->LMTar.getValue();
boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../postProcessSingleDummy.sh %d", wpath.string().c_str(), WFR_SELF_GETITERATIONID());
int ret = system(cmd);
char file1[1024];
snprintf(file1, 1024, "%s/PPSout_g.tar.gz", wpath.string().c_str());
sout->finalTar.setValue(file1);*/
sout->PPSTar.setValue("file1");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(DecisionNode_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, DecisionNode_2_in);
WFR_PORT_INIT_COLLECTION(sin->PPSlistTars);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->cond_decisionPostProcessFinal, a1in->decisionPostProcessFinal));
}
WFR_PRED_OUTBUFFER_GET(a2in, ParallelForEach_1_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PPSlistTars, a2in->PPSlistTars));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(DecisionNode_2OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, DecisionNode_2_out);
WFR_PORT_INIT_COLLECTION(sout->LMtarsList);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, postProcessFinal_out, a1, 8, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->LMtarsList, a1out->finalTar, 0));
WFR_FINALIZE_COLLECTION(sout, LMtarsList);
}
} else {
WFR_SELF_INBUFFER_GET(a1in, DecisionNode_2_in);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->LMtarsList, a1in->PPSlistTars));
if (retval) {
instance.setInstanceStatus(wfs::ActivityInstanceStatus::Finished);
((wfs::CompositeActivityInstance&)instance).notifyChildHasFinished(instance);
}
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->LMtarsList.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(DecisionNode_2BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, DecisionNode_2_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->cond_decisionPostProcessFinal.isReady() ) {
if (sin->cond_decisionPostProcessFinal.getValue() == true) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(postProcessFinalInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, postProcessFinal_in);
WFR_PORT_INIT_COLLECTION(sin->PPSlistTars);
WFR_PARENT_INBUFFER_GET(a1in, DecisionNode_2_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PPSlistTars, a1in->PPSlistTars));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->PPSlistTars.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(postProcessFinalExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, postProcessFinal_in);
WFR_SELF_OUTBUFFER_INIT(sout, postProcessFinal_out);
/*boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../postProcessFinalDummy.sh", wpath.string().c_str());
int ret = system(cmd);
char file1[1024];
snprintf(file1, 1024, "%s/FINAL.tar.gz", wpath.string().c_str());
sout->finalTar.setValue(file1);*/
sout->finalTar.setValue("file1");
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( prepareLMImplementations, "prepareLMImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(prepareLMExecFunc_0, "prepareLMExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( linearModelImplementations, "linearModelImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(linearModelExecFunc_0, "linearModelExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( postProcessSingleImplementations, "postProcessSingleImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(postProcessSingleExecFunc_0, "postProcessSingleExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( postProcessFinalImplementations, "postProcessFinalImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(postProcessFinalExecFunc_0, "postProcessFinalExecFunc_0" )
);
WFR_WORKFLOW(workflow, "Raincloud", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "prepareLM", 1, 0, {3}, {}, prepareLMInputFunc, prepareLMImplementations), \
wfr::wfs::ActivityTemplate::forLoop(3, "ParallelForEach_1", 1, 0, {7}, {2}, ParallelForEach_1InputFunc, ParallelForEach_1OutputFunc, ParallelForEach_1CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(4, "linearModel", 3, 0, {5}, {}, linearModelInputFunc, linearModelImplementations), \
wfr::wfs::ActivityTemplate::conditional(5, "DecisionNode_1", 3, 0, {}, {4}, DecisionNode_1InputFunc, DecisionNode_1OutputFunc, DecisionNode_1BranchConditionFunc), \
wfr::wfs::ActivityTemplate::atomic(6, "postProcessSingle", 5, 0, {}, {}, postProcessSingleInputFunc, postProcessSingleImplementations), \
wfr::wfs::ActivityTemplate::conditional(7, "DecisionNode_2", 1, 0, {}, {3}, DecisionNode_2InputFunc, DecisionNode_2OutputFunc, DecisionNode_2BranchConditionFunc), \
wfr::wfs::ActivityTemplate::atomic(8, "postProcessFinal", 7, 0, {}, {}, postProcessFinalInputFunc, postProcessFinalImplementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
std::string var1 = "0:2500:12000";
long fac1 = 1;
std::string var2 = "250:10:310";
long fac2 = 1;
long ngroup = 8;
bool decisionPostProcessFinal = true;
bool decisionPostProcessSingle = true;
std::string topo = "input/Topography.tar.gz";
std::string datain = "input/DataIN.tar.gz";
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("var1", boost::program_options::value<std::string>(), "Var1 parameter.")
("fac1", boost::program_options::value<long>(), "Fac1 parameter.")
("var2", boost::program_options::value<std::string>(), "Var2 parameter.")
("fac2", boost::program_options::value<long>(), "Fac2 parameter.")
("ngroup", boost::program_options::value<long>(), "NGroup parameter.")
("decisionPostProcessFinal", boost::program_options::value<bool>(), "DecisionPostProcessFinal parameter.")
("decisionPostProcessSingle", boost::program_options::value<bool>(), "DecisionPostProcessSingle parameter.")
("topo", boost::program_options::value<std::string>(), "Topography file.")
("datain", boost::program_options::value<std::string>(), "DataIN file.");
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("var1")) {
var1 = vm["var1"].as<std::string>();
}
if (vm.count("fac1")) {
fac1 = vm["fac1"].as<long>();
}
if (vm.count("var2")) {
var2 = vm["var2"].as<std::string>();
}
if (vm.count("fac2")) {
fac2 = vm["fac2"].as<long>();
}
if (vm.count("ngroup")) {
ngroup = vm["ngroup"].as<long>();
}
if (vm.count("decisionPostProcessFinal")) {
decisionPostProcessFinal = vm["decisionPostProcessFinal"].as<bool>();
}
if (vm.count("decisionPostProcessSingle")) {
decisionPostProcessSingle = vm["decisionPostProcessSingle"].as<bool>();
}
if (vm.count("topo")) {
topo = vm["topo"].as<std::string>();
}
if (vm.count("datain")) {
datain = vm["datain"].as<std::string>();
}
std::cerr << "var1 = " << var1 << std::endl;
std::cerr << "fac1 = " << fac1 << std::endl;
std::cerr << "var2 = " << var2 << std::endl;
std::cerr << "fac2 = " << fac2 << std::endl;
std::cerr << "ngroup = " << ngroup << std::endl;
std::cerr << "decisionPostProcessFinal = " << decisionPostProcessFinal << std::endl;
std::cerr << "decisionPostProcessSingle = " << decisionPostProcessSingle << std::endl;
std::cerr << "topo = " << topo << std::endl;
std::cerr << "datain = " << datain << std::endl;
}
wfInput.Var1.setValue(var1);
wfInput.Fac1.setValue(fac1);
wfInput.Var2.setValue(var2);
wfInput.Fac2.setValue(fac2);
wfInput.NGroup.setValue(ngroup);
wfInput.decisionPostProcessFinal.setValue(decisionPostProcessFinal);
wfInput.decisionPostProcessSingle.setValue(decisionPostProcessSingle);
wfInput.topo.setValue(topo);
wfInput.datain.setValue(datain);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
std::cout << "IterCount = " << iterCount.load() << std::endl;
return 0;
}
+111
View File
@@ -0,0 +1,111 @@
#ifndef RAINCLOUD_H
#define RAINCLOUD_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessFinal) \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(Var1) \
WFR_PORT_MEMBER_IWIRINT(Fac1) \
WFR_PORT_MEMBER_IWIRSTRING(Var2) \
WFR_PORT_MEMBER_IWIRINT(Fac2) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(finalTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* prepareLM INSTRUCT */
WFR_PORT_STRUCT( prepareLM_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(VAR1) \
WFR_PORT_MEMBER_IWIRINT(FAC1) \
WFR_PORT_MEMBER_IWIRSTRING(VAR2) \
WFR_PORT_MEMBER_IWIRINT(FAC2) \
)
/* prepareLM OUTSTRUCT */
WFR_PORT_STRUCT( prepareLM_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelForEach_1 INSTRUCT */
WFR_PORT_STRUCT( ParallelForEach_1_in, 5, \
WFR_PORT_MEMBER_IWIRBOOL(cond_decisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelForEach_1 OUTSTRUCT */
WFR_PORT_STRUCT( ParallelForEach_1_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* linearModel INSTRUCT */
WFR_PORT_STRUCT( linearModel_in, 7, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_out, 8, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* DecisionNode_1 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_in, 9, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRBOOL(cond_decisionPostProcessSingle) \
)
/* DecisionNode_1 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_out, 10, \
WFR_PORT_MEMBER_IWIRFILE(PPSlistTars) \
)
/* postProcessSingle INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_in, 11, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_out, 12, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* DecisionNode_2 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_in, 13, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRBOOL(cond_decisionPostProcessFinal) \
)
/* DecisionNode_2 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_out, 14, \
WFR_PORT_MEMBER_IWIRCOLLECTION(LMtarsList, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal INSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_in, 15, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal OUTSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(finalTar) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(raincloud-02-loopunswitching C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin raincloud.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+546
View File
@@ -0,0 +1,546 @@
#include "raincloud.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
#include <atomic>
std::atomic<uint64_t> iterCount = ATOMIC_VAR_INIT(0);
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->finalTars);
WFR_PORT_INIT_COLLECTION(sout->outfiles);
WFR_CHILD_OUTBUFFER_GET(a1out, DecisionNode_1_out, a1, 3, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->outfiles, a1out->outfiles));
}
WFR_CHILD_OUTBUFFER_GET(a2out, DecisionNode_2_out, a2, 9, 0);
if (a2out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->finalTars, a2out->LMtarsList));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->finalTars.isReady() && sout->outfiles.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(prepareLMInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, prepareLM_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->datain, a1in->datain));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->NGroup, a1in->NGroup));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->VAR1, a1in->Var1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->FAC1, a1in->Fac1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->VAR2, a1in->Var2));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->FAC2, a1in->Fac2));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->topo, a1in->topo));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->topo.isReady() && sin->datain.isReady() && sin->NGroup.isReady() && sin->VAR1.isReady() && sin->FAC1.isReady() && sin->VAR2.isReady() && sin->FAC2.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(prepareLMExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, prepareLM_in);
WFR_SELF_OUTBUFFER_INIT(sout, prepareLM_out);
WFR_PORT_INIT_COLLECTION(sout->PLMlistTars);
/*boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../prepareLMDummy.sh %d", wpath.string().c_str(), sin->NGroup.getValue());
printf("%s\n", cmd);
int ret = system(cmd);
for (int t = 0; t < sin->NGroup.getValue(); t++) {
char file[1024];
snprintf(file, 1024, "%s/PLMout_g_uid%d.tar.gz", wpath.string().c_str(), t+1);
sout->PLMlistTars.setEntryValue(t, std::string(file));
}
sout->PLMlistTars.setFinalised(true);*/
for (int t = 0; t < sin->NGroup.getValue(); t++) {
sout->PLMlistTars.setEntryValue(t, std::string("file"));
}
sout->PLMlistTars.setFinalised(true);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(DecisionNode_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, DecisionNode_1_in);
WFR_PORT_INIT_COLLECTION(sin->PLMTars);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->condDecisionPostProcessSingle, a1in->decisionPostProcessSingle));
}
WFR_PRED_OUTBUFFER_GET(a2in, prepareLM_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PLMTars, a2in->PLMlistTars));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(DecisionNode_1OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, DecisionNode_1_out);
WFR_PORT_INIT_COLLECTION(sout->PPSlistTars);
WFR_PORT_INIT_COLLECTION(sout->outfiles);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, ParallelForEach_1_thenBranch_out, a1, 4, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->PPSlistTars, a1out->PPSlistTars));
}
} else if (WFR_SELF_GETCONDBRANCHID() == 1) {
WFR_CHILD_OUTBUFFER_GET(a1out, ParallelForEach_1_elseBranch_out, a1, 7, 1);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->PPSlistTars, a1out->PPSlistTars));
}
}
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, ParallelForEach_1_thenBranch_out, a1, 4, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->outfiles, a1out->outfiles));
}
} else if (WFR_SELF_GETCONDBRANCHID() == 1) {
WFR_CHILD_OUTBUFFER_GET(a1out, ParallelForEach_1_elseBranch_out, a1, 7, 1);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->outfiles, a1out->outfiles));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->PPSlistTars.isReady() && sout->outfiles.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(DecisionNode_1BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, DecisionNode_1_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->condDecisionPostProcessSingle.isReady() ) {
if ((sin->condDecisionPostProcessSingle.getValue() == true)) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(ParallelForEach_1_thenBranchInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, ParallelForEach_1_thenBranch_in);
WFR_PORT_INIT_COLLECTION(sin->PLMTars);
WFR_PARENT_INBUFFER_GET(a1in, DecisionNode_1_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PLMTars, a1in->PLMTars));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->condDecisionPostProcessSingle, a1in->condDecisionPostProcessSingle));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(ParallelForEach_1_thenBranchOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, ParallelForEach_1_thenBranch_out);
WFR_PORT_INIT_COLLECTION(sout->PPSlistTars);
WFR_PORT_INIT_COLLECTION(sout->outfiles);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->outfiles, linearModel_then_out, outfile, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, outfiles);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->PPSlistTars, postProcessSingle_then_out, PPSTar, 6);
WFR_LOOP_FINALIZE_COLLECTION(sout, PPSlistTars);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->PPSlistTars.isReady() && sout->outfiles.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(ParallelForEach_1_thenBranchCounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, ParallelForEach_1_thenBranch_in);
if (sin != nullptr && sin->PLMTars.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->PLMTars.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(linearModel_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, linearModel_then_in);
WFR_PARENT_INBUFFER_GET(a1in, ParallelForEach_1_thenBranch_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PLMTar, a1in->PLMTars.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->PLMTar.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(linearModel_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, linearModel_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, linearModel_then_out);
/*boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../linearModelDummy.sh %d", wpath.string().c_str(), WFR_SELF_GETITERATIONID());
int ret = system(cmd);
char file1[1024];
snprintf(file1, 1024, "%s/LMout_g.tar.gz", wpath.string().c_str());
sout->LMTar.setValue(std::string(file1));
char file2[1024];
snprintf(file2, 1024, "%s/out.txt", wpath.string().c_str());
sout->outfile.setValue(std::string(file2));*/
iterCount.fetch_add(1);
sout->LMTar.setValue(std::string("file1"));
sout->outfile.setValue(std::string("file2"));
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(postProcessSingle_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, postProcessSingle_then_in);
WFR_PRED_OUTBUFFER_GET(a1in, linearModel_then_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->LMTar, a1in->LMTar));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->LMTar.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(postProcessSingle_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, postProcessSingle_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, postProcessSingle_then_out);
/*auto lmtar = sin->LMTar.getValue();
boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../postProcessSingleDummy.sh %d", wpath.string().c_str(), WFR_SELF_GETITERATIONID());
int ret = system(cmd);
char file1[1024];
snprintf(file1, 1024, "%s/PPSout_g.tar.gz", wpath.string().c_str());
sout->finalTar.setValue(file1);*/
sout->PPSTar.setValue("file1");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(ParallelForEach_1_elseBranchInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, ParallelForEach_1_elseBranch_in);
WFR_PORT_INIT_COLLECTION(sin->PLMTars);
WFR_PARENT_INBUFFER_GET(a1in, DecisionNode_1_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PLMTars, a1in->PLMTars));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->condDecisionPostProcessSingle, a1in->condDecisionPostProcessSingle));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(ParallelForEach_1_elseBranchOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, ParallelForEach_1_elseBranch_out);
WFR_PORT_INIT_COLLECTION(sout->PPSlistTars);
WFR_PORT_INIT_COLLECTION(sout->outfiles);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->PPSlistTars, linearModel_else_out, LMTar, 8);
WFR_LOOP_FINALIZE_COLLECTION(sout, PPSlistTars);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->outfiles, linearModel_else_out, outfile, 8);
WFR_LOOP_FINALIZE_COLLECTION(sout, outfiles);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->PPSlistTars.isReady() && sout->outfiles.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(ParallelForEach_1_elseBranchCounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, ParallelForEach_1_elseBranch_in);
if (sin != nullptr && sin->PLMTars.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->PLMTars.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(linearModel_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, linearModel_else_in);
WFR_PARENT_INBUFFER_GET(a1in, ParallelForEach_1_elseBranch_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PLMTar, a1in->PLMTars.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->PLMTar.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(linearModel_elseExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, linearModel_else_in);
WFR_SELF_OUTBUFFER_INIT(sout, linearModel_else_out);
/*boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../linearModelDummy.sh %d", wpath.string().c_str(), WFR_SELF_GETITERATIONID());
int ret = system(cmd);
char file1[1024];
snprintf(file1, 1024, "%s/LMout_g.tar.gz", wpath.string().c_str());
sout->LMTar.setValue(std::string(file1));
char file2[1024];
snprintf(file2, 1024, "%s/out.txt", wpath.string().c_str());
sout->outfile.setValue(std::string(file2));*/
sout->LMTar.setValue(std::string("file1"));
sout->outfile.setValue(std::string("file2"));
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(DecisionNode_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, DecisionNode_2_in);
WFR_PORT_INIT_COLLECTION(sin->PPSlistTars);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->condDecisionPostProcessFinal, a1in->decisionPostProcessFinal));
}
WFR_PRED_OUTBUFFER_GET(a2in, DecisionNode_1_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PPSlistTars, a2in->PPSlistTars));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(DecisionNode_2OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, DecisionNode_2_out);
WFR_PORT_INIT_COLLECTION(sout->LMtarsList);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, postProcessFinal_out, a1, 10, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->LMtarsList, a1out->finalTar, 0));
WFR_FINALIZE_COLLECTION(sout, LMtarsList);
}
} else {
WFR_SELF_INBUFFER_GET(a1in, DecisionNode_2_in);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->LMtarsList, a1in->PPSlistTars));
if (retval) {
instance.setInstanceStatus(wfs::ActivityInstanceStatus::Finished);
((wfs::CompositeActivityInstance&)instance).notifyChildHasFinished(instance);
}
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->LMtarsList.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(DecisionNode_2BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, DecisionNode_2_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->condDecisionPostProcessFinal.isReady() ) {
if (sin->condDecisionPostProcessFinal.getValue() == true) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(postProcessFinalInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, postProcessFinal_in);
WFR_PORT_INIT_COLLECTION(sin->PPSlistTars);
WFR_PARENT_INBUFFER_GET(a1in, DecisionNode_2_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->PPSlistTars, a1in->PPSlistTars));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->PPSlistTars.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(postProcessFinalExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, postProcessFinal_in);
WFR_SELF_OUTBUFFER_INIT(sout, postProcessFinal_out);
/*boost::filesystem::path wpath = wfr::filesystem::createWorkingFolder(instance);
char cmd[2048];
snprintf(cmd, 2048, "cd %s && ../postProcessFinalDummy.sh", wpath.string().c_str());
int ret = system(cmd);
char file1[1024];
snprintf(file1, 1024, "%s/FINAL.tar.gz", wpath.string().c_str());
sout->finalTar.setValue(file1);*/
sout->finalTar.setValue("file1");
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( prepareLMImplementations, "prepareLMImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(prepareLMExecFunc_0, "prepareLMExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( linearModel_thenImplementations, "linearModel_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(linearModel_thenExecFunc_0, "linearModel_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( postProcessSingle_thenImplementations, "postProcessSingle_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(postProcessSingle_thenExecFunc_0, "postProcessSingle_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( linearModel_elseImplementations, "linearModel_elseImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(linearModel_elseExecFunc_0, "linearModel_elseExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( postProcessFinalImplementations, "postProcessFinalImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(postProcessFinalExecFunc_0, "postProcessFinalExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "prepareLM", 1, 0, {3}, {}, prepareLMInputFunc, prepareLMImplementations), \
wfr::wfs::ActivityTemplate::conditional(3, "DecisionNode_1", 1, 0, {9}, {2}, DecisionNode_1InputFunc, DecisionNode_1OutputFunc, DecisionNode_1BranchConditionFunc), \
wfr::wfs::ActivityTemplate::forLoop(4, "ParallelForEach_1_thenBranch", 3, 0, {}, {}, ParallelForEach_1_thenBranchInputFunc, ParallelForEach_1_thenBranchOutputFunc, ParallelForEach_1_thenBranchCounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(5, "linearModel_then", 4, 0, {6}, {}, linearModel_thenInputFunc, linearModel_thenImplementations), \
wfr::wfs::ActivityTemplate::atomic(6, "postProcessSingle_then", 4, 0, {}, {5}, postProcessSingle_thenInputFunc, postProcessSingle_thenImplementations), \
wfr::wfs::ActivityTemplate::forLoop(7, "ParallelForEach_1_elseBranch", 3, 1, {}, {}, ParallelForEach_1_elseBranchInputFunc, ParallelForEach_1_elseBranchOutputFunc, ParallelForEach_1_elseBranchCounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(8, "linearModel_else", 7, 0, {}, {}, linearModel_elseInputFunc, linearModel_elseImplementations), \
wfr::wfs::ActivityTemplate::conditional(9, "DecisionNode_2", 1, 0, {}, {3}, DecisionNode_2InputFunc, DecisionNode_2OutputFunc, DecisionNode_2BranchConditionFunc), \
wfr::wfs::ActivityTemplate::atomic(10, "postProcessFinal", 9, 0, {}, {}, postProcessFinalInputFunc, postProcessFinalImplementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
std::string var1 = "0:2500:12000";
long fac1 = 1;
std::string var2 = "250:10:310";
long fac2 = 1;
long ngroup = 8;
bool decisionPostProcessFinal = true;
bool decisionPostProcessSingle = true;
std::string topo = "input/Topography.tar.gz";
std::string datain = "input/DataIN.tar.gz";
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("var1", boost::program_options::value<std::string>(), "Var1 parameter.")
("fac1", boost::program_options::value<long>(), "Fac1 parameter.")
("var2", boost::program_options::value<std::string>(), "Var2 parameter.")
("fac2", boost::program_options::value<long>(), "Fac2 parameter.")
("ngroup", boost::program_options::value<long>(), "NGroup parameter.")
("decisionPostProcessFinal", boost::program_options::value<bool>(), "DecisionPostProcessFinal parameter.")
("decisionPostProcessSingle", boost::program_options::value<bool>(), "DecisionPostProcessSingle parameter.")
("topo", boost::program_options::value<std::string>(), "Topography file.")
("datain", boost::program_options::value<std::string>(), "DataIN file.");
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("var1")) {
var1 = vm["var1"].as<std::string>();
}
if (vm.count("fac1")) {
fac1 = vm["fac1"].as<long>();
}
if (vm.count("var2")) {
var2 = vm["var2"].as<std::string>();
}
if (vm.count("fac2")) {
fac2 = vm["fac2"].as<long>();
}
if (vm.count("ngroup")) {
ngroup = vm["ngroup"].as<long>();
}
if (vm.count("decisionPostProcessFinal")) {
decisionPostProcessFinal = vm["decisionPostProcessFinal"].as<bool>();
}
if (vm.count("decisionPostProcessSingle")) {
decisionPostProcessSingle = vm["decisionPostProcessSingle"].as<bool>();
}
if (vm.count("topo")) {
topo = vm["topo"].as<std::string>();
}
if (vm.count("datain")) {
datain = vm["datain"].as<std::string>();
}
std::cerr << "var1 = " << var1 << std::endl;
std::cerr << "fac1 = " << fac1 << std::endl;
std::cerr << "var2 = " << var2 << std::endl;
std::cerr << "fac2 = " << fac2 << std::endl;
std::cerr << "ngroup = " << ngroup << std::endl;
std::cerr << "decisionPostProcessFinal = " << decisionPostProcessFinal << std::endl;
std::cerr << "decisionPostProcessSingle = " << decisionPostProcessSingle << std::endl;
std::cerr << "topo = " << topo << std::endl;
std::cerr << "datain = " << datain << std::endl;
}
wfInput.Var1.setValue(var1);
wfInput.Fac1.setValue(fac1);
wfInput.Var2.setValue(var2);
wfInput.Fac2.setValue(fac2);
wfInput.NGroup.setValue(ngroup);
wfInput.decisionPostProcessFinal.setValue(decisionPostProcessFinal);
wfInput.decisionPostProcessSingle.setValue(decisionPostProcessSingle);
wfInput.topo.setValue(topo);
wfInput.datain.setValue(datain);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
std::cout << "IterCount = " << iterCount.load() << std::endl;
return 0;
}
+135
View File
@@ -0,0 +1,135 @@
#ifndef RAINCLOUD_TRANSFORMED_H
#define RAINCLOUD_TRANSFORMED_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessFinal) \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(Var1) \
WFR_PORT_MEMBER_IWIRINT(Fac1) \
WFR_PORT_MEMBER_IWIRSTRING(Var2) \
WFR_PORT_MEMBER_IWIRINT(Fac2) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(finalTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* prepareLM INSTRUCT */
WFR_PORT_STRUCT( prepareLM_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(VAR1) \
WFR_PORT_MEMBER_IWIRINT(FAC1) \
WFR_PORT_MEMBER_IWIRSTRING(VAR2) \
WFR_PORT_MEMBER_IWIRINT(FAC2) \
)
/* prepareLM OUTSTRUCT */
WFR_PORT_STRUCT( prepareLM_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* DecisionNode_1 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_in, 5, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* DecisionNode_1 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelForEach_1_thenBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelForEach_1_thenBranch_in, 7, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelForEach_1_thenBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelForEach_1_thenBranch_out, 8, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* linearModel_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_then_in, 9, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_then_out, 10, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* postProcessSingle_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_then_in, 11, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_then_out, 12, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* ParallelForEach_1_elseBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelForEach_1_elseBranch_in, 13, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelForEach_1_elseBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelForEach_1_elseBranch_out, 14, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* linearModel_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_else_in, 15, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_else_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* DecisionNode_2 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_in, 17, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessFinal) \
)
/* DecisionNode_2 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_out, 18, \
WFR_PORT_MEMBER_IWIRCOLLECTION(LMtarsList, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal INSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_in, 19, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal OUTSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_out, 20, \
WFR_PORT_MEMBER_IWIRFILE(finalTar) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TRANSFORMED_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(raincloud-03-loopunrolling C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin raincloud.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
File diff suppressed because it is too large Load Diff
+615
View File
@@ -0,0 +1,615 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
typedef wfr::lwd::iwir_collection<wfr::lwd::_lwd_iwir_basetype_file, 1>* filecollref;
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessFinal) \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(Var1) \
WFR_PORT_MEMBER_IWIRINT(Fac1) \
WFR_PORT_MEMBER_IWIRSTRING(Var2) \
WFR_PORT_MEMBER_IWIRINT(Fac2) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(finalTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* prepareLM INSTRUCT */
WFR_PORT_STRUCT( prepareLM_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(VAR1) \
WFR_PORT_MEMBER_IWIRINT(FAC1) \
WFR_PORT_MEMBER_IWIRSTRING(VAR2) \
WFR_PORT_MEMBER_IWIRINT(FAC2) \
)
/* prepareLM OUTSTRUCT */
WFR_PORT_STRUCT( prepareLM_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* helper02 INSTRUCT */
WFR_PORT_STRUCT( helper02_in, 5, \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
)
/* helper02 OUTSTRUCT */
WFR_PORT_STRUCT( helper02_out, 6, \
WFR_PORT_MEMBER_IWIRINT(NewNGroup) \
)
/* DecisionNode_1 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_in, 7, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER(PLMTars, filecollref) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
)
/* DecisionNode_1 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_out, 8, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelFor_1_thenBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_thenBranch_in, 9, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER(PLMTars, filecollref) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* ParallelFor_1_thenBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_thenBranch_out, 10, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* helper03_then INSTRUCT */
WFR_PORT_STRUCT( helper03_then_in, 11, \
WFR_PORT_MEMBER(PLMTars, filecollref) \
WFR_PORT_MEMBER_IWIRINT(index) \
)
/* helper03_then OUTSTRUCT */
WFR_PORT_STRUCT( helper03_then_out, 12, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar0) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar1) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar2) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar3) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar4) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar5) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar6) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar7) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar8) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar9) \
)
/* linearModel_0_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_0_then_in, 13, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_0_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_0_then_out, 14, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_1_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_1_then_in, 15, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_1_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_1_then_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_2_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_2_then_in, 17, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_2_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_2_then_out, 18, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_3_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_3_then_in, 19, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_3_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_3_then_out, 20, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_4_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_4_then_in, 21, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_4_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_4_then_out, 22, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_5_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_5_then_in, 23, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_5_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_5_then_out, 24, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_6_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_6_then_in, 25, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_6_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_6_then_out, 26, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_7_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_7_then_in, 27, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_7_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_7_then_out, 28, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_8_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_8_then_in, 29, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_8_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_8_then_out, 30, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_9_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_9_then_in, 31, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_9_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_9_then_out, 32, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* postProcessSingle_0_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_then_in, 33, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_0_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_then_out, 34, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_1_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_then_in, 35, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_1_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_then_out, 36, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_2_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_then_in, 37, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_2_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_then_out, 38, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_3_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_then_in, 39, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_3_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_then_out, 40, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_4_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_then_in, 41, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_4_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_then_out, 42, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_5_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_then_in, 43, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_5_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_then_out, 44, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_6_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_then_in, 45, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_6_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_then_out, 46, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_7_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_then_in, 47, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_7_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_then_out, 48, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_8_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_then_in, 49, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_8_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_then_out, 50, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_9_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_then_in, 51, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_9_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_then_out, 52, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* helper04_then INSTRUCT */
WFR_PORT_STRUCT( helper04_then_in, 53, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar0) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar1) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar2) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar3) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar4) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar5) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar6) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar7) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar8) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar9) \
)
/* helper04_then OUTSTRUCT */
WFR_PORT_STRUCT( helper04_then_out, 54, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelFor_1_elseBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_elseBranch_in, 55, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER(PLMTars, filecollref) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* ParallelFor_1_elseBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_elseBranch_out, 56, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* helper03_else INSTRUCT */
WFR_PORT_STRUCT( helper03_else_in, 57, \
WFR_PORT_MEMBER(PLMTars, filecollref) \
WFR_PORT_MEMBER_IWIRINT(index) \
)
/* helper03_else OUTSTRUCT */
WFR_PORT_STRUCT( helper03_else_out, 58, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar0) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar1) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar2) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar3) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar4) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar5) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar6) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar7) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar8) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar9) \
)
/* linearModel_0_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_0_else_in, 59, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_0_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_0_else_out, 60, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_1_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_1_else_in, 61, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_1_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_1_else_out, 62, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_2_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_2_else_in, 63, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_2_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_2_else_out, 64, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_3_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_3_else_in, 65, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_3_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_3_else_out, 66, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_4_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_4_else_in, 67, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_4_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_4_else_out, 68, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_5_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_5_else_in, 69, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_5_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_5_else_out, 70, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_6_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_6_else_in, 71, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_6_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_6_else_out, 72, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_7_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_7_else_in, 73, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_7_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_7_else_out, 74, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_8_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_8_else_in, 75, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_8_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_8_else_out, 76, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_9_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_9_else_in, 77, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_9_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_9_else_out, 78, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* postProcessSingle_0_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_else_in, 79, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_0_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_else_out, 80, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_1_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_else_in, 81, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_1_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_else_out, 82, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_2_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_else_in, 83, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_2_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_else_out, 84, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_3_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_else_in, 85, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_3_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_else_out, 86, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_4_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_else_in, 87, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_4_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_else_out, 88, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_5_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_else_in, 89, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_5_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_else_out, 90, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_6_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_else_in, 91, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_6_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_else_out, 92, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_7_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_else_in, 93, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_7_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_else_out, 94, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_8_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_else_in, 95, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_8_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_else_out, 96, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_9_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_else_in, 97, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_9_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_else_out, 98, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* helper04_else INSTRUCT */
WFR_PORT_STRUCT( helper04_else_in, 99, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar0) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar1) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar2) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar3) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar4) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar5) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar6) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar7) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar8) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar9) \
)
/* helper04_else OUTSTRUCT */
WFR_PORT_STRUCT( helper04_else_out, 100, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* DecisionNode_2 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_in, 101, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessFinal) \
)
/* DecisionNode_2 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_out, 102, \
WFR_PORT_MEMBER_IWIRCOLLECTION(LMtarsList, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal INSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_in, 103, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal OUTSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_out, 104, \
WFR_PORT_MEMBER_IWIRFILE(finalTar) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(raincloud-04-loopnesting C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin raincloud.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
File diff suppressed because it is too large Load Diff
+648
View File
@@ -0,0 +1,648 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRBOOL(decisionPostProcessFinal) \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(Var1) \
WFR_PORT_MEMBER_IWIRINT(Fac1) \
WFR_PORT_MEMBER_IWIRSTRING(Var2) \
WFR_PORT_MEMBER_IWIRINT(Fac2) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(finalTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* prepareLM INSTRUCT */
WFR_PORT_STRUCT( prepareLM_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(topo) \
WFR_PORT_MEMBER_IWIRFILE(datain) \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
WFR_PORT_MEMBER_IWIRSTRING(VAR1) \
WFR_PORT_MEMBER_IWIRINT(FAC1) \
WFR_PORT_MEMBER_IWIRSTRING(VAR2) \
WFR_PORT_MEMBER_IWIRINT(FAC2) \
)
/* prepareLM OUTSTRUCT */
WFR_PORT_STRUCT( prepareLM_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* helper05 INSTRUCT */
WFR_PORT_STRUCT( helper05_in, 5, \
WFR_PORT_MEMBER_IWIRINT(NGroup) \
)
/* helper05 OUTSTRUCT */
WFR_PORT_STRUCT( helper05_out, 6, \
WFR_PORT_MEMBER_IWIRINT(outerLoopIterCount) \
WFR_PORT_MEMBER_IWIRINT(innerLoopIterCount) \
)
/* DecisionNode_1 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_in, 7, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(outerLoopIterCount) \
WFR_PORT_MEMBER_IWIRINT(innerLoopIterCount) \
)
/* DecisionNode_1 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_1_out, 8, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelFor_1_thenBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_thenBranch_in, 9, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(innerLoopIterCount) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* ParallelFor_1_thenBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_thenBranch_out, 10, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelFor_2_thenBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelFor_2_thenBranch_in, 11, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(parentLoopCounter) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* ParallelFor_2_thenBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelFor_2_thenBranch_out, 12, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* helper06_then INSTRUCT */
WFR_PORT_STRUCT( helper06_then_in, 13, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(index1) \
WFR_PORT_MEMBER_IWIRINT(index2) \
)
/* helper06_then OUTSTRUCT */
WFR_PORT_STRUCT( helper06_then_out, 14, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar0) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar1) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar2) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar3) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar4) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar5) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar6) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar7) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar8) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar9) \
)
/* linearModel_0_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_0_then_in, 15, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_0_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_0_then_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_1_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_1_then_in, 17, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_1_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_1_then_out, 18, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_2_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_2_then_in, 19, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_2_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_2_then_out, 20, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_3_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_3_then_in, 21, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_3_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_3_then_out, 22, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_4_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_4_then_in, 23, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_4_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_4_then_out, 24, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_5_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_5_then_in, 25, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_5_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_5_then_out, 26, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_6_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_6_then_in, 27, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_6_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_6_then_out, 28, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_7_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_7_then_in, 29, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_7_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_7_then_out, 30, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_8_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_8_then_in, 31, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_8_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_8_then_out, 32, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_9_then INSTRUCT */
WFR_PORT_STRUCT( linearModel_9_then_in, 33, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_9_then OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_9_then_out, 34, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* postProcessSingle_0_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_then_in, 35, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_0_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_then_out, 36, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_1_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_then_in, 37, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_1_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_then_out, 38, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_2_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_then_in, 39, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_2_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_then_out, 40, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_3_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_then_in, 41, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_3_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_then_out, 42, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_4_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_then_in, 43, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_4_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_then_out, 44, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_5_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_then_in, 45, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_5_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_then_out, 46, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_6_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_then_in, 47, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_6_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_then_out, 48, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_7_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_then_in, 49, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_7_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_then_out, 50, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_8_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_then_in, 51, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_8_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_then_out, 52, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_9_then INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_then_in, 53, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_9_then OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_then_out, 54, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* helper04_then INSTRUCT */
WFR_PORT_STRUCT( helper04_then_in, 55, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar0) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar1) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar2) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar3) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar4) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar5) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar6) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar7) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar8) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar9) \
)
/* helper04_then OUTSTRUCT */
WFR_PORT_STRUCT( helper04_then_out, 56, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelFor_1_elseBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_elseBranch_in, 57, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(innerLoopIterCount) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* ParallelFor_1_elseBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelFor_1_elseBranch_out, 58, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* ParallelFor_2_elseBranch INSTRUCT */
WFR_PORT_STRUCT( ParallelFor_2_elseBranch_in, 59, \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessSingle) \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(parentLoopCounter) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* ParallelFor_2_elseBranch OUTSTRUCT */
WFR_PORT_STRUCT( ParallelFor_2_elseBranch_out, 60, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(outfiles, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* helper06_else INSTRUCT */
WFR_PORT_STRUCT( helper06_else_in, 61, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PLMTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(index1) \
WFR_PORT_MEMBER_IWIRINT(index2) \
)
/* helper06_else OUTSTRUCT */
WFR_PORT_STRUCT( helper06_else_out, 62, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar0) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar1) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar2) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar3) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar4) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar5) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar6) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar7) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar8) \
WFR_PORT_MEMBER_IWIRFILE(PLMTar9) \
)
/* linearModel_0_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_0_else_in, 63, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_0_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_0_else_out, 64, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_1_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_1_else_in, 65, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_1_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_1_else_out, 66, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_2_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_2_else_in, 67, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_2_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_2_else_out, 68, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_3_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_3_else_in, 69, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_3_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_3_else_out, 70, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_4_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_4_else_in, 71, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_4_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_4_else_out, 72, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_5_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_5_else_in, 73, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_5_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_5_else_out, 74, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_6_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_6_else_in, 75, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_6_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_6_else_out, 76, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_7_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_7_else_in, 77, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_7_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_7_else_out, 78, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_8_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_8_else_in, 79, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_8_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_8_else_out, 80, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* linearModel_9_else INSTRUCT */
WFR_PORT_STRUCT( linearModel_9_else_in, 81, \
WFR_PORT_MEMBER_IWIRFILE(PLMTar) \
)
/* linearModel_9_else OUTSTRUCT */
WFR_PORT_STRUCT( linearModel_9_else_out, 82, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
WFR_PORT_MEMBER_IWIRFILE(outfile) \
)
/* postProcessSingle_0_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_else_in, 83, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_0_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_0_else_out, 84, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_1_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_else_in, 85, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_1_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_1_else_out, 86, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_2_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_else_in, 87, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_2_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_2_else_out, 88, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_3_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_else_in, 89, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_3_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_3_else_out, 90, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_4_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_else_in, 91, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_4_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_4_else_out, 92, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_5_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_else_in, 93, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_5_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_5_else_out, 94, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_6_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_else_in, 95, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_6_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_6_else_out, 96, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_7_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_else_in, 97, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_7_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_7_else_out, 98, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_8_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_else_in, 99, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_8_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_8_else_out, 100, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* postProcessSingle_9_else INSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_else_in, 101, \
WFR_PORT_MEMBER_IWIRFILE(LMTar) \
)
/* postProcessSingle_9_else OUTSTRUCT */
WFR_PORT_STRUCT( postProcessSingle_9_else_out, 102, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar) \
)
/* helper04_else INSTRUCT */
WFR_PORT_STRUCT( helper04_else_in, 103, \
WFR_PORT_MEMBER_IWIRFILE(PPSTar0) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar1) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar2) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar3) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar4) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar5) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar6) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar7) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar8) \
WFR_PORT_MEMBER_IWIRFILE(PPSTar9) \
)
/* helper04_else OUTSTRUCT */
WFR_PORT_STRUCT( helper04_else_out, 104, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* DecisionNode_2 INSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_in, 105, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRBOOL(condDecisionPostProcessFinal) \
)
/* DecisionNode_2 OUTSTRUCT */
WFR_PORT_STRUCT( DecisionNode_2_out, 106, \
WFR_PORT_MEMBER_IWIRCOLLECTION(LMtarsList, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal INSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_in, 107, \
WFR_PORT_MEMBER_IWIRCOLLECTION(PPSlistTars, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* postProcessFinal OUTSTRUCT */
WFR_PORT_STRUCT( postProcessFinal_out, 108, \
WFR_PORT_MEMBER_IWIRFILE(finalTar) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(ifoptimization-original C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin ifoptimization.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+324
View File
@@ -0,0 +1,324 @@
#include "ifoptimization.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 2, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_CHILD_OUTBUFFER_GET(a1out, if02_out, a1, 6, WFR_SELF_GETHANDLEDITERATIONCOUNT()-1);
if (a1out != nullptr) {
if (WFR_SELF_GETITERATIONCOUNT() <= WFR_SELF_GETHANDLEDITERATIONCOUNT()) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_LOOPITERATION_HOOK(for01IterationFunc) {
WFR_LOOPITERATION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
WFR_LOOPITERATION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(if01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, if01_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->loopCounter);
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(if01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, if01_out);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_1_out, a1, 4, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
} else if (WFR_SELF_GETCONDBRANCHID() == 1) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_2_out, a1, 5, 1);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(if01BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, if01_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->loopCounter.isReady() ) {
if (sin->loopCounter.getValue() > 0) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_1_in);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_1ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_1_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_1_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_2_in);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_2_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_2_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(if02InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, if02_in);
WFR_PRED_OUTBUFFER_GET(a1in, if01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->output));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(if02OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, if02_out);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_3_out, a1, 7, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
} else if (WFR_SELF_GETCONDBRANCHID() == 1) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_4_out, a1, 8, 1);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(if02BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, if02_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->loopCounter.isReady() ) {
if (sin->loopCounter.getValue() > 0) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_3InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_3_in);
WFR_PARENT_INBUFFER_GET(a1in, if02_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_3ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_3_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_3_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_4InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_4_in);
WFR_PARENT_INBUFFER_GET(a1in, if02_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_4ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_4_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_4_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01_1Implementations, "task01_1Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_1ExecFunc_0, "task01_1ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_2Implementations, "task01_2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_2ExecFunc_0, "task01_2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_3Implementations, "task01_3Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_3ExecFunc_0, "task01_3ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_4Implementations, "task01_4Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_4ExecFunc_0, "task01_4ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::forLoop(2, "for01", 1, 0, {}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, for01IterationFunc, false), \
wfr::wfs::ActivityTemplate::conditional(3, "if01", 2, 0, {6}, {}, if01InputFunc, if01OutputFunc, if01BranchConditionFunc), \
wfr::wfs::ActivityTemplate::atomic(4, "task01_1", 3, 0, {}, {}, task01_1InputFunc, task01_1Implementations), \
wfr::wfs::ActivityTemplate::atomic(5, "task01_2", 3, 1, {}, {}, task01_2InputFunc, task01_2Implementations), \
wfr::wfs::ActivityTemplate::conditional(6, "if02", 2, 0, {}, {3}, if02InputFunc, if02OutputFunc, if02BranchConditionFunc), \
wfr::wfs::ActivityTemplate::atomic(7, "task01_3", 6, 0, {}, {}, task01_3InputFunc, task01_3Implementations), \
wfr::wfs::ActivityTemplate::atomic(8, "task01_4", 6, 1, {}, {}, task01_4InputFunc, task01_4Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+91
View File
@@ -0,0 +1,91 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 4, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* if01 INSTRUCT */
WFR_PORT_STRUCT( if01_in, 5, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* if01 OUTSTRUCT */
WFR_PORT_STRUCT( if01_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_1 INSTRUCT */
WFR_PORT_STRUCT( task01_1_in, 7, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_1 OUTSTRUCT */
WFR_PORT_STRUCT( task01_1_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_2 INSTRUCT */
WFR_PORT_STRUCT( task01_2_in, 9, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_2 OUTSTRUCT */
WFR_PORT_STRUCT( task01_2_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* if02 INSTRUCT */
WFR_PORT_STRUCT( if02_in, 11, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* if02 OUTSTRUCT */
WFR_PORT_STRUCT( if02_out, 12, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_3 INSTRUCT */
WFR_PORT_STRUCT( task01_3_in, 13, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_3 OUTSTRUCT */
WFR_PORT_STRUCT( task01_3_out, 14, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_4 INSTRUCT */
WFR_PORT_STRUCT( task01_4_in, 15, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_4 OUTSTRUCT */
WFR_PORT_STRUCT( task01_4_out, 16, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(ifoptimization-transformed C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin ifoptimization.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+290
View File
@@ -0,0 +1,290 @@
#include "ifoptimization.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 2, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_CHILD_OUTBUFFER_GET(a1out, if01_out, a1, 3, WFR_SELF_GETHANDLEDITERATIONCOUNT()-1);
if (a1out != nullptr) {
if (WFR_SELF_GETITERATIONCOUNT() <= WFR_SELF_GETHANDLEDITERATIONCOUNT()) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_LOOPITERATION_HOOK(for01IterationFunc) {
WFR_LOOPITERATION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
WFR_LOOPITERATION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(if01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, if01_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->loopCounter);
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(if01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, if01_out);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_1_out, a1, 4, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
} else if (WFR_SELF_GETCONDBRANCHID() == 1) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_2_out, a1, 6, 1);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
}
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_3_out, a1, 5, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output2, a1out->output));
}
} else if (WFR_SELF_GETCONDBRANCHID() == 1) {
WFR_CHILD_OUTBUFFER_GET(a1out, task01_4_out, a1, 7, 1);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output2, a1out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady() && sout->output2.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(if01BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, if01_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->loopCounter.isReady() ) {
if (sin->loopCounter.getValue() > 0) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_1_in);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_1ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_1_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_1_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_3InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_3_in);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_3ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_3_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_3_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_2_in);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_2_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_2_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_4InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_4_in);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->loopCounter));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_4ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_4_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_4_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01_1Implementations, "task01_1Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_1ExecFunc_0, "task01_1ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_3Implementations, "task01_3Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_3ExecFunc_0, "task01_3ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_2Implementations, "task01_2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_2ExecFunc_0, "task01_2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_4Implementations, "task01_4Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_4ExecFunc_0, "task01_4ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::forLoop(2, "for01", 1, 0, {}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, for01IterationFunc, false), \
wfr::wfs::ActivityTemplate::conditional(3, "if01", 2, 0, {}, {}, if01InputFunc, if01OutputFunc, if01BranchConditionFunc), \
wfr::wfs::ActivityTemplate::atomic(4, "task01_1", 3, 0, {}, {}, task01_1InputFunc, task01_1Implementations), \
wfr::wfs::ActivityTemplate::atomic(5, "task01_3", 3, 0, {}, {}, task01_3InputFunc, task01_3Implementations), \
wfr::wfs::ActivityTemplate::atomic(6, "task01_2", 3, 1, {}, {}, task01_2InputFunc, task01_2Implementations), \
wfr::wfs::ActivityTemplate::atomic(7, "task01_4", 3, 1, {}, {}, task01_4InputFunc, task01_4Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+82
View File
@@ -0,0 +1,82 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 4, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* if01 INSTRUCT */
WFR_PORT_STRUCT( if01_in, 5, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* if01 OUTSTRUCT */
WFR_PORT_STRUCT( if01_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
WFR_PORT_MEMBER_IWIRINT(output2) \
)
/* task01_1 INSTRUCT */
WFR_PORT_STRUCT( task01_1_in, 7, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_1 OUTSTRUCT */
WFR_PORT_STRUCT( task01_1_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_3 INSTRUCT */
WFR_PORT_STRUCT( task01_3_in, 9, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_3 OUTSTRUCT */
WFR_PORT_STRUCT( task01_3_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_2 INSTRUCT */
WFR_PORT_STRUCT( task01_2_in, 11, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_2 OUTSTRUCT */
WFR_PORT_STRUCT( task01_2_out, 12, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_4 INSTRUCT */
WFR_PORT_STRUCT( task01_4_in, 13, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_4 OUTSTRUCT */
WFR_PORT_STRUCT( task01_4_out, 14, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(pipelining-original C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin pipelining.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+208
View File
@@ -0,0 +1,208 @@
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
#include "pipelining.h"
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 2, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_CHILD_OUTBUFFER_GET(a1out, task01_3_out, a1, 5, WFR_SELF_GETHANDLEDITERATIONCOUNT()-1);
if (a1out != nullptr) {
if (WFR_SELF_GETITERATIONCOUNT() <= WFR_SELF_GETHANDLEDITERATIONCOUNT()) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_LOOPITERATION_HOOK(for01IterationFunc) {
WFR_LOOPITERATION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
WFR_LOOPITERATION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_1_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->loopCounter);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION2(sin->loopCounter.isReady(), WFR_PARENT_ISPREVITERFINISHED());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_1ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_1_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_1_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_2_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_1_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION2(sin->loopCounter.isReady(), WFR_PARENT_ISPREVITERFINISHED());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_2_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_2_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_3InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_3_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_2_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION2(sin->loopCounter.isReady(), WFR_PARENT_ISPREVITERFINISHED());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_3ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_3_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_3_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01_1Implementations, "task01_1Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_1ExecFunc_0, "task01_1ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_2Implementations, "task01_2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_2ExecFunc_0, "task01_2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_3Implementations, "task01_3Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_3ExecFunc_0, "task01_3ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::forLoop(2, "for01", 1, 0, {}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, for01IterationFunc, false), \
wfr::wfs::ActivityTemplate::atomic(3, "task01_1", 2, 0, {4}, {}, task01_1InputFunc, task01_1Implementations), \
wfr::wfs::ActivityTemplate::atomic(4, "task01_2", 2, 0, {5}, {3}, task01_2InputFunc, task01_2Implementations), \
wfr::wfs::ActivityTemplate::atomic(5, "task01_3", 2, 0, {}, {4}, task01_3InputFunc, task01_3Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+61
View File
@@ -0,0 +1,61 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 4, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_1 INSTRUCT */
WFR_PORT_STRUCT( task01_1_in, 5, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_1 OUTSTRUCT */
WFR_PORT_STRUCT( task01_1_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_2 INSTRUCT */
WFR_PORT_STRUCT( task01_2_in, 7, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_2 OUTSTRUCT */
WFR_PORT_STRUCT( task01_2_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_3 INSTRUCT */
WFR_PORT_STRUCT( task01_3_in, 9, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_3 OUTSTRUCT */
WFR_PORT_STRUCT( task01_3_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(pipelining-transformed C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin pipelining.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+319
View File
@@ -0,0 +1,319 @@
#include "pipelining.h"
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 5, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output1, a1out->output1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output2, a1out->output2));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output3, a1out->output3));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady() && sout->output3.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_1_iInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_1_i_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->iterCount));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_1_iExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_1_i_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_1_i_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_1_i1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_1_i1_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_1_i_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_1_i1ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_1_i1_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_1_i1_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_2_iInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_2_i_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_1_i_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_2_iExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_2_i_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_2_i_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_1_i1_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input1, a1in->output));
}
WFR_PARENT_INBUFFER_GET(a2in, toplevel_in, a2);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a2in->iterCount));
}
WFR_PRED_OUTBUFFER_GET(a3in, task01_2_i_out, a3, 1);
if (a3in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input2, a3in->output));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_CHILD_OUTBUFFER_GET(a1out, task01_1_i2_out, a1, 6, WFR_SELF_GETHANDLEDITERATIONCOUNT()-1);
if (a1out != nullptr) {
if (WFR_SELF_GETITERATIONCOUNT() <= WFR_SELF_GETHANDLEDITERATIONCOUNT()) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output1, a1out->output));
}
}
WFR_CHILD_OUTBUFFER_GET(a2out, task01_2_i1_out, a2, 7, WFR_SELF_GETHANDLEDITERATIONCOUNT()-1);
if (a2out != nullptr) {
if (WFR_SELF_GETITERATIONCOUNT() <= WFR_SELF_GETHANDLEDITERATIONCOUNT()) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output2, a2out->output));
}
}
WFR_CHILD_OUTBUFFER_GET(a3out, task01_3_i_out, a3, 8, WFR_SELF_GETHANDLEDITERATIONCOUNT()-1);
if (a3out != nullptr) {
if (WFR_SELF_GETITERATIONCOUNT() <= WFR_SELF_GETHANDLEDITERATIONCOUNT()) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output3, a3out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady() && sout->output3.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_LOOPITERATION_HOOK(for01IterationFunc) {
WFR_LOOPITERATION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
WFR_LOOPITERATION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_1_i2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_1_i2_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->input1));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION2(sin->loopCounter.isReady(), WFR_PARENT_ISPREVITERFINISHED());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_1_i2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_1_i2_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_1_i2_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_2_i1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_2_i1_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->input1));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION2(sin->loopCounter.isReady(), WFR_PARENT_ISPREVITERFINISHED());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_2_i1ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_2_i1_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_2_i1_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01_3_iInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_3_i_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter, a1in->input2));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION2(sin->loopCounter.isReady(), WFR_PARENT_ISPREVITERFINISHED());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01_3_iExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_3_i_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_3_i_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01_1_iImplementations, "task01_1_iImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_1_iExecFunc_0, "task01_1_iExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_1_i1Implementations, "task01_1_i1Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_1_i1ExecFunc_0, "task01_1_i1ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_2_iImplementations, "task01_2_iImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_2_iExecFunc_0, "task01_2_iExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_1_i2Implementations, "task01_1_i2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_1_i2ExecFunc_0, "task01_1_i2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_2_i1Implementations, "task01_2_i1Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_2_i1ExecFunc_0, "task01_2_i1ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task01_3_iImplementations, "task01_3_iImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01_3_iExecFunc_0, "task01_3_iExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "task01_1_i", 1, 0, {3, 4}, {}, task01_1_iInputFunc, task01_1_iImplementations), \
wfr::wfs::ActivityTemplate::atomic(3, "task01_1_i1", 1, 0, {5}, {2}, task01_1_i1InputFunc, task01_1_i1Implementations), \
wfr::wfs::ActivityTemplate::atomic(4, "task01_2_i", 1, 0, {5}, {2}, task01_2_iInputFunc, task01_2_iImplementations), \
wfr::wfs::ActivityTemplate::forLoop(5, "for01", 1, 0, {}, {3, 4}, for01InputFunc, for01OutputFunc, for01CounterFunc, for01IterationFunc, false), \
wfr::wfs::ActivityTemplate::atomic(6, "task01_1_i2", 5, 0, {}, {}, task01_1_i2InputFunc, task01_1_i2Implementations), \
wfr::wfs::ActivityTemplate::atomic(7, "task01_2_i1", 5, 0, {}, {}, task01_2_i1InputFunc, task01_2_i1Implementations), \
wfr::wfs::ActivityTemplate::atomic(8, "task01_3_i", 5, 0, {}, {}, task01_3_iInputFunc, task01_3_iImplementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+97
View File
@@ -0,0 +1,97 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRINT(output1) \
WFR_PORT_MEMBER_IWIRINT(output2) \
WFR_PORT_MEMBER_IWIRINT(output3) \
)
/* task01_1_i INSTRUCT */
WFR_PORT_STRUCT( task01_1_i_in, 3, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_1_i OUTSTRUCT */
WFR_PORT_STRUCT( task01_1_i_out, 4, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_1_i1 INSTRUCT */
WFR_PORT_STRUCT( task01_1_i1_in, 5, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_1_i1 OUTSTRUCT */
WFR_PORT_STRUCT( task01_1_i1_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_2_i INSTRUCT */
WFR_PORT_STRUCT( task01_2_i_in, 7, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_2_i OUTSTRUCT */
WFR_PORT_STRUCT( task01_2_i_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 9, \
WFR_PORT_MEMBER_IWIRINT(input1) \
WFR_PORT_MEMBER_IWIRINT(input2) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output1) \
WFR_PORT_MEMBER_IWIRINT(output2) \
WFR_PORT_MEMBER_IWIRINT(output3) \
)
/* task01_1_i2 INSTRUCT */
WFR_PORT_STRUCT( task01_1_i2_in, 11, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_1_i2 OUTSTRUCT */
WFR_PORT_STRUCT( task01_1_i2_out, 12, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_2_i1 INSTRUCT */
WFR_PORT_STRUCT( task01_2_i1_in, 13, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_2_i1 OUTSTRUCT */
WFR_PORT_STRUCT( task01_2_i1_out, 14, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task01_3_i INSTRUCT */
WFR_PORT_STRUCT( task01_3_i_in, 15, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01_3_i OUTSTRUCT */
WFR_PORT_STRUCT( task01_3_i_out, 16, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(reduction-original C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin reduction.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+176
View File
@@ -0,0 +1,176 @@
#include "reduction.h"
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, reduce01_out, a1, 4, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, task01_out, output, 3);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->loopCounter);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(reduce01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, reduce01_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, for01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(reduce01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, reduce01_in);
WFR_SELF_OUTBUFFER_INIT(sout, reduce01_out);
long r = 0;
for (auto& d : sin->input.getValue()) {
r += d.getValue();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
sout->output.setValue(r);
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01Implementations, "task01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01ExecFunc_0, "task01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( reduce01Implementations, "reduce01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(reduce01ExecFunc_0, "reduce01ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::forLoop(2, "for01", 1, 0, {4}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(3, "task01", 2, 0, {}, {}, task01InputFunc, task01Implementations), \
wfr::wfs::ActivityTemplate::atomic(4, "reduce01", 1, 0, {}, {2}, reduce01InputFunc, reduce01Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+51
View File
@@ -0,0 +1,51 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task01 INSTRUCT */
WFR_PORT_STRUCT( task01_in, 5, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01 OUTSTRUCT */
WFR_PORT_STRUCT( task01_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* reduce01 INSTRUCT */
WFR_PORT_STRUCT( reduce01_in, 7, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* reduce01 OUTSTRUCT */
WFR_PORT_STRUCT( reduce01_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(reduction-transformed C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin reduction.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+249
View File
@@ -0,0 +1,249 @@
#include "reduction.h"
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, reduce02_out, a1, 6, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for00InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for00_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->iterCount2, a1in->iterCount2));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for00OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for00_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, reduce01_out, output, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for00CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for00_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, for00_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount2));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, task01_out, output, 4);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->loopCounter);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_out);
sout->output.setValue(sin->loopCounter.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(reduce01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, reduce01_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, for01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(reduce01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, reduce01_in);
WFR_SELF_OUTBUFFER_INIT(sout, reduce01_out);
long r = 0;
for (auto& d : sin->input.getValue()) {
r += d.getValue();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
sout->output.setValue(r);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(reduce02InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, reduce02_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, for00_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(reduce02ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, reduce02_in);
WFR_SELF_OUTBUFFER_INIT(sout, reduce02_out);
long r = 0;
for (auto& d : sin->input.getValue()) {
r += d.getValue();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
sout->output.setValue(r);
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01Implementations, "task01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01ExecFunc_0, "task01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( reduce01Implementations, "reduce01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(reduce01ExecFunc_0, "reduce01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( reduce02Implementations, "reduce02Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(reduce02ExecFunc_0, "reduce02ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::forLoop(2, "for00", 1, 0, {6}, {}, for00InputFunc, for00OutputFunc, for00CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::forLoop(3, "for01", 2, 0, {5}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(4, "task01", 3, 0, {}, {}, task01InputFunc, task01Implementations), \
wfr::wfs::ActivityTemplate::atomic(5, "reduce01", 2, 0, {}, {3}, reduce01InputFunc, reduce01Implementations), \
wfr::wfs::ActivityTemplate::atomic(6, "reduce02", 1, 0, {}, {2}, reduce02InputFunc, reduce02Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount1.setValue(10);
wfInput.iterCount2.setValue(iterCount/10);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+73
View File
@@ -0,0 +1,73 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount1) \
WFR_PORT_MEMBER_IWIRINT(iterCount2) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for00 INSTRUCT */
WFR_PORT_STRUCT( for00_in, 3, \
WFR_PORT_MEMBER_IWIRINT(iterCount2) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for00 OUTSTRUCT */
WFR_PORT_STRUCT( for00_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 5, \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task01 INSTRUCT */
WFR_PORT_STRUCT( task01_in, 7, \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* task01 OUTSTRUCT */
WFR_PORT_STRUCT( task01_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* reduce01 INSTRUCT */
WFR_PORT_STRUCT( reduce01_in, 9, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* reduce01 OUTSTRUCT */
WFR_PORT_STRUCT( reduce01_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* reduce02 INSTRUCT */
WFR_PORT_STRUCT( reduce02_in, 11, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* reduce02 OUTSTRUCT */
WFR_PORT_STRUCT( reduce02_out, 12, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(elimination-original C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin elimination.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+264
View File
@@ -0,0 +1,264 @@
#include "elimination.h"
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->output1);
WFR_PORT_INIT_COLLECTION(sout->output2);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 2, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output1, a1out->output1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output2, a1out->output2));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_PORT_INIT_COLLECTION(sout->output1);
WFR_PORT_INIT_COLLECTION(sout->output2);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output1, task03_out, output, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, output1);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output2, task04_out, output, 7);
WFR_LOOP_FINALIZE_COLLECTION(sout, output2);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->input);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task02_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task02_1_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task02_1ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task02_1_in);
WFR_SELF_OUTBUFFER_INIT(sout, task02_1_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task03InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task03_in);
WFR_PRED_OUTBUFFER_GET(a1in, task02_1_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task03ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task03_in);
WFR_SELF_OUTBUFFER_INIT(sout, task03_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task02_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task02_2_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task02_2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task02_2_in);
WFR_SELF_OUTBUFFER_INIT(sout, task02_2_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task04InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task04_in);
WFR_PRED_OUTBUFFER_GET(a1in, task02_2_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task04ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task04_in);
WFR_SELF_OUTBUFFER_INIT(sout, task04_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01Implementations, "task01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01ExecFunc_0, "task01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task02_1Implementations, "task02_1Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task02_1ExecFunc_0, "task02_1ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task03Implementations, "task03Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task03ExecFunc_0, "task03ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task02_2Implementations, "task02_2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task02_2ExecFunc_0, "task02_2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task04Implementations, "task04Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task04ExecFunc_0, "task04ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::forLoop(2, "for01", 1, 0, {}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(3, "task01", 2, 0, {6, 4}, {}, task01InputFunc, task01Implementations), \
wfr::wfs::ActivityTemplate::atomic(4, "task02_1", 2, 0, {5}, {3}, task02_1InputFunc, task02_1Implementations), \
wfr::wfs::ActivityTemplate::atomic(5, "task03", 2, 0, {}, {4}, task03InputFunc, task03Implementations), \
wfr::wfs::ActivityTemplate::atomic(6, "task02_2", 2, 0, {7}, {3}, task02_2InputFunc, task02_2Implementations), \
wfr::wfs::ActivityTemplate::atomic(7, "task04", 2, 0, {}, {6}, task04InputFunc, task04Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+83
View File
@@ -0,0 +1,83 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output1, wfr::lwd::_lwd_iwir_basetype_int, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(output2, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output1, wfr::lwd::_lwd_iwir_basetype_int, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(output2, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task01 INSTRUCT */
WFR_PORT_STRUCT( task01_in, 5, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task01 OUTSTRUCT */
WFR_PORT_STRUCT( task01_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task02_1 INSTRUCT */
WFR_PORT_STRUCT( task02_1_in, 7, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task02_1 OUTSTRUCT */
WFR_PORT_STRUCT( task02_1_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task03 INSTRUCT */
WFR_PORT_STRUCT( task03_in, 9, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task03 OUTSTRUCT */
WFR_PORT_STRUCT( task03_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task02_2 INSTRUCT */
WFR_PORT_STRUCT( task02_2_in, 11, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task02_2 OUTSTRUCT */
WFR_PORT_STRUCT( task02_2_out, 12, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task04 INSTRUCT */
WFR_PORT_STRUCT( task04_in, 13, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task04 OUTSTRUCT */
WFR_PORT_STRUCT( task04_out, 14, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(elimination-transformed C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin elimination.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+233
View File
@@ -0,0 +1,233 @@
#include "elimination.h"
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->output1);
WFR_PORT_INIT_COLLECTION(sout->output2);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 2, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output1, a1out->output1));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output2, a1out->output2));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_PORT_INIT_COLLECTION(sout->output1);
WFR_PORT_INIT_COLLECTION(sout->output2);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output2, task04_out, output, 6);
WFR_LOOP_FINALIZE_COLLECTION(sout, output2);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output1, task03_out, output, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, output1);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->input);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task02_1InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task02_1_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task02_1ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task02_1_in);
WFR_SELF_OUTBUFFER_INIT(sout, task02_1_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task03InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task03_in);
WFR_PRED_OUTBUFFER_GET(a1in, task02_1_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task03ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task03_in);
WFR_SELF_OUTBUFFER_INIT(sout, task03_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task04InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task04_in);
WFR_PRED_OUTBUFFER_GET(a1in, task02_1_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task04ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task04_in);
WFR_SELF_OUTBUFFER_INIT(sout, task04_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01Implementations, "task01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01ExecFunc_0, "task01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task02_1Implementations, "task02_1Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task02_1ExecFunc_0, "task02_1ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task03Implementations, "task03Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task03ExecFunc_0, "task03ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task04Implementations, "task04Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task04ExecFunc_0, "task04ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::forLoop(2, "for01", 1, 0, {}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(3, "task01", 2, 0, {4}, {}, task01InputFunc, task01Implementations), \
wfr::wfs::ActivityTemplate::atomic(4, "task02_1", 2, 0, {6, 5}, {3}, task02_1InputFunc, task02_1Implementations), \
wfr::wfs::ActivityTemplate::atomic(5, "task03", 2, 0, {}, {4}, task03InputFunc, task03Implementations), \
wfr::wfs::ActivityTemplate::atomic(6, "task04", 2, 0, {}, {4}, task04InputFunc, task04Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+73
View File
@@ -0,0 +1,73 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output1, wfr::lwd::_lwd_iwir_basetype_int, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(output2, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output1, wfr::lwd::_lwd_iwir_basetype_int, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(output2, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task01 INSTRUCT */
WFR_PORT_STRUCT( task01_in, 5, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task01 OUTSTRUCT */
WFR_PORT_STRUCT( task01_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task02_1 INSTRUCT */
WFR_PORT_STRUCT( task02_1_in, 7, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task02_1 OUTSTRUCT */
WFR_PORT_STRUCT( task02_1_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task03 INSTRUCT */
WFR_PORT_STRUCT( task03_in, 9, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task03 OUTSTRUCT */
WFR_PORT_STRUCT( task03_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task04 INSTRUCT */
WFR_PORT_STRUCT( task04_in, 11, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task04 OUTSTRUCT */
WFR_PORT_STRUCT( task04_out, 12, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(loophoisting-original C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin loophoisting.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+205
View File
@@ -0,0 +1,205 @@
#include "loophoisting.h"
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 3, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->iterCount));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_PARENT_INBUFFER_GET(a2in, toplevel_in, a2);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a2in->iterCount));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, task03_out, output, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task02InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task02_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task02ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task02_in);
WFR_SELF_OUTBUFFER_INIT(sout, task02_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task03InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task03_in);
WFR_PRED_OUTBUFFER_GET(a1in, task02_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task03ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task03_in);
WFR_SELF_OUTBUFFER_INIT(sout, task03_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01Implementations, "task01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01ExecFunc_0, "task01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task02Implementations, "task02Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task02ExecFunc_0, "task02ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task03Implementations, "task03Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task03ExecFunc_0, "task03ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "task01", 1, 0, {3}, {}, task01InputFunc, task01Implementations), \
wfr::wfs::ActivityTemplate::forLoop(3, "for01", 1, 0, {}, {2}, for01InputFunc, for01OutputFunc, for01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(4, "task02", 3, 0, {5}, {}, task02InputFunc, task02Implementations), \
wfr::wfs::ActivityTemplate::atomic(5, "task03", 3, 0, {}, {4}, task03InputFunc, task03Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+62
View File
@@ -0,0 +1,62 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task01 INSTRUCT */
WFR_PORT_STRUCT( task01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task01 OUTSTRUCT */
WFR_PORT_STRUCT( task01_out, 4, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 5, \
WFR_PORT_MEMBER_IWIRINT(input) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task02 INSTRUCT */
WFR_PORT_STRUCT( task02_in, 7, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task02 OUTSTRUCT */
WFR_PORT_STRUCT( task02_out, 8, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task03 INSTRUCT */
WFR_PORT_STRUCT( task03_in, 9, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task03 OUTSTRUCT */
WFR_PORT_STRUCT( task03_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(loophoisting-transformed C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin loophoisting.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+205
View File
@@ -0,0 +1,205 @@
#include "loophoisting.h"
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 4, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->iterCount));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task01_in);
WFR_SELF_OUTBUFFER_INIT(sout, task01_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task02InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task02_in);
WFR_PRED_OUTBUFFER_GET(a1in, task01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task02ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task02_in);
WFR_SELF_OUTBUFFER_INIT(sout, task02_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(for01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, for01_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
}
WFR_PRED_OUTBUFFER_GET(a2in, task02_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a2in->output));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(for01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, task03_out, output, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, for01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(task03InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, task03_in);
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(task03ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, task03_in);
WFR_SELF_OUTBUFFER_INIT(sout, task03_out);
std::this_thread::sleep_for(std::chrono::seconds(1));
sout->output.setValue(sin->input.getValue());
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( task01Implementations, "task01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task01ExecFunc_0, "task01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task02Implementations, "task02Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task02ExecFunc_0, "task02ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( task03Implementations, "task03Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(task03ExecFunc_0, "task03ExecFunc_0" )
);
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "task01", 1, 0, {3}, {}, task01InputFunc, task01Implementations), \
wfr::wfs::ActivityTemplate::atomic(3, "task02", 1, 0, {4}, {2}, task02InputFunc, task02Implementations), \
wfr::wfs::ActivityTemplate::forLoop(4, "for01", 1, 0, {}, {3}, for01InputFunc, for01OutputFunc, for01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(5, "task03", 4, 0, {}, {}, task03InputFunc, task03Implementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
long iterCount = 8;
bool isHelp = false;
boost::program_options::options_description opts("Raincloud Options");
opts.add_options()
("help", "Print help message.")
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
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("iterCount")) {
iterCount = vm["iterCount"].as<long>();
}
std::cerr << "iterCount = " << iterCount << std::endl;
}
wfInput.iterCount.setValue(iterCount);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+62
View File
@@ -0,0 +1,62 @@
#ifndef RAINCLOUD_TEST01_H
#define RAINCLOUD_TEST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRINT(iterCount) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task01 INSTRUCT */
WFR_PORT_STRUCT( task01_in, 3, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task01 OUTSTRUCT */
WFR_PORT_STRUCT( task01_out, 4, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* task02 INSTRUCT */
WFR_PORT_STRUCT( task02_in, 5, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task02 OUTSTRUCT */
WFR_PORT_STRUCT( task02_out, 6, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
/* for01 INSTRUCT */
WFR_PORT_STRUCT( for01_in, 7, \
WFR_PORT_MEMBER_IWIRINT(input) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* for01 OUTSTRUCT */
WFR_PORT_STRUCT( for01_out, 8, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_int, 1) \
)
/* task03 INSTRUCT */
WFR_PORT_STRUCT( task03_in, 9, \
WFR_PORT_MEMBER_IWIRINT(input) \
)
/* task03 OUTSTRUCT */
WFR_PORT_STRUCT( task03_out, 10, \
WFR_PORT_MEMBER_IWIRINT(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* RAINCLOUD_TEST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(meteoag01 C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin meteoag01.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+460
View File
@@ -0,0 +1,460 @@
#include "meteoag01.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_CHILD_OUTBUFFER_GET(a1out, pForEach01_out, a1, 3, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(simulation_initInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, simulation_init_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_file, a1in->input_file));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->chunk_count, a1in->chunk_count));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input_file.isReady() && sin->chunk_count.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(simulation_initExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, simulation_init_in);
WFR_SELF_OUTBUFFER_INIT(sout, simulation_init_out);
WFR_PORT_INIT_COLLECTION(sout->input_chunks);
for (long i = 0; i < sin->chunk_count.getValue(); ++i) {
sout->input_chunks.setEntryValue(i, "input_chunk");
}
sout->input_chunks.setFinalised(true);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pForEach01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pForEach01_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PRED_OUTBUFFER_GET(a1in, simulation_init_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a1in->input_chunks));
}
WFR_PARENT_INBUFFER_GET(a2in, toplevel_in, a2);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->if_condition, a2in->if_condition));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->pForIterations, a2in->pForIterations));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pForEach01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pForEach01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, pFor01_out, output, 5);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pForEach01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pForEach01_in);
if (sin != nullptr && sin->input_chunks.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->input_chunks.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(case_initInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, case_init_in);
WFR_PARENT_INBUFFER_GET(a1in, pForEach01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input_chunks.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(case_initExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, case_init_in);
WFR_SELF_OUTBUFFER_INIT(sout, case_init_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pFor01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pFor01_in);
WFR_PARENT_INBUFFER_GET(a1in, pForEach01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->pForIterations));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->if_condition, a1in->if_condition));
}
WFR_PRED_OUTBUFFER_GET(a2in, case_init_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a2in->output));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pFor01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pFor01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, if01_out, output, 10);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pFor01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pFor01_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(0, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_makevfileInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_makevfile_in);
WFR_PARENT_INBUFFER_GET(a1in, pFor01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_makevfileExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_makevfile_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_makevfile_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_initInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_init_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_makevfile_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_initExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_init_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_init_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(revu_compareInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, revu_compare_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_init_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(revu_compareExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, revu_compare_in);
WFR_SELF_OUTBUFFER_INIT(sout, revu_compare_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(raverInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, raver_in);
WFR_PRED_OUTBUFFER_GET(a1in, revu_compare_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(raverExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, raver_in);
WFR_SELF_OUTBUFFER_INIT(sout, raver_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(if01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, if01_in);
WFR_PARENT_INBUFFER_GET(a1in, pFor01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->if_condition, a1in->if_condition));
}
WFR_PRED_OUTBUFFER_GET(a2in, raver_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a2in->output));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(if01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, if01_out);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, revu_dump_out, a1, 12, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
} else {
WFR_SELF_INBUFFER_GET(a1in, if01_in);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1in->input));
if (retval) {
instance.setInstanceStatus(wfs::ActivityInstanceStatus::Finished);
((wfs::CompositeActivityInstance&)instance).notifyChildHasFinished(instance);
}
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(if01BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, if01_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->if_condition.isReady() ) {
if (sin->if_condition.getValue() == true) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_histInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_hist_in);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_histExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_hist_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_hist_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(revu_dumpInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, revu_dump_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_hist_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(revu_dumpExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, revu_dump_in);
WFR_SELF_OUTBUFFER_INIT(sout, revu_dump_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( simulation_initImplementations, "simulation_initImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(simulation_initExecFunc_0, "simulation_initExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( case_initImplementations, "case_initImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(case_initExecFunc_0, "case_initExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_makevfileImplementations, "rams_makevfileImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_makevfileExecFunc_0, "rams_makevfileExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_initImplementations, "rams_initImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_initExecFunc_0, "rams_initExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( revu_compareImplementations, "revu_compareImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(revu_compareExecFunc_0, "revu_compareExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( raverImplementations, "raverImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(raverExecFunc_0, "raverExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_histImplementations, "rams_histImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_histExecFunc_0, "rams_histExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( revu_dumpImplementations, "revu_dumpImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(revu_dumpExecFunc_0, "revu_dumpExecFunc_0" )
);
WFR_WORKFLOW(workflow, "meteoAG", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "simulation_init", 1, 0, {3}, {}, simulation_initInputFunc, simulation_initImplementations), \
wfr::wfs::ActivityTemplate::forLoop(3, "pForEach01", 1, 0, {}, {2}, pForEach01InputFunc, pForEach01OutputFunc, pForEach01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(4, "case_init", 3, 0, {5}, {}, case_initInputFunc, case_initImplementations), \
wfr::wfs::ActivityTemplate::forLoop(5, "pFor01", 3, 0, {}, {4}, pFor01InputFunc, pFor01OutputFunc, pFor01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(6, "rams_makevfile", 5, 0, {7}, {}, rams_makevfileInputFunc, rams_makevfileImplementations), \
wfr::wfs::ActivityTemplate::atomic(7, "rams_init", 5, 0, {8}, {6}, rams_initInputFunc, rams_initImplementations), \
wfr::wfs::ActivityTemplate::atomic(8, "revu_compare", 5, 0, {9}, {7}, revu_compareInputFunc, revu_compareImplementations), \
wfr::wfs::ActivityTemplate::atomic(9, "raver", 5, 0, {10}, {8}, raverInputFunc, raverImplementations), \
wfr::wfs::ActivityTemplate::conditional(10, "if01", 5, 0, {}, {9}, if01InputFunc, if01OutputFunc, if01BranchConditionFunc), \
wfr::wfs::ActivityTemplate::atomic(11, "rams_hist", 10, 0, {12}, {}, rams_histInputFunc, rams_histImplementations), \
wfr::wfs::ActivityTemplate::atomic(12, "revu_dump", 10, 0, {}, {11}, revu_dumpInputFunc, revu_dumpImplementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
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);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+140
View File
@@ -0,0 +1,140 @@
#ifndef METEOAG01_H
#define METEOAG01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
WFR_PORT_MEMBER_IWIRBOOL(if_condition) \
WFR_PORT_MEMBER_IWIRINT(pForIterations) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 2) \
)
/* simulation_init INSTRUCT */
WFR_PORT_STRUCT( simulation_init_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
)
/* simulation_init OUTSTRUCT */
WFR_PORT_STRUCT( simulation_init_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01 INSTRUCT */
WFR_PORT_STRUCT( pForEach01_in, 5, \
WFR_PORT_MEMBER_IWIRBOOL(if_condition) \
WFR_PORT_MEMBER_IWIRINT(pForIterations) \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01 OUTSTRUCT */
WFR_PORT_STRUCT( pForEach01_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 2) \
)
/* case_init INSTRUCT */
WFR_PORT_STRUCT( case_init_in, 7, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* case_init OUTSTRUCT */
WFR_PORT_STRUCT( case_init_out, 8, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* pFor01 INSTRUCT */
WFR_PORT_STRUCT( pFor01_in, 9, \
WFR_PORT_MEMBER_IWIRFILE(input) \
WFR_PORT_MEMBER_IWIRBOOL(if_condition) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* pFor01 OUTSTRUCT */
WFR_PORT_STRUCT( pFor01_out, 10, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* rams_makevfile INSTRUCT */
WFR_PORT_STRUCT( rams_makevfile_in, 11, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_makevfile OUTSTRUCT */
WFR_PORT_STRUCT( rams_makevfile_out, 12, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* rams_init INSTRUCT */
WFR_PORT_STRUCT( rams_init_in, 13, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_init OUTSTRUCT */
WFR_PORT_STRUCT( rams_init_out, 14, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* revu_compare INSTRUCT */
WFR_PORT_STRUCT( revu_compare_in, 15, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* revu_compare OUTSTRUCT */
WFR_PORT_STRUCT( revu_compare_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* raver INSTRUCT */
WFR_PORT_STRUCT( raver_in, 17, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* raver OUTSTRUCT */
WFR_PORT_STRUCT( raver_out, 18, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* if01 INSTRUCT */
WFR_PORT_STRUCT( if01_in, 19, \
WFR_PORT_MEMBER_IWIRFILE(input) \
WFR_PORT_MEMBER_IWIRBOOL(if_condition) \
)
/* if01 OUTSTRUCT */
WFR_PORT_STRUCT( if01_out, 20, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* rams_hist INSTRUCT */
WFR_PORT_STRUCT( rams_hist_in, 21, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_hist OUTSTRUCT */
WFR_PORT_STRUCT( rams_hist_out, 22, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* revu_dump INSTRUCT */
WFR_PORT_STRUCT( revu_dump_in, 23, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* revu_dump OUTSTRUCT */
WFR_PORT_STRUCT( revu_dump_out, 24, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* METEOAG01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(meteoag02 C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin meteoag02.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+675
View File
@@ -0,0 +1,675 @@
#include "meteoag02.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_CHILD_OUTBUFFER_GET(a1out, if01_out, a1, 3, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(simulation_initInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, simulation_init_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_file, a1in->input_file));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->chunk_count, a1in->chunk_count));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input_file.isReady() && sin->chunk_count.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(simulation_initExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, simulation_init_in);
WFR_SELF_OUTBUFFER_INIT(sout, simulation_init_out);
WFR_PORT_INIT_COLLECTION(sout->input_chunks);
for (long i = 0; i < sin->chunk_count.getValue(); ++i) {
sout->input_chunks.setEntryValue(i, "input_chunk");
}
sout->input_chunks.setFinalised(true);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(if01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, if01_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PRED_OUTBUFFER_GET(a1in, simulation_init_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a1in->input_chunks));
}
WFR_PARENT_INBUFFER_GET(a2in, toplevel_in, a2);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->if_condition, a2in->if_condition));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->pForIterations, a2in->pForIterations));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(if01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, if01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
if (WFR_SELF_GETCONDBRANCHID() == 0) {
WFR_CHILD_OUTBUFFER_GET(a1out, pForEach01_then_out, a1, 4, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
} else if (WFR_SELF_GETCONDBRANCHID() == 1) {
WFR_CHILD_OUTBUFFER_GET(a1out, pForEach01_else_out, a1, 13, 1);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output, a1out->output));
}
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_BRANCHCONDITION_HOOK(if01BranchConditionFunc) {
WFR_BRANCHCONDITION_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, if01_in);
if (sin != nullptr && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution && sin->if_condition.isReady() ) {
if (sin->if_condition.getValue() == true) {
instance.setExecutionBranchID(0);
} else {
instance.setExecutionBranchID(1);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_BRANCHCONDITION_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pForEach01_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pForEach01_then_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a1in->input_chunks));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->pForIterations, a1in->pForIterations));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pForEach01_thenOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pForEach01_then_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, pFor01_then_out, output, 6);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pForEach01_thenCounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pForEach01_then_in);
if (sin != nullptr && sin->input_chunks.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->input_chunks.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(case_init_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, case_init_then_in);
WFR_PARENT_INBUFFER_GET(a1in, pForEach01_then_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input_chunks.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(case_init_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, case_init_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, case_init_then_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pFor01_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pFor01_then_in);
WFR_PARENT_INBUFFER_GET(a1in, pForEach01_then_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->pForIterations));
}
WFR_PRED_OUTBUFFER_GET(a2in, case_init_then_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a2in->output));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pFor01_thenOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pFor01_then_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, revu_dump_then_out, output, 12);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pFor01_thenCounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pFor01_then_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(0, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_makevfile_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_makevfile_then_in);
WFR_PARENT_INBUFFER_GET(a1in, pFor01_then_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_makevfile_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_makevfile_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_makevfile_then_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_init_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_init_then_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_makevfile_then_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_init_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_init_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_init_then_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(revu_compare_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, revu_compare_then_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_init_then_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(revu_compare_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, revu_compare_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, revu_compare_then_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(raver_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, raver_then_in);
WFR_PRED_OUTBUFFER_GET(a1in, revu_compare_then_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(raver_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, raver_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, raver_then_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_hist_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_hist_then_in);
WFR_PRED_OUTBUFFER_GET(a1in, raver_then_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_hist_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_hist_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_hist_then_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(revu_dump_thenInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, revu_dump_then_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_hist_then_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(revu_dump_thenExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, revu_dump_then_in);
WFR_SELF_OUTBUFFER_INIT(sout, revu_dump_then_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pForEach01_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pForEach01_else_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PARENT_INBUFFER_GET(a1in, if01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a1in->input_chunks));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->pForIterations, a1in->pForIterations));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pForEach01_elseOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pForEach01_else_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, pFor01_else_out, output, 15);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pForEach01_elseCounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pForEach01_else_in);
if (sin != nullptr && sin->input_chunks.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->input_chunks.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(case_init_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, case_init_else_in);
WFR_PARENT_INBUFFER_GET(a1in, pForEach01_else_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input_chunks.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(case_init_elseExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, case_init_else_in);
WFR_SELF_OUTBUFFER_INIT(sout, case_init_else_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pFor01_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pFor01_else_in);
WFR_PRED_OUTBUFFER_GET(a1in, case_init_else_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_PARENT_INBUFFER_GET(a2in, pForEach01_else_in, a2);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a2in->pForIterations));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pFor01_elseOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pFor01_else_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, raver_else_out, output, 19);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pFor01_elseCounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pFor01_else_in);
if(sin != nullptr && sin->loopCounter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(0, 1, sin->loopCounter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_makevfile_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_makevfile_else_in);
WFR_PARENT_INBUFFER_GET(a1in, pFor01_else_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_makevfile_elseExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_makevfile_else_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_makevfile_else_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(rams_init_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, rams_init_else_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_makevfile_else_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(rams_init_elseExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, rams_init_else_in);
WFR_SELF_OUTBUFFER_INIT(sout, rams_init_else_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(revu_compare_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, revu_compare_else_in);
WFR_PRED_OUTBUFFER_GET(a1in, rams_init_else_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(revu_compare_elseExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, revu_compare_else_in);
WFR_SELF_OUTBUFFER_INIT(sout, revu_compare_else_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(raver_elseInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, raver_else_in);
WFR_PRED_OUTBUFFER_GET(a1in, revu_compare_else_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(raver_elseExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, raver_else_in);
WFR_SELF_OUTBUFFER_INIT(sout, raver_else_out);
sout->output.setValue(sin->input);
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( simulation_initImplementations, "simulation_initImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(simulation_initExecFunc_0, "simulation_initExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( case_init_thenImplementations, "case_init_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(case_init_thenExecFunc_0, "case_init_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_makevfile_thenImplementations, "rams_makevfile_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_makevfile_thenExecFunc_0, "rams_makevfile_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_init_thenImplementations, "rams_init_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_init_thenExecFunc_0, "rams_init_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( revu_compare_thenImplementations, "revu_compare_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(revu_compare_thenExecFunc_0, "revu_compare_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( raver_thenImplementations, "raver_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(raver_thenExecFunc_0, "raver_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_hist_thenImplementations, "rams_hist_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_hist_thenExecFunc_0, "rams_hist_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( revu_dump_thenImplementations, "revu_dump_thenImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(revu_dump_thenExecFunc_0, "revu_dump_thenExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( case_init_elseImplementations, "case_init_elseImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(case_init_elseExecFunc_0, "case_init_elseExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_makevfile_elseImplementations, "rams_makevfile_elseImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_makevfile_elseExecFunc_0, "rams_makevfile_elseExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( rams_init_elseImplementations, "rams_init_elseImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(rams_init_elseExecFunc_0, "rams_init_elseExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( revu_compare_elseImplementations, "revu_compare_elseImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(revu_compare_elseExecFunc_0, "revu_compare_elseExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( raver_elseImplementations, "raver_elseImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(raver_elseExecFunc_0, "raver_elseExecFunc_0" )
);
WFR_WORKFLOW(workflow, "meteoAG", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "simulation_init", 1, 0, {3}, {}, simulation_initInputFunc, simulation_initImplementations), \
wfr::wfs::ActivityTemplate::conditional(3, "if01", 1, 0, {}, {2}, if01InputFunc, if01OutputFunc, if01BranchConditionFunc), \
wfr::wfs::ActivityTemplate::forLoop(4, "pForEach01_then", 3, 0, {}, {}, pForEach01_thenInputFunc, pForEach01_thenOutputFunc, pForEach01_thenCounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(5, "case_init_then", 4, 0, {6}, {}, case_init_thenInputFunc, case_init_thenImplementations), \
wfr::wfs::ActivityTemplate::forLoop(6, "pFor01_then", 4, 0, {}, {5}, pFor01_thenInputFunc, pFor01_thenOutputFunc, pFor01_thenCounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(7, "rams_makevfile_then", 6, 0, {8}, {}, rams_makevfile_thenInputFunc, rams_makevfile_thenImplementations), \
wfr::wfs::ActivityTemplate::atomic(8, "rams_init_then", 6, 0, {9}, {7}, rams_init_thenInputFunc, rams_init_thenImplementations), \
wfr::wfs::ActivityTemplate::atomic(9, "revu_compare_then", 6, 0, {10}, {8}, revu_compare_thenInputFunc, revu_compare_thenImplementations), \
wfr::wfs::ActivityTemplate::atomic(10, "raver_then", 6, 0, {11}, {9}, raver_thenInputFunc, raver_thenImplementations), \
wfr::wfs::ActivityTemplate::atomic(11, "rams_hist_then", 6, 0, {12}, {10}, rams_hist_thenInputFunc, rams_hist_thenImplementations), \
wfr::wfs::ActivityTemplate::atomic(12, "revu_dump_then", 6, 0, {}, {11}, revu_dump_thenInputFunc, revu_dump_thenImplementations), \
wfr::wfs::ActivityTemplate::forLoop(13, "pForEach01_else", 3, 1, {}, {}, pForEach01_elseInputFunc, pForEach01_elseOutputFunc, pForEach01_elseCounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(14, "case_init_else", 13, 0, {15}, {}, case_init_elseInputFunc, case_init_elseImplementations), \
wfr::wfs::ActivityTemplate::forLoop(15, "pFor01_else", 13, 0, {}, {14}, pFor01_elseInputFunc, pFor01_elseOutputFunc, pFor01_elseCounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(16, "rams_makevfile_else", 15, 0, {17}, {}, rams_makevfile_elseInputFunc, rams_makevfile_elseImplementations), \
wfr::wfs::ActivityTemplate::atomic(17, "rams_init_else", 15, 0, {18}, {16}, rams_init_elseInputFunc, rams_init_elseImplementations), \
wfr::wfs::ActivityTemplate::atomic(18, "revu_compare_else", 15, 0, {19}, {17}, revu_compare_elseInputFunc, revu_compare_elseImplementations), \
wfr::wfs::ActivityTemplate::atomic(19, "raver_else", 15, 0, {}, {18}, raver_elseInputFunc, raver_elseImplementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
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);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+211
View File
@@ -0,0 +1,211 @@
#ifndef METEOAG02_H
#define METEOAG02_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
WFR_PORT_MEMBER_IWIRBOOL(if_condition) \
WFR_PORT_MEMBER_IWIRINT(pForIterations) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 2) \
)
/* simulation_init INSTRUCT */
WFR_PORT_STRUCT( simulation_init_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
)
/* simulation_init OUTSTRUCT */
WFR_PORT_STRUCT( simulation_init_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* if01 INSTRUCT */
WFR_PORT_STRUCT( if01_in, 5, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(pForIterations) \
WFR_PORT_MEMBER_IWIRBOOL(if_condition) \
)
/* if01 OUTSTRUCT */
WFR_PORT_STRUCT( if01_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 2) \
)
/* pForEach01_then INSTRUCT */
WFR_PORT_STRUCT( pForEach01_then_in, 7, \
WFR_PORT_MEMBER_IWIRINT(pForIterations) \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01_then OUTSTRUCT */
WFR_PORT_STRUCT( pForEach01_then_out, 8, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 2) \
)
/* case_init_then INSTRUCT */
WFR_PORT_STRUCT( case_init_then_in, 9, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* case_init_then OUTSTRUCT */
WFR_PORT_STRUCT( case_init_then_out, 10, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* pFor01_then INSTRUCT */
WFR_PORT_STRUCT( pFor01_then_in, 11, \
WFR_PORT_MEMBER_IWIRFILE(input) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* pFor01_then OUTSTRUCT */
WFR_PORT_STRUCT( pFor01_then_out, 12, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* rams_makevfile_then INSTRUCT */
WFR_PORT_STRUCT( rams_makevfile_then_in, 13, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_makevfile_then OUTSTRUCT */
WFR_PORT_STRUCT( rams_makevfile_then_out, 14, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* rams_init_then INSTRUCT */
WFR_PORT_STRUCT( rams_init_then_in, 15, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_init_then OUTSTRUCT */
WFR_PORT_STRUCT( rams_init_then_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* revu_compare_then INSTRUCT */
WFR_PORT_STRUCT( revu_compare_then_in, 17, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* revu_compare_then OUTSTRUCT */
WFR_PORT_STRUCT( revu_compare_then_out, 18, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* raver_then INSTRUCT */
WFR_PORT_STRUCT( raver_then_in, 19, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* raver_then OUTSTRUCT */
WFR_PORT_STRUCT( raver_then_out, 20, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* rams_hist_then INSTRUCT */
WFR_PORT_STRUCT( rams_hist_then_in, 21, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_hist_then OUTSTRUCT */
WFR_PORT_STRUCT( rams_hist_then_out, 22, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* revu_dump_then INSTRUCT */
WFR_PORT_STRUCT( revu_dump_then_in, 23, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* revu_dump_then OUTSTRUCT */
WFR_PORT_STRUCT( revu_dump_then_out, 24, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* pForEach01_else INSTRUCT */
WFR_PORT_STRUCT( pForEach01_else_in, 25, \
WFR_PORT_MEMBER_IWIRINT(pForIterations) \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01_else OUTSTRUCT */
WFR_PORT_STRUCT( pForEach01_else_out, 26, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 2) \
)
/* case_init_else INSTRUCT */
WFR_PORT_STRUCT( case_init_else_in, 27, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* case_init_else OUTSTRUCT */
WFR_PORT_STRUCT( case_init_else_out, 28, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* pFor01_else INSTRUCT */
WFR_PORT_STRUCT( pFor01_else_in, 29, \
WFR_PORT_MEMBER_IWIRFILE(input) \
WFR_PORT_MEMBER_IWIRINT(loopCounter_to) \
)
/* pFor01_else OUTSTRUCT */
WFR_PORT_STRUCT( pFor01_else_out, 30, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* rams_makevfile_else INSTRUCT */
WFR_PORT_STRUCT( rams_makevfile_else_in, 31, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_makevfile_else OUTSTRUCT */
WFR_PORT_STRUCT( rams_makevfile_else_out, 32, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* rams_init_else INSTRUCT */
WFR_PORT_STRUCT( rams_init_else_in, 33, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* rams_init_else OUTSTRUCT */
WFR_PORT_STRUCT( rams_init_else_out, 34, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* revu_compare_else INSTRUCT */
WFR_PORT_STRUCT( revu_compare_else_in, 35, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* revu_compare_else OUTSTRUCT */
WFR_PORT_STRUCT( revu_compare_else_out, 36, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* raver_else INSTRUCT */
WFR_PORT_STRUCT( raver_else_in, 37, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* raver_else OUTSTRUCT */
WFR_PORT_STRUCT( raver_else_out, 38, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* METEOAG02_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(meteoag03 C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin meteoag03.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(blast01 C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin blast01.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+316
View File
@@ -0,0 +1,316 @@
#include "blast01.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
#include <thread>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, finish_job_out, a1, 8, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->result, a1out->result));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->result.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(split_inputsInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, split_inputs_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_file, a1in->input_file));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->chunk_count, a1in->chunk_count));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input_file.isReady() && sin->chunk_count.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(split_inputsExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, split_inputs_in);
WFR_SELF_OUTBUFFER_INIT(sout, split_inputs_out);
WFR_PORT_INIT_COLLECTION(sout->input_chunks);
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);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pForEach01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pForEach01_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PRED_OUTBUFFER_GET(a1in, split_inputs_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a1in->input_chunks));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pForEach01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pForEach01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_PORT_INIT_COLLECTION(sout->error);
WFR_PORT_INIT_COLLECTION(sout->total);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, distributed_script_out, output, 4);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->error, distributed_script_out, error, 4);
WFR_LOOP_FINALIZE_COLLECTION(sout, error);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->total, distributed_script_out, total, 4);
WFR_LOOP_FINALIZE_COLLECTION(sout, total);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady() && sout->error.isReady() && sout->total.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pForEach01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pForEach01_in);
if (sin != nullptr && sin->input_chunks.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->input_chunks.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(distributed_scriptInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, distributed_script_in);
WFR_PARENT_INBUFFER_GET(a1in, pForEach01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input_chunks.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(distributed_scriptExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, distributed_script_in);
WFR_SELF_OUTBUFFER_INIT(sout, distributed_script_out);
EXECUTE_SIMULATION_MODE
sout->output.setValue("output.file");
sout->error.setValue("error.file");
sout->total.setValue("total.file");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_outputInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_output_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pForEach01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_outputExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_output_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_output_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_errorInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_error_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pForEach01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->error));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_errorExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_error_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_error_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_totalInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_total_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pForEach01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->total));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_totalExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_total_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_total_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(finish_jobInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, finish_job_in);
WFR_PRED_OUTBUFFER_GET(a1in, cat_total_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->total, a1in->output));
}
WFR_PRED_OUTBUFFER_GET(a2in, cat_error_out, a2, 1);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->error, a2in->output));
}
WFR_PRED_OUTBUFFER_GET(a3in, cat_output_out, a3, 2);
if (a3in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->output, a3in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->output.isReady() && sin->error.isReady() && sin->total.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(finish_jobExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, finish_job_in);
WFR_SELF_OUTBUFFER_INIT(sout, finish_job_out);
EXECUTE_SIMULATION_MODE
sout->result.setValue("result.file");
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( split_inputsImplementations, "split_inputsImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(split_inputsExecFunc_0, "split_inputsExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( distributed_scriptImplementations, "distributed_scriptImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(distributed_scriptExecFunc_0, "distributed_scriptExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_outputImplementations, "cat_outputImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_outputExecFunc_0, "cat_outputExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_errorImplementations, "cat_errorImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_errorExecFunc_0, "cat_errorExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_totalImplementations, "cat_totalImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_totalExecFunc_0, "cat_totalExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( finish_jobImplementations, "finish_jobImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(finish_jobExecFunc_0, "finish_jobExecFunc_0" )
);
WFR_WORKFLOW(workflow, "Blast", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "split_inputs", 1, 0, {3}, {}, split_inputsInputFunc, split_inputsImplementations), \
wfr::wfs::ActivityTemplate::forLoop(3, "pForEach01", 1, 0, {7, 6, 5}, {2}, pForEach01InputFunc, pForEach01OutputFunc, pForEach01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(4, "distributed_script", 3, 0, {}, {}, distributed_scriptInputFunc, distributed_scriptImplementations), \
wfr::wfs::ActivityTemplate::atomic(5, "cat_output", 1, 0, {8}, {3}, cat_outputInputFunc, cat_outputImplementations), \
wfr::wfs::ActivityTemplate::atomic(6, "cat_error", 1, 0, {8}, {3}, cat_errorInputFunc, cat_errorImplementations), \
wfr::wfs::ActivityTemplate::atomic(7, "cat_total", 1, 0, {8}, {3}, cat_totalInputFunc, cat_totalImplementations), \
wfr::wfs::ActivityTemplate::atomic(8, "finish_job", 1, 0, {}, {7, 6, 5}, finish_jobInputFunc, finish_jobImplementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
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);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+99
View File
@@ -0,0 +1,99 @@
#ifndef BLAST01_H
#define BLAST01_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRFILE(result) \
)
/* split_inputs INSTRUCT */
WFR_PORT_STRUCT( split_inputs_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
)
/* split_inputs OUTSTRUCT */
WFR_PORT_STRUCT( split_inputs_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01 INSTRUCT */
WFR_PORT_STRUCT( pForEach01_in, 5, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01 OUTSTRUCT */
WFR_PORT_STRUCT( pForEach01_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(error, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(total, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* distributed_script INSTRUCT */
WFR_PORT_STRUCT( distributed_script_in, 7, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* distributed_script OUTSTRUCT */
WFR_PORT_STRUCT( distributed_script_out, 8, \
WFR_PORT_MEMBER_IWIRFILE(output) \
WFR_PORT_MEMBER_IWIRFILE(error) \
WFR_PORT_MEMBER_IWIRFILE(total) \
)
/* cat_output INSTRUCT */
WFR_PORT_STRUCT( cat_output_in, 9, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_output OUTSTRUCT */
WFR_PORT_STRUCT( cat_output_out, 10, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* cat_error INSTRUCT */
WFR_PORT_STRUCT( cat_error_in, 11, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_error OUTSTRUCT */
WFR_PORT_STRUCT( cat_error_out, 12, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* cat_total INSTRUCT */
WFR_PORT_STRUCT( cat_total_in, 13, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_total OUTSTRUCT */
WFR_PORT_STRUCT( cat_total_out, 14, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* finish_job INSTRUCT */
WFR_PORT_STRUCT( finish_job_in, 15, \
WFR_PORT_MEMBER_IWIRFILE(output) \
WFR_PORT_MEMBER_IWIRFILE(error) \
WFR_PORT_MEMBER_IWIRFILE(total) \
)
/* finish_job OUTSTRUCT */
WFR_PORT_STRUCT( finish_job_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(result) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* BLAST01_H */
+8
View File
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 2.8)
project(blast02 C CXX)
ADD_DEFINITIONS( -std=c++11 )
include_directories(${WFR_INCLUDES})
add_executable(${PROJECT_NAME}.bin blast02.cpp)
target_link_libraries(${PROJECT_NAME}.bin ${WFR_LIBS})
install(TARGETS ${PROJECT_NAME}.bin DESTINATION ${INSTALL_DIR})
+500
View File
@@ -0,0 +1,500 @@
#include "blast02.h"
#include <algorithm>
#include <iostream>
#include <boost/program_options.hpp>
#include <thread>
WFR_INPUT_HOOK(toplevelInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
WFR_CHILD_OUTBUFFER_GET(a1out, finish_job_out, a1, 13, 0);
if (a1out != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->result, a1out->result));
}
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->result.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_INPUT_HOOK(split_inputsInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, split_inputs_in);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_file, a1in->input_file));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->chunk_count, a1in->chunk_count));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input_file.isReady() && sin->chunk_count.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(split_inputsExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, split_inputs_in);
WFR_SELF_OUTBUFFER_INIT(sout, split_inputs_out);
WFR_PORT_INIT_COLLECTION(sout->input_chunks);
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);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pFor01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pFor01_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->parallelReductions, a1in->parallelReductions));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->counter_to, a1in->parallelReductions));
}
WFR_PRED_OUTBUFFER_GET(a2in, split_inputs_out, a2, 0);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a2in->input_chunks));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pFor01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pFor01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_PORT_INIT_COLLECTION(sout->error);
WFR_PORT_INIT_COLLECTION(sout->total);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, cat_output_out, output, 7);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->error, cat_error_out, output, 8);
WFR_LOOP_FINALIZE_COLLECTION(sout, error);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->total, cat_total_out, output, 9);
WFR_LOOP_FINALIZE_COLLECTION(sout, total);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady() && sout->error.isReady() && sout->total.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pFor01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pFor01_in);
if(sin != nullptr && sin->counter_to.isReady()) {
WFR_SELF_SETFORLOOPCOUNTERVALUES(0, 1, sin->counter_to.getValue())
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(helper01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, helper01_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PARENT_INBUFFER_GET(a1in, pFor01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a1in->input_chunks));
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->parallelReductions, a1in->parallelReductions));
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->loopCounter);
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input_chunks.isReady() && sin->parallelReductions.isReady() && sin->loopCounter.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(helper01ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, helper01_in);
WFR_SELF_OUTBUFFER_INIT(sout, helper01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
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);
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(pForEach01InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, pForEach01_in);
WFR_PORT_INIT_COLLECTION(sin->input_chunks);
WFR_PRED_OUTBUFFER_GET(a1in, helper01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input_chunks, a1in->output));
}
WFR_INPUT_HOOK_EPILOG;
}
WFR_OUTPUT_HOOK(pForEach01OutputFunc) {
WFR_OUTPUT_HOOK_PROLOG;
WFR_SELF_OUTBUFFER_INIT(sout, pForEach01_out);
WFR_PORT_INIT_COLLECTION(sout->output);
WFR_PORT_INIT_COLLECTION(sout->error);
WFR_PORT_INIT_COLLECTION(sout->total);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output, distributed_script_out, output, 6);
WFR_LOOP_FINALIZE_COLLECTION(sout, output);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->error, distributed_script_out, error, 6);
WFR_LOOP_FINALIZE_COLLECTION(sout, error);
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->total, distributed_script_out, total, 6);
WFR_LOOP_FINALIZE_COLLECTION(sout, total);
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output.isReady() && sout->error.isReady() && sout->total.isReady());
WFR_OUTPUT_HOOK_EPILOG;
}
WFR_FORCOUNTER_HOOK(pForEach01CounterFunc) {
WFR_FORCOUNTER_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, pForEach01_in);
if (sin != nullptr && sin->input_chunks.isReady() && instance.getInstanceStatus() < wfr::wfs::ActivityInstanceStatus::ReadyForExecution) {
wfr_size_t minLoopElementcount = std::min({sin->input_chunks.getSize()});
WFR_SELF_SETITERATIONCOUNT(minLoopElementcount);
WFR_LOOP_FINALIZE();
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
}
WFR_FORCOUNTER_HOOK_EPILOG;
}
WFR_INPUT_HOOK(distributed_scriptInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, distributed_script_in);
WFR_PARENT_INBUFFER_GET(a1in, pForEach01_in, a1);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->input_chunks.getEntry(WFR_SELF_GETITERATIONID())));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(distributed_scriptExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, distributed_script_in);
WFR_SELF_OUTBUFFER_INIT(sout, distributed_script_out);
EXECUTE_SIMULATION_MODE
sout->output.setValue("output.file");
sout->error.setValue("error.file");
sout->total.setValue("total.file");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_outputInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_output_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pForEach01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_outputExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_output_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_output_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_errorInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_error_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pForEach01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->error));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_errorExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_error_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_error_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_totalInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_total_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pForEach01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->total));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_totalExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_total_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_total_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_output_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_output_2_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pFor01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_output_2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_output_2_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_output_2_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_error_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_error_2_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pFor01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->error));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_error_2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_error_2_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_error_2_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(cat_total_2InputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, cat_total_2_in);
WFR_PORT_INIT_COLLECTION(sin->input);
WFR_PRED_OUTBUFFER_GET(a1in, pFor01_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->total));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(cat_total_2ExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, cat_total_2_in);
WFR_SELF_OUTBUFFER_INIT(sout, cat_total_2_out);
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");
WFR_EXEC_HOOK_EPILOG;
}
WFR_INPUT_HOOK(finish_jobInputFunc) {
WFR_INPUT_HOOK_PROLOG;
WFR_SELF_INBUFFER_INIT(sin, finish_job_in);
WFR_PRED_OUTBUFFER_GET(a1in, cat_output_2_out, a1, 0);
if (a1in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->output, a1in->output));
}
WFR_PRED_OUTBUFFER_GET(a2in, cat_total_2_out, a2, 1);
if (a2in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->total, a2in->output));
}
WFR_PRED_OUTBUFFER_GET(a3in, cat_error_2_out, a3, 2);
if (a3in != nullptr) {
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->error, a3in->output));
}
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->output.isReady() && sin->error.isReady() && sin->total.isReady());
WFR_INPUT_HOOK_EPILOG;
}
WFR_EXEC_HOOK(finish_jobExecFunc_0) {
WFR_EXEC_HOOK_PROLOG;
WFR_SELF_INBUFFER_GET(sin, finish_job_in);
WFR_SELF_OUTBUFFER_INIT(sout, finish_job_out);
EXECUTE_SIMULATION_MODE
sout->result.setValue("result.file");
WFR_EXEC_HOOK_EPILOG;
}
WFR_ACTIVITY_IMPLEMENTATIONS( split_inputsImplementations, "split_inputsImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(split_inputsExecFunc_0, "split_inputsExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( helper01Implementations, "helper01Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(helper01ExecFunc_0, "helper01ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( distributed_scriptImplementations, "distributed_scriptImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(distributed_scriptExecFunc_0, "distributed_scriptExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_outputImplementations, "cat_outputImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_outputExecFunc_0, "cat_outputExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_errorImplementations, "cat_errorImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_errorExecFunc_0, "cat_errorExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_totalImplementations, "cat_totalImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_totalExecFunc_0, "cat_totalExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_output_2Implementations, "cat_output_2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_output_2ExecFunc_0, "cat_output_2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_error_2Implementations, "cat_error_2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_error_2ExecFunc_0, "cat_error_2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( cat_total_2Implementations, "cat_total_2Implementations", \
wfr::wfs::AtomicActivityImplementation::PThread(cat_total_2ExecFunc_0, "cat_total_2ExecFunc_0" )
);
WFR_ACTIVITY_IMPLEMENTATIONS( finish_jobImplementations, "finish_jobImplementations", \
wfr::wfs::AtomicActivityImplementation::PThread(finish_jobExecFunc_0, "finish_jobExecFunc_0" )
);
WFR_WORKFLOW(workflow, "Blast", wfActivityTable, 1, \
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
wfr::wfs::ActivityTemplate::atomic(2, "split_inputs", 1, 0, {3}, {}, split_inputsInputFunc, split_inputsImplementations), \
wfr::wfs::ActivityTemplate::forLoop(3, "pFor01", 1, 0, {10, 12, 11}, {2}, pFor01InputFunc, pFor01OutputFunc, pFor01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(4, "helper01", 3, 0, {5}, {}, helper01InputFunc, helper01Implementations), \
wfr::wfs::ActivityTemplate::forLoop(5, "pForEach01", 3, 0, {7, 8, 9}, {4}, pForEach01InputFunc, pForEach01OutputFunc, pForEach01CounterFunc, nullptr, true), \
wfr::wfs::ActivityTemplate::atomic(6, "distributed_script", 5, 0, {}, {}, distributed_scriptInputFunc, distributed_scriptImplementations), \
wfr::wfs::ActivityTemplate::atomic(7, "cat_output", 3, 0, {}, {5}, cat_outputInputFunc, cat_outputImplementations), \
wfr::wfs::ActivityTemplate::atomic(8, "cat_error", 3, 0, {}, {5}, cat_errorInputFunc, cat_errorImplementations), \
wfr::wfs::ActivityTemplate::atomic(9, "cat_total", 3, 0, {}, {5}, cat_totalInputFunc, cat_totalImplementations), \
wfr::wfs::ActivityTemplate::atomic(10, "cat_output_2", 1, 0, {13}, {3}, cat_output_2InputFunc, cat_output_2Implementations), \
wfr::wfs::ActivityTemplate::atomic(11, "cat_error_2", 1, 0, {13}, {3}, cat_error_2InputFunc, cat_error_2Implementations), \
wfr::wfs::ActivityTemplate::atomic(12, "cat_total_2", 1, 0, {13}, {3}, cat_total_2InputFunc, cat_total_2Implementations), \
wfr::wfs::ActivityTemplate::atomic(13, "finish_job", 1, 0, {}, {10, 12, 11}, finish_jobInputFunc, finish_jobImplementations), \
);
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
wfr::WorkflowRuntime::init(argc, argv);
workflow->execute(&wfInput, &wfOutput);
wfr::WorkflowRuntime::finish();
return 0;
}
int main(int argc, char** argv) {
toplevel_in wfInput;
// Fill workflow input struct
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);
toplevel_out wfOutput;
wfstart(wfInput, wfOutput, argc, argv);
// Do something with workflow output
return 0;
}
+156
View File
@@ -0,0 +1,156 @@
#ifndef BLAST02_H
#define BLAST02_H
#include <wfr/wfr.h>
/* toplevel INSTRUCT */
WFR_PORT_STRUCT( toplevel_in, 1, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
WFR_PORT_MEMBER_IWIRINT(parallelReductions) \
)
/* toplevel OUTSTRUCT */
WFR_PORT_STRUCT( toplevel_out, 2, \
WFR_PORT_MEMBER_IWIRFILE(result) \
)
/* split_inputs INSTRUCT */
WFR_PORT_STRUCT( split_inputs_in, 3, \
WFR_PORT_MEMBER_IWIRFILE(input_file) \
WFR_PORT_MEMBER_IWIRINT(chunk_count) \
)
/* split_inputs OUTSTRUCT */
WFR_PORT_STRUCT( split_inputs_out, 4, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pFor01 INSTRUCT */
WFR_PORT_STRUCT( pFor01_in, 5, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(parallelReductions) \
WFR_PORT_MEMBER_IWIRINT(counter_to) \
)
/* pFor01 OUTSTRUCT */
WFR_PORT_STRUCT( pFor01_out, 6, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(error, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(total, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* helper01 INSTRUCT */
WFR_PORT_STRUCT( helper01_in, 7, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRINT(parallelReductions) \
WFR_PORT_MEMBER_IWIRINT(loopCounter) \
)
/* helper01 OUTSTRUCT */
WFR_PORT_STRUCT( helper01_out, 8, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01 INSTRUCT */
WFR_PORT_STRUCT( pForEach01_in, 9, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input_chunks, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* pForEach01 OUTSTRUCT */
WFR_PORT_STRUCT( pForEach01_out, 10, \
WFR_PORT_MEMBER_IWIRCOLLECTION(output, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(error, wfr::lwd::_lwd_iwir_basetype_file, 1) \
WFR_PORT_MEMBER_IWIRCOLLECTION(total, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* distributed_script INSTRUCT */
WFR_PORT_STRUCT( distributed_script_in, 11, \
WFR_PORT_MEMBER_IWIRFILE(input) \
)
/* distributed_script OUTSTRUCT */
WFR_PORT_STRUCT( distributed_script_out, 12, \
WFR_PORT_MEMBER_IWIRFILE(output) \
WFR_PORT_MEMBER_IWIRFILE(error) \
WFR_PORT_MEMBER_IWIRFILE(total) \
)
/* cat_output INSTRUCT */
WFR_PORT_STRUCT( cat_output_in, 13, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_output OUTSTRUCT */
WFR_PORT_STRUCT( cat_output_out, 14, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* cat_error INSTRUCT */
WFR_PORT_STRUCT( cat_error_in, 15, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_error OUTSTRUCT */
WFR_PORT_STRUCT( cat_error_out, 16, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* cat_total INSTRUCT */
WFR_PORT_STRUCT( cat_total_in, 17, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_total OUTSTRUCT */
WFR_PORT_STRUCT( cat_total_out, 18, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* cat_output_2 INSTRUCT */
WFR_PORT_STRUCT( cat_output_2_in, 19, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_output_2 OUTSTRUCT */
WFR_PORT_STRUCT( cat_output_2_out, 20, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* cat_error_2 INSTRUCT */
WFR_PORT_STRUCT( cat_error_2_in, 21, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_error_2 OUTSTRUCT */
WFR_PORT_STRUCT( cat_error_2_out, 22, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* cat_total_2 INSTRUCT */
WFR_PORT_STRUCT( cat_total_2_in, 23, \
WFR_PORT_MEMBER_IWIRCOLLECTION(input, wfr::lwd::_lwd_iwir_basetype_file, 1) \
)
/* cat_total_2 OUTSTRUCT */
WFR_PORT_STRUCT( cat_total_2_out, 24, \
WFR_PORT_MEMBER_IWIRFILE(output) \
)
/* finish_job INSTRUCT */
WFR_PORT_STRUCT( finish_job_in, 25, \
WFR_PORT_MEMBER_IWIRFILE(output) \
WFR_PORT_MEMBER_IWIRFILE(error) \
WFR_PORT_MEMBER_IWIRFILE(total) \
)
/* finish_job OUTSTRUCT */
WFR_PORT_STRUCT( finish_job_out, 26, \
WFR_PORT_MEMBER_IWIRFILE(result) \
)
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc = 0, char** argv = nullptr);
#endif /* BLAST02_H */