diff --git a/doc/examples/CMakeLists.txt b/doc/examples/CMakeLists.txt index f34f99d..7d4e4c9 100644 --- a/doc/examples/CMakeLists.txt +++ b/doc/examples/CMakeLists.txt @@ -10,6 +10,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../../base_cpp/include ${CMAKE_CURRENT_BINARY_DIR}/../../base_cpp/include ${CMAKE_CURRENT_SOURCE_DIR}/../../mtapi_c/include + ${CMAKE_CURRENT_SOURCE_DIR}/../../mtapi_cpp/include ${CMAKE_CURRENT_SOURCE_DIR}/../../tasks_cpp/include ${CMAKE_CURRENT_BINARY_DIR}/../../tasks_cpp/include ${CMAKE_CURRENT_SOURCE_DIR}/../../containers_cpp/include @@ -22,6 +23,6 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() add_executable(examples ${EXAMPLES_SOURCES}) -target_link_libraries(examples embb_dataflow_cpp embb_algorithms_cpp embb_tasks_cpp +target_link_libraries(examples embb_dataflow_cpp embb_algorithms_cpp embb_tasks_cpp embb_mtapi_cpp embb_mtapi_c embb_base_cpp embb_base_c embb_containers_cpp ${compiler_libs}) CopyBin(BIN examples DEST ${local_install_dir}) diff --git a/doc/examples/main.cc b/doc/examples/main.cc index 08b2df6..f231db0 100644 --- a/doc/examples/main.cc +++ b/doc/examples/main.cc @@ -25,9 +25,11 @@ */ #include +#include void RunMTAPI_C(); void RunMTAPI_CPP(); +void RunTasks(); void RunDataflowLinear(); void RunDataflowNonLinear(); void RunSTLForEach(); @@ -45,6 +47,8 @@ void RunQueueExamples(); * Runs all examples and tests their correctness. */ int main() { + embb_thread_set_max_count(1024); + std::cout << "Running examples ..." << std::endl; std::cout << "RunMTAPI_C() ..." << std::endl; @@ -55,6 +59,10 @@ int main() { RunMTAPI_CPP(); std::cout << "RunMTAPI_CPP() ... done" << std::endl; + std::cout << "RunTasks() ..." << std::endl; + RunTasks(); + std::cout << "RunTasks() ... done" << std::endl; + std::cout << "RunDataflowLinear() ..." << std::endl; RunDataflowLinear(); std::cout << "RunDataflowLinear() ... done" << std::endl; diff --git a/doc/examples/mtapi/mtapi_cpp-fragmented.cc b/doc/examples/mtapi/mtapi_cpp-fragmented.cc new file mode 100644 index 0000000..a87f11b --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp-fragmented.cc @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2014-2015, Siemens AG. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include + +#include "mtapi/mtapi_check_status-snippet.h" +#include "mtapi/mtapi_cpp_domain_node_id-snippet.h" + +static +#include "mtapi/mtapi_c_action_signature-snippet.h" +#include "mtapi/mtapi_c_validate_arguments-snippet.h" +#include "mtapi/mtapi_c_validate_result_buffer-snippet.h" + /* get the node instance */ +#include "mtapi/mtapi_cpp_get_node-snippet.h" + /* calculate */ +#include "mtapi/mtapi_terminating_condition-snippet.h" + /* first recursive call spawned as task (x = fib(n - 1);) */ +#include "mtapi/mtapi_cpp_calc_task-snippet.h" + /* second recursive call can be called directly (y = fib(n - 2);) */ +#include "mtapi/mtapi_c_calc_direct-snippet.h" + /* wait for completion */ +#include "mtapi/mtapi_cpp_wait_task-snippet.h" + /* add the two preceeding numbers */ +#include "mtapi/mtapi_write_back-snippet.h" + +static +int fibonacci(int n) { +#include "mtapi/mtapi_cpp_initialize-snippet.h" +#include "mtapi/mtapi_cpp_register_action-snippet.h" +#include "mtapi/mtapi_cpp_get_node-snippet.h" + /* start calculation */ +#include "mtapi/mtapi_cpp_start_task-snippet.h" + /* wait for task completion */ + mtapi_status_t status = task.Wait(MTAPI_INFINITE); + MTAPI_CHECK_STATUS(status); +#include "mtapi/mtapi_cpp_finalize-snippet.h" + return result; +} + +void RunMTAPI_CPP() { + int result = fibonacci(6); + std::cout << "result: " << result << std::endl; +} diff --git a/doc/examples/mtapi/mtapi_cpp_calc_task-snippet.h b/doc/examples/mtapi/mtapi_cpp_calc_task-snippet.h new file mode 100644 index 0000000..aad4e1e --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_calc_task-snippet.h @@ -0,0 +1,3 @@ + int a = n - 1; + int x; + embb::mtapi::Task task = node.Start(fibonacciJob, &a, &x); diff --git a/doc/examples/mtapi/mtapi_cpp_domain_node_id-snippet.h b/doc/examples/mtapi/mtapi_cpp_domain_node_id-snippet.h new file mode 100644 index 0000000..8e16d04 --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_domain_node_id-snippet.h @@ -0,0 +1,5 @@ +#define THIS_DOMAIN_ID 1 +#define THIS_NODE_ID 1 + +#define FIBONACCI_JOB 1 +embb::mtapi::Job fibonacciJob; diff --git a/doc/examples/mtapi/mtapi_cpp_finalize-snippet.h b/doc/examples/mtapi/mtapi_cpp_finalize-snippet.h new file mode 100644 index 0000000..5061b36 --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_finalize-snippet.h @@ -0,0 +1,2 @@ + /* finalize the node */ + embb::mtapi::Node::Finalize(); diff --git a/doc/examples/mtapi/mtapi_cpp_get_node-snippet.h b/doc/examples/mtapi/mtapi_cpp_get_node-snippet.h new file mode 100644 index 0000000..b91d187 --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_get_node-snippet.h @@ -0,0 +1 @@ + embb::mtapi::Node& node = embb::mtapi::Node::GetInstance(); diff --git a/doc/examples/mtapi/mtapi_cpp_initialize-snippet.h b/doc/examples/mtapi/mtapi_cpp_initialize-snippet.h new file mode 100644 index 0000000..859b55a --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_initialize-snippet.h @@ -0,0 +1,2 @@ + /* initialize the node with default attributes */ + embb::mtapi::Node::Initialize(THIS_DOMAIN_ID, THIS_NODE_ID); diff --git a/doc/examples/mtapi/mtapi_cpp_register_action-snippet.h b/doc/examples/mtapi/mtapi_cpp_register_action-snippet.h new file mode 100644 index 0000000..beeea5a --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_register_action-snippet.h @@ -0,0 +1,9 @@ + /* create action */ + embb::mtapi::Action fibonacciAction( + FIBONACCI_JOB, /* action ID, defined by the + application */ + (fibonacciActionFunction) /* action function */ + ); + + /* get job */ + fibonacciJob = embb::mtapi::Job(FIBONACCI_JOB, THIS_DOMAIN_ID); diff --git a/doc/examples/mtapi/mtapi_cpp_start_task-snippet.h b/doc/examples/mtapi/mtapi_cpp_start_task-snippet.h new file mode 100644 index 0000000..cf1f908 --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_start_task-snippet.h @@ -0,0 +1,2 @@ + int result; + embb::mtapi::Task task = node.Start(fibonacciJob, &n, &result); diff --git a/doc/examples/mtapi/mtapi_cpp_wait_task-snippet.h b/doc/examples/mtapi/mtapi_cpp_wait_task-snippet.h new file mode 100644 index 0000000..21637fd --- /dev/null +++ b/doc/examples/mtapi/mtapi_cpp_wait_task-snippet.h @@ -0,0 +1,2 @@ + mtapi_status_t status = task.Wait(MTAPI_INFINITE); + MTAPI_CHECK_STATUS(status); diff --git a/doc/examples/tasks/tasks_cpp-fragmented.cc b/doc/examples/tasks/tasks_cpp-fragmented.cc index 95b5143..4e13885 100644 --- a/doc/examples/tasks/tasks_cpp-fragmented.cc +++ b/doc/examples/tasks/tasks_cpp-fragmented.cc @@ -58,7 +58,7 @@ int fibonacci(int n) { return result; } -void RunMTAPI_CPP() { +void RunTasks() { int result = fibonacci(6); std::cout << "result: " << result << std::endl; }