Commit f2dc8700 by Tobias Fuchs

Merge branch 'development' into embb327_llx_scx

parents 5f3e1399 5abeb065
Embedded Multicore Building Blocks (EMB²)
=========================================
Version 0.2.3
Version 0.3.0
-------------
### Features:
- mtapi_c:
- Implemented action plugin API
- Implemented load balancing for distributed/heterogeneous systems
- Implemented OpenCL action plugin
- Implemented network action plugin
- mtapi_cpp:
- Added support for distributed/heterogeneous systems
### Changes and improvements:
- mtapi_c:
- Added multi-instance task support and test
- Improved notification of worker threads
- mtapi_cpp:
- Moved interface for homogeneous systems to tasks_cpp
- base_cpp:
- Moved tick types to internal namespace and added duration typedefs
- dataflow_cpp:
- Removed spinlocks
- Simplified registration of processes (only sources need to be added)
- Increased number of task queues in unit test
- Added assertion in unit test
- Improved exception handling
- Removed stray include
- Refactored to use tasks_cpp
- algorithms_cpp:
- Restricted partitioners to random access iterators
- Added unit tests for partitioners on large ranges
- Refactored to use tasks_cpp
### Bug fixes:
- Fixed freeing of temporary buffer in MergeSortAllocate
- Fixed minor bugs in mtapi_c
- Fixed paths in Doxyfile.in template
- Fixed unit test for dataflow_cpp
- Fixed wait-free SPSC queue
### Build system:
- Fixed compilation for newer CMake Versions (>= 3.1)
- Changed task test to avoid Jenkins timeout
- Changed CMakeLists to avoid error if policy is unknown
- Added mtapi_network_c and mtapi_opencl_c to root CMakeLists
- Added tasks_cpp to test scripts / batch file
- Fixed cpplint warnings
### Documentation:
- Extended tutorial and examples regarding support for distributed/heterogeneous systems including plugins and new task interface
- Added Doxygen documentation for mtapi_opencl_c and mtapi_network_c
- Added Doxygen documentation to mtapi_ext.h
- Updated README and removed limitation to homogeneous systems
- Added missing concurrency tags in mtapi_cpp
Version 0.2.3
-------------
### Features:
- None
### Changes and improvements:
- Changed use of partitioners in ForEach, Reduce, Scan, Count, and MergeSort
......@@ -21,8 +72,10 @@ Version 0.2.3
- Added tests for Thread::ID (base_cpp), ExecutionPolicy (mtapi_cpp), and error cases in mtapi_c
- Added tests on empty and negative input ranges in algorithms
### Features:
- None
### Bug fixes:
- Fixed freeing of temporary buffer in MergeSortAllocate
- Fixed minor bugs in mtapi_c
- Fixed paths in Doxyfile.in template
### Build system:
- Added option to CMake to toggle automatic initialization of MTAPI C++ interface
......@@ -43,17 +96,8 @@ Version 0.2.3
Version 0.2.2
-------------
### Bug fixes:
- Fixed 64bit problem in atomics
- Fixed bug in dataflow_cpp causing network to hang
- Fixed bug in conversion of core_set
- Fixed fetch-and-add implementation to support armv7-a
- Fixed missing freeing of mutex attributes in case of error
- Fixed bug where closure was allocated with Allocation::New but deleted with operator delete
- Fixed inconsistent naming of unit test cases
- Fixed memory allocation in hazard pointer implementation by replacing calls to new and delete with EMB²-specific functions
- Fixed memory leak in tests for containers
- Fixed affinity implementation for FreeBSD
### Features:
- None
### Changes and improvements:
- Added checks for memory leaks in tests
......@@ -66,8 +110,17 @@ Version 0.2.2
- Added assert in embb_tss_get
- Moved ExecutionPolicy from algorithms to mtapi_cpp, removed Affinity
### Features:
- None
### Bug fixes:
- Fixed 64bit problem in atomics
- Fixed bug in dataflow_cpp causing network to hang
- Fixed bug in conversion of core_set
- Fixed fetch-and-add implementation to support armv7-a
- Fixed missing freeing of mutex attributes in case of error
- Fixed bug where closure was allocated with Allocation::New but deleted with operator delete
- Fixed inconsistent naming of unit test cases
- Fixed memory allocation in hazard pointer implementation by replacing calls to new and delete with EMB²-specific functions
- Fixed memory leak in tests for containers
- Fixed affinity implementation for FreeBSD
### Build system:
- Removed cppcheck warnings
......@@ -89,14 +142,17 @@ Version 0.2.2
Version 0.2.1
-------------
### Features:
- Added embb_core_count_available() implementation for FreeBSD.
### Changes and improvements:
- None
### Bug fixes:
- Fixed implementation of atomic operations on ARM.
- Fixed bug in HelpScan routine of hazard pointer implementation.
- Replaced inclusion of non-standard header malloc.h with stdlib.h.
### Features:
- Added embb_core_count_available() implementation for FreeBSD.
### Build system:
- Added initial support for Clang.
- Added initial support for Travis.
......@@ -111,7 +167,7 @@ Version 0.2.1
### Documentation:
- Updated README file, created CHANGELOG file, and added markdown support.
- Corrected license in COPYING.md (BSD 2-clause).
- Corrected license in COPYING file (BSD 2-clause).
- Changed default Doxygen level for API to two.
- Added check for Doxyfile.in (if not present, do not add Doxygen target).
- Added PDF image of building blocks and updated tutorial.tex.
......
......@@ -27,8 +27,8 @@ cmake_minimum_required (VERSION 2.8.9)
# Version number
set (EMBB_BASE_VERSION_MAJOR 0)
set (EMBB_BASE_VERSION_MINOR 2)
set (EMBB_BASE_VERSION_PATCH 4)
set (EMBB_BASE_VERSION_MINOR 3)
set (EMBB_BASE_VERSION_PATCH 0)
# Fix compilation for CMake versions >= 3.1
#
......
......@@ -154,7 +154,7 @@ class WaitFreeSPSCQueue {
/**
* Creates a queue with at least the specified capacity.
*
* \memory Allocates \c 2^k elements of type \c Type, where \k is the
* \memory Allocates \c 2^k elements of type \c Type, where \c k is the
* smallest number such that <tt>capacity <= 2^k</tt> holds.
*
* \notthreadsafe
......
......@@ -290,7 +290,7 @@ QueueTestSingleThreadEnqueueDequeue_ThreadMethod() {
}
// Oversized amount should not be larger than the original capacity
PT_ASSERT_LT(oversized_count, 2 * n_queue_size);
// Dequeue the expected amount of elements
for (int i = 0; i != n_queue_size; ++i) {
element_t dequ(0, -1);
......
......@@ -149,7 +149,7 @@ SimpleTest::SimpleTest() {
void SimpleTest::TestBasic() {
// All available cores
embb::base::CoreSet core_set(true);
int num_cores = core_set.Count();
unsigned int num_cores = core_set.Count();
embb::tasks::Node::Initialize(
MTAPI_DOMAIN_ID,
MTAPI_NODE_ID,
......@@ -160,8 +160,7 @@ void SimpleTest::TestBasic() {
// with (max_queues + 1), see defect embb449
num_cores + 1, // max queues (default: 16)
1024, // queue capacity (default: 1024)
4 // num priorities (default: 4)
);
4); // num priorities (default: 4)
for (int ii = 0; ii < 10000; ii++) {
ArraySink<TEST_COUNT> asink;
......
......@@ -25,10 +25,10 @@
*/
#include <embb/mtapi/c/mtapi.h>
#include "mtapi_network_c_header-snippet.h"
#include "mtapi/mtapi_network_c_header-snippet.h"
#include <embb/base/c/internal/unused.h>
#include "mtapi_check_status-snippet.h"
#include "mtapi/mtapi_check_status-snippet.h"
#define NETWORK_DOMAIN 1
#define NETWORK_LOCAL_NODE 3
......@@ -36,7 +36,7 @@
#define NETWORK_REMOTE_NODE 3
#define NETWORK_REMOTE_JOB 4
#include "mtapi_network_c_action_function-snippet.h"
#include "mtapi/mtapi_network_c_action_function-snippet.h"
void RunMTAPI_C_Network() {
mtapi_status_t status;
......@@ -61,13 +61,13 @@ void RunMTAPI_C_Network() {
&status);
MTAPI_CHECK_STATUS(status);
#include "mtapi_network_c_plugin_initialize-snippet.h"
#include "mtapi/mtapi_network_c_plugin_initialize-snippet.h"
MTAPI_CHECK_STATUS(status);
#include "mtapi_network_c_remote_action_create-snippet.h"
#include "mtapi/mtapi_network_c_remote_action_create-snippet.h"
MTAPI_CHECK_STATUS(status);
#include "mtapi_network_c_local_action_create-snippet.h"
#include "mtapi/mtapi_network_c_local_action_create-snippet.h"
MTAPI_CHECK_STATUS(status);
job = mtapi_job_get(NETWORK_LOCAL_JOB, NETWORK_DOMAIN, &status);
......@@ -94,7 +94,7 @@ void RunMTAPI_C_Network() {
}
}
#include "mtapi_network_c_plugin_finalize-snippet.h"
#include "mtapi/mtapi_network_c_plugin_finalize-snippet.h"
MTAPI_CHECK_STATUS(status);
mtapi_finalize(&status);
......
......@@ -25,16 +25,16 @@
*/
#include <embb/mtapi/c/mtapi.h>
#include "mtapi_opencl_c_header-snippet.h"
#include "mtapi/mtapi_opencl_c_header-snippet.h"
#include "mtapi_check_status-snippet.h"
#include "mtapi/mtapi_check_status-snippet.h"
#define OPENCL_DOMAIN 1
#define OPENCL_NODE 2
#define OPENCL_JOB 2
// OpenCL Kernel Function for element by element vector addition
#include "mtapi_opencl_c_kernel-snippet.h"
#include "mtapi/mtapi_opencl_c_kernel-snippet.h"
void RunMTAPI_C_OpenCL() {
mtapi_status_t status;
......@@ -59,10 +59,10 @@ void RunMTAPI_C_OpenCL() {
&status);
MTAPI_CHECK_STATUS(status);
#include "mtapi_opencl_c_plugin_initialize-snippet.h"
#include "mtapi/mtapi_opencl_c_plugin_initialize-snippet.h"
MTAPI_CHECK_STATUS(status);
#include "mtapi_opencl_c_action_create-snippet.h"
#include "mtapi/mtapi_opencl_c_action_create-snippet.h"
MTAPI_CHECK_STATUS(status);
status = MTAPI_ERR_UNKNOWN;
......@@ -90,7 +90,7 @@ void RunMTAPI_C_OpenCL() {
}
}
#include "mtapi_opencl_c_plugin_finalize-snippet.h"
#include "mtapi/mtapi_opencl_c_plugin_finalize-snippet.h"
MTAPI_CHECK_STATUS(status);
mtapi_finalize(&status);
......
......@@ -42,15 +42,15 @@
#define PLUGIN_NODE_ID 1
#define PLUGIN_JOB_ID 1
#include "mtapi_check_status-snippet.h"
#include "mtapi/mtapi_check_status-snippet.h"
#include "mtapi_c_plugin_task_schedule-snippet.h"
#include "mtapi/mtapi_c_plugin_task_schedule-snippet.h"
#include "mtapi_c_plugin_task_start_cb-snippet.h"
#include "mtapi/mtapi_c_plugin_task_start_cb-snippet.h"
#include "mtapi_c_plugin_task_cancel_cb-snippet.h"
#include "mtapi/mtapi_c_plugin_task_cancel_cb-snippet.h"
#include "mtapi_c_plugin_action_finalize_cb-snippet.h"
#include "mtapi/mtapi_c_plugin_action_finalize_cb-snippet.h"
void RunMTAPI_C_Plugin() {
mtapi_status_t status;
......@@ -66,13 +66,13 @@ void RunMTAPI_C_Plugin() {
&status);
MTAPI_CHECK_STATUS(status);
#include "mtapi_c_plugin_action_create-snippet.h"
#include "mtapi/mtapi_c_plugin_action_create-snippet.h"
MTAPI_CHECK_STATUS(status);
#include "mtapi_c_plugin_get_job-snippet.h"
#include "mtapi/mtapi_c_plugin_get_job-snippet.h"
MTAPI_CHECK_STATUS(status);
#include "mtapi_c_plugin_task_start-snippet.h"
#include "mtapi/mtapi_c_plugin_task_start-snippet.h"
MTAPI_CHECK_STATUS(status);
mtapi_task_wait(task, MTAPI_INFINITE, &status);
......
......@@ -191,8 +191,6 @@ REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
CLANG_ASSISTED_PARSING = NO
CLANG_OPTIONS =
# ==============================================================================
# Options related to alphabetical class index
......
......@@ -34,9 +34,9 @@ priority inversion. As another advantage in real-time systems, the
algorithms and data structures give certain progress guarantees. For
example, wait-free data structures guarantee system-wide progress which
means that every operation completes within a finite number of steps
independently of any other concurrent operations on the same data
structure.
independently of any other concurrent operations on the same
data structure.
\image html ../images/embb.png
\image html ./images/embb.png
*/
......@@ -149,15 +149,23 @@ typedef void(*mtapi_ext_plugin_action_finalize_function_t)(
* \ingroup C_MTAPI_EXT
*/
mtapi_action_hndl_t mtapi_ext_plugin_action_create(
MTAPI_IN mtapi_job_id_t job_id,
MTAPI_IN mtapi_job_id_t job_id, /**< [in] Job id */
MTAPI_IN mtapi_ext_plugin_task_start_function_t task_start_function,
/**< [in] Task start function */
MTAPI_IN mtapi_ext_plugin_task_cancel_function_t task_cancel_function,
/**< [in] Task cancel function */
MTAPI_IN mtapi_ext_plugin_action_finalize_function_t action_finalize_function,
/**< [in] Finalize action function */
MTAPI_IN void* plugin_data,
/**< [in] Pointer to plugin data */
MTAPI_IN void* node_local_data,
/**< [in] Pointer to node local data */
MTAPI_IN mtapi_size_t node_local_data_size,
/**< [in] Size of node local data */
MTAPI_IN mtapi_action_attributes_t* attributes,
MTAPI_OUT mtapi_status_t* status
/**< [out] Pointer to attributes */
MTAPI_OUT mtapi_status_t* status/**< [out] Pointer to error code,
may be \c MTAPI_NULL */
);
......
......@@ -281,8 +281,8 @@ static mtapi_task_hndl_t embb_mtapi_task_start(
for (mtapi_uint_t kk = 0; kk < task->attributes.num_instances;
kk++) {
was_scheduled = was_scheduled &
embb_mtapi_scheduler_schedule_task(scheduler, task, kk);
was_scheduled = (mtapi_boolean_t)(was_scheduled &
embb_mtapi_scheduler_schedule_task(scheduler, task, kk));
}
}
......
......@@ -51,7 +51,10 @@ class StatusException : public embb::base::Exception {
}
/**
* Returns the code of the exception.
* Code associated with this exception
*
* \returns An integer representing the code of the exception
*
* \waitfree
*/
virtual int Code() const { return EMBB_ERROR; }
......
......@@ -270,7 +270,6 @@ void mtapi_opencl_plugin_initialize(
NULL, NULL, &err);
}
if (CL_SUCCESS == err) {
size_t work_group_size;
err = clGetDeviceInfo(plugin->device_id, CL_DEVICE_MAX_WORK_GROUP_SIZE,
sizeof(size_t), &plugin->work_group_size, NULL);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment