Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
FORMUS3IC_LAS3
/
embb
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
a7bc2f9b
authored
Mar 24, 2015
by
Marcus Winter
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
algorithms_cpp: refactored to use tasks_cpp
parent
52da087e
Show whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
173 additions
and
174 deletions
+173
-174
algorithms_cpp/CMakeLists.txt
+4
-4
algorithms_cpp/include/embb/algorithms/count.h
+7
-7
algorithms_cpp/include/embb/algorithms/for_each.h
+4
-4
algorithms_cpp/include/embb/algorithms/internal/count-inl.h
+2
-2
algorithms_cpp/include/embb/algorithms/internal/for_each-inl.h
+13
-13
algorithms_cpp/include/embb/algorithms/internal/merge_sort-inl.h
+13
-13
algorithms_cpp/include/embb/algorithms/internal/partition-inl.h
+1
-1
algorithms_cpp/include/embb/algorithms/internal/partition.h
+1
-1
algorithms_cpp/include/embb/algorithms/internal/quick_sort-inl.h
+13
-13
algorithms_cpp/include/embb/algorithms/internal/reduce-inl.h
+14
-14
algorithms_cpp/include/embb/algorithms/internal/scan-inl.h
+17
-19
algorithms_cpp/include/embb/algorithms/invoke.h
+28
-27
algorithms_cpp/include/embb/algorithms/merge_sort.h
+9
-9
algorithms_cpp/include/embb/algorithms/quick_sort.h
+6
-6
algorithms_cpp/include/embb/algorithms/reduce.h
+5
-5
algorithms_cpp/include/embb/algorithms/scan.h
+5
-5
algorithms_cpp/test/count_test.cc
+3
-3
algorithms_cpp/test/for_each_test.cc
+5
-5
algorithms_cpp/test/main.cc
+3
-3
algorithms_cpp/test/merge_sort_test.cc
+6
-6
algorithms_cpp/test/quick_sort_test.cc
+5
-5
algorithms_cpp/test/reduce_test.cc
+4
-4
algorithms_cpp/test/scan_test.cc
+4
-4
algorithms_cpp/test/zip_iterator_test.cc
+1
-1
No files found.
algorithms_cpp/CMakeLists.txt
View file @
a7bc2f9b
...
...
@@ -17,18 +17,18 @@ include_directories(${EMBB_ALGORITHMS_CPP_INCLUDE_DIRS}
${
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_BINARY_DIR
}
/../
mtapi
_cpp/include
)
${
CMAKE_CURRENT_SOURCE_DIR
}
/../
tasks
_cpp/include
${
CMAKE_CURRENT_BINARY_DIR
}
/../
tasks
_cpp/include
)
add_library
(
embb_algorithms_cpp
${
EMBB_ALGORITHMS_CPP_SOURCES
}
${
EMBB_ALGORITHMS_CPP_HEADERS
}
)
target_link_libraries
(
embb_algorithms_cpp embb_
mtapi
_cpp
)
target_link_libraries
(
embb_algorithms_cpp embb_
tasks
_cpp
)
if
(
BUILD_TESTS STREQUAL ON
)
include_directories
(
${
CMAKE_CURRENT_BINARY_DIR
}
/../partest/include
)
add_executable
(
embb_algorithms_cpp_test
${
EMBB_ALGORITHMS_CPP_TEST_SOURCES
}
)
target_link_libraries
(
embb_algorithms_cpp_test embb_algorithms_cpp
embb_
mtapi
_cpp embb_mtapi_c partest embb_base_cpp
embb_
tasks
_cpp embb_mtapi_c partest embb_base_cpp
embb_base_c
${
compiler_libs
}
)
CopyBin
(
BIN embb_algorithms_cpp_test DEST
${
local_install_dir
}
)
endif
()
...
...
algorithms_cpp/include/embb/algorithms/count.h
View file @
a7bc2f9b
...
...
@@ -27,7 +27,7 @@
#ifndef EMBB_ALGORITHMS_COUNT_H_
#define EMBB_ALGORITHMS_COUNT_H_
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <iterator>
namespace
embb
{
...
...
@@ -132,7 +132,7 @@ typename std::iterator_traits<RAI>::difference_type Count(
RAI
first
,
RAI
last
,
const
ValueType
&
value
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
);
...
...
@@ -145,7 +145,7 @@ typename std::iterator_traits<RAI>::difference_type Count(
RAI
last
,
const
ValueType
&
value
)
{
return
Count
(
first
,
last
,
value
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
return
Count
(
first
,
last
,
value
,
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -156,7 +156,7 @@ typename std::iterator_traits<RAI>::difference_type Count(
RAI
first
,
RAI
last
,
const
ValueType
&
value
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
return
Count
(
first
,
last
,
value
,
policy
,
0
);
}
...
...
@@ -169,7 +169,7 @@ typename std::iterator_traits<RAI>::difference_type CountIf(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
);
...
...
@@ -182,7 +182,7 @@ typename std::iterator_traits<RAI>::difference_type CountIf(
RAI
last
,
ComparisonFunction
comparison
)
{
return
CountIf
(
first
,
last
,
comparison
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
return
CountIf
(
first
,
last
,
comparison
,
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -193,7 +193,7 @@ typename std::iterator_traits<RAI>::difference_type CountIf(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
return
CountIf
(
first
,
last
,
comparison
,
policy
,
0
);
}
...
...
algorithms_cpp/include/embb/algorithms/for_each.h
View file @
a7bc2f9b
...
...
@@ -27,7 +27,7 @@
#ifndef EMBB_ALGORITHMS_FOR_EACH_H_
#define EMBB_ALGORITHMS_FOR_EACH_H_
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
namespace
embb
{
namespace
algorithms
{
...
...
@@ -88,7 +88,7 @@ void ForEach(
RAI
first
,
RAI
last
,
Function
unary
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
);
...
...
@@ -101,7 +101,7 @@ void ForEach(
RAI
last
,
Function
unary
)
{
ForEach
(
first
,
last
,
unary
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
ForEach
(
first
,
last
,
unary
,
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -112,7 +112,7 @@ void ForEach(
RAI
first
,
RAI
last
,
Function
unary
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
ForEach
(
first
,
last
,
unary
,
policy
,
0
);
}
...
...
algorithms_cpp/include/embb/algorithms/internal/count-inl.h
View file @
a7bc2f9b
...
...
@@ -83,7 +83,7 @@ class FunctionComparisonFunction{
template
<
typename
RAI
,
typename
ValueType
>
typename
std
::
iterator_traits
<
RAI
>::
difference_type
Count
(
RAI
first
,
RAI
last
,
const
ValueType
&
value
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
typename
std
::
iterator_traits
<
RAI
>::
difference_type
Difference
;
return
Reduce
(
first
,
last
,
Difference
(
0
),
std
::
plus
<
Difference
>
(),
internal
::
ValueComparisonFunction
<
ValueType
>
(
value
),
policy
,
...
...
@@ -93,7 +93,7 @@ typename std::iterator_traits<RAI>::difference_type
template
<
typename
RAI
,
typename
ComparisonFunction
>
typename
std
::
iterator_traits
<
RAI
>::
difference_type
CountIf
(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
typename
std
::
iterator_traits
<
RAI
>::
difference_type
Difference
;
return
Reduce
(
first
,
last
,
Difference
(
0
),
std
::
plus
<
Difference
>
(),
internal
::
FunctionComparisonFunction
<
ComparisonFunction
>
...
...
algorithms_cpp/include/embb/algorithms/internal/for_each-inl.h
View file @
a7bc2f9b
...
...
@@ -30,7 +30,7 @@
#include <cassert>
#include <embb/base/exceptions.h>
#include <embb/
mtapi/mtapi
.h>
#include <embb/
tasks/tasks
.h>
#include <embb/algorithms/internal/partition.h>
#include <embb/algorithms/zip_iterator.h>
...
...
@@ -46,13 +46,13 @@ class ForEachFunctor {
* Constructs a for-each functor with arguments.
*/
ForEachFunctor
(
size_t
chunk_first
,
size_t
chunk_last
,
Function
unary
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
const
BlockSizePartitioner
<
RAI
>&
partitioner
)
:
chunk_first_
(
chunk_first
),
chunk_last_
(
chunk_last
),
unary_
(
unary
),
policy_
(
policy
),
partitioner_
(
partitioner
)
{
}
void
Action
(
mtapi
::
TaskContext
&
)
{
void
Action
(
embb
::
tasks
::
TaskContext
&
)
{
if
(
chunk_first_
==
chunk_last_
)
{
// Leaf case, recursed to single chunk. Do work on chunk:
ChunkDescriptor
<
RAI
>
chunk
=
partitioner_
[
chunk_first_
];
...
...
@@ -71,12 +71,12 @@ class ForEachFunctor {
self_t
functor_r
(
chunk_split_index
+
1
,
chunk_last_
,
unary_
,
policy_
,
partitioner_
);
mtapi
::
Task
task_l
=
mtapi
::
Node
::
GetInstance
().
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task_l
=
embb
::
tasks
::
Node
::
GetInstance
().
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_l
,
&
self_t
::
Action
),
policy_
));
mtapi
::
Task
task_r
=
mtapi
::
Node
::
GetInstance
().
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task_r
=
embb
::
tasks
::
Node
::
GetInstance
().
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_r
,
&
self_t
::
Action
),
policy_
));
task_l
.
Wait
(
MTAPI_INFINITE
);
...
...
@@ -91,7 +91,7 @@ class ForEachFunctor {
size_t
chunk_first_
;
size_t
chunk_last_
;
Function
unary_
;
const
embb
::
mtapi
::
ExecutionPolicy
&
policy_
;
const
embb
::
tasks
::
ExecutionPolicy
&
policy_
;
const
BlockSizePartitioner
<
RAI
>&
partitioner_
;
/**
...
...
@@ -102,7 +102,7 @@ class ForEachFunctor {
template
<
typename
RAI
,
typename
Function
>
void
ForEachRecursive
(
RAI
first
,
RAI
last
,
Function
unary
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
typename
std
::
iterator_traits
<
RAI
>::
difference_type
difference_type
;
difference_type
distance
=
std
::
distance
(
first
,
last
);
if
(
distance
==
0
)
{
...
...
@@ -114,7 +114,7 @@ void ForEachRecursive(RAI first, RAI last, Function unary,
if
(
num_cores
==
0
)
{
EMBB_THROW
(
embb
::
base
::
ErrorException
,
"No cores in execution policy"
);
}
mtapi
::
Node
&
node
=
mtapi
::
Node
::
GetInstance
();
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
// Determine actually used block size
if
(
block_size
==
0
)
{
block_size
=
(
static_cast
<
size_t
>
(
distance
)
/
num_cores
);
...
...
@@ -132,7 +132,7 @@ void ForEachRecursive(RAI first, RAI last, Function unary,
ForEachFunctor
<
RAI
,
Function
>
functor
(
0
,
partitioner
.
Size
()
-
1
,
unary
,
policy
,
partitioner
);
mtapi
::
Task
task
=
node
.
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor
,
&
ForEachFunctor
<
RAI
,
Function
>::
Action
),
policy
));
...
...
@@ -141,7 +141,7 @@ void ForEachRecursive(RAI first, RAI last, Function unary,
template
<
typename
RAI
,
typename
Function
>
void
ForEachIteratorCheck
(
RAI
first
,
RAI
last
,
Function
unary
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
,
std
::
random_access_iterator_tag
)
{
return
ForEachRecursive
(
first
,
last
,
unary
,
policy
,
block_size
);
}
...
...
@@ -150,7 +150,7 @@ void ForEachIteratorCheck(RAI first, RAI last, Function unary,
template
<
typename
RAI
,
typename
Function
>
void
ForEach
(
RAI
first
,
const
RAI
last
,
Function
unary
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typename
std
::
iterator_traits
<
RAI
>::
iterator_category
category
;
internal
::
ForEachIteratorCheck
(
first
,
last
,
unary
,
policy
,
block_size
,
category
);
...
...
algorithms_cpp/include/embb/algorithms/internal/merge_sort-inl.h
View file @
a7bc2f9b
...
...
@@ -32,7 +32,7 @@
#include <functional>
#include <embb/base/exceptions.h>
#include <embb/
mtapi/mtapi
.h>
#include <embb/
tasks/tasks
.h>
#include <embb/algorithms/internal/partition.h>
namespace
embb
{
...
...
@@ -50,7 +50,7 @@ class MergeSortFunctor {
MergeSortFunctor
(
size_t
chunk_first
,
size_t
chunk_last
,
RAITemp
temporary_first
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
const
BlockSizePartitioner
<
RAI
>&
partitioner
,
const
RAI
&
global_first
,
int
depth
)
:
chunk_first_
(
chunk_first
),
chunk_last_
(
chunk_last
),
...
...
@@ -59,7 +59,7 @@ class MergeSortFunctor {
global_first_
(
global_first
),
depth_
(
depth
)
{
}
void
Action
(
mtapi
::
TaskContext
&
)
{
void
Action
(
embb
::
tasks
::
TaskContext
&
)
{
size_t
chunk_split_index
=
(
chunk_first_
+
chunk_last_
)
/
2
;
if
(
chunk_first_
==
chunk_last_
)
{
// Leaf case: recurse into a single chunk's elements:
...
...
@@ -77,13 +77,13 @@ class MergeSortFunctor {
temp_first_
,
comparison_
,
policy_
,
partitioner_
,
global_first_
,
depth_
+
1
);
mtapi
::
Node
&
node
=
mtapi
::
Node
::
GetInstance
();
mtapi
::
Task
task_l
=
node
.
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
embb
::
tasks
::
Task
task_l
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_l
,
&
self_t
::
Action
),
policy_
));
mtapi
::
Task
task_r
=
node
.
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task_r
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_r
,
&
self_t
::
Action
),
policy_
));
task_l
.
Wait
(
MTAPI_INFINITE
);
...
...
@@ -177,7 +177,7 @@ class MergeSortFunctor {
size_t
chunk_last_
;
RAITemp
temp_first_
;
ComparisonFunction
comparison_
;
const
embb
::
mtapi
::
ExecutionPolicy
&
policy_
;
const
embb
::
tasks
::
ExecutionPolicy
&
policy_
;
const
BlockSizePartitioner
<
RAI
>&
partitioner_
;
const
RAI
&
global_first_
;
int
depth_
;
...
...
@@ -219,7 +219,7 @@ void MergeSortIteratorCheck(
RAI
last
,
RAITemp
temporary_first
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
,
std
::
random_access_iterator_tag
)
{
...
...
@@ -257,8 +257,8 @@ void MergeSortIteratorCheck(
partitioner
,
first
,
0
);
mtapi
::
Task
task
=
embb
::
mtapi
::
Node
::
GetInstance
().
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task
=
embb
::
tasks
::
Node
::
GetInstance
().
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor
,
&
functor_t
::
Action
),
policy
));
...
...
@@ -269,7 +269,7 @@ void MergeSortIteratorCheck(
template
<
typename
RAI
,
typename
RAITemp
,
typename
ComparisonFunction
>
void
MergeSort
(
RAI
first
,
RAI
last
,
RAITemp
temporary_first
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
ComparisonFunction
comparison
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
typename
std
::
iterator_traits
<
RAI
>::
iterator_category
category
;
internal
::
MergeSortIteratorCheck
(
first
,
last
,
temporary_first
,
comparison
,
...
...
algorithms_cpp/include/embb/algorithms/internal/partition-inl.h
View file @
a7bc2f9b
...
...
@@ -93,7 +93,7 @@ ChunkPartitioner<ForwardIterator>::ChunkPartitioner(ForwardIterator first,
size
=
amountChunks
;
}
else
{
// if no concrete chunk size was given, use number of cores...
mtapi
::
Node
&
node
=
mtapi
::
Node
::
GetInstance
();
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
size
=
node
.
GetWorkerThreadCount
();
}
...
...
algorithms_cpp/include/embb/algorithms/internal/partition.h
View file @
a7bc2f9b
...
...
@@ -27,7 +27,7 @@
#ifndef EMBB_ALGORITHMS_INTERNAL_PARTITION_H_
#define EMBB_ALGORITHMS_INTERNAL_PARTITION_H_
#include <embb/
mtapi/mtapi
.h>
#include <embb/
tasks/tasks
.h>
namespace
embb
{
namespace
algorithms
{
...
...
algorithms_cpp/include/embb/algorithms/internal/quick_sort-inl.h
View file @
a7bc2f9b
...
...
@@ -33,7 +33,7 @@
#include <functional>
#include <embb/base/exceptions.h>
#include <embb/
mtapi/mtapi
.h>
#include <embb/
tasks/tasks
.h>
#include <embb/algorithms/internal/partition.h>
namespace
embb
{
...
...
@@ -48,7 +48,7 @@ class QuickSortFunctor {
* Constructs a functor.
*/
QuickSortFunctor
(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
:
first_
(
first
),
last_
(
last
),
comparison_
(
comparison
),
policy_
(
policy
),
block_size_
(
block_size
)
{
}
...
...
@@ -56,7 +56,7 @@ class QuickSortFunctor {
/**
* MTAPI action function and starting point of the parallel quick sort.
*/
void
Action
(
mtapi
::
TaskContext
&
)
{
void
Action
(
embb
::
tasks
::
TaskContext
&
)
{
Difference
distance
=
last_
-
first_
;
if
(
distance
<=
1
)
{
return
;
...
...
@@ -68,15 +68,15 @@ class QuickSortFunctor {
SerialQuickSort
(
first_
,
mid
);
SerialQuickSort
(
mid
,
last_
);
}
else
{
mtapi
::
Node
&
node
=
mtapi
::
Node
::
GetInstance
();
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
QuickSortFunctor
functor_l
(
first_
,
mid
,
comparison_
,
policy_
,
block_size_
);
mtapi
::
Task
task_l
=
node
.
Spawn
(
mtapi
::
Action
(
base
::
MakeFun
ction
(
functor_l
,
&
QuickSortFunctor
::
Action
)));
embb
::
tasks
::
Task
task_l
=
node
.
Spawn
(
embb
::
tasks
::
A
ction
(
base
::
MakeFunction
(
functor_l
,
&
QuickSortFunctor
::
Action
)));
QuickSortFunctor
functor_r
(
mid
,
last_
,
comparison_
,
policy_
,
block_size_
);
mtapi
::
Task
task_r
=
node
.
Spawn
(
mtapi
::
Action
(
base
::
MakeFun
ction
(
functor_r
,
&
QuickSortFunctor
::
Action
)));
embb
::
tasks
::
Task
task_r
=
node
.
Spawn
(
embb
::
tasks
::
A
ction
(
base
::
MakeFunction
(
functor_r
,
&
QuickSortFunctor
::
Action
)));
task_l
.
Wait
(
MTAPI_INFINITE
);
task_r
.
Wait
(
MTAPI_INFINITE
);
}
...
...
@@ -87,7 +87,7 @@ class QuickSortFunctor {
RAI
first_
;
RAI
last_
;
ComparisonFunction
comparison_
;
const
embb
::
mtapi
::
ExecutionPolicy
&
policy_
;
const
embb
::
tasks
::
ExecutionPolicy
&
policy_
;
size_t
block_size_
;
typedef
typename
std
::
iterator_traits
<
RAI
>::
difference_type
Difference
;
...
...
@@ -189,10 +189,10 @@ class QuickSortFunctor {
template
<
typename
RAI
,
typename
ComparisonFunction
>
void
QuickSortIteratorCheck
(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
,
std
::
random_access_iterator_tag
)
{
embb
::
mtapi
::
Node
&
node
=
embb
::
mtapi
::
Node
::
GetInstance
();
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
typedef
typename
std
::
iterator_traits
<
RAI
>::
difference_type
difference_type
;
difference_type
distance
=
std
::
distance
(
first
,
last
);
if
(
distance
==
0
)
{
...
...
@@ -215,7 +215,7 @@ void QuickSortIteratorCheck(RAI first, RAI last,
}
QuickSortFunctor
<
RAI
,
ComparisonFunction
>
functor
(
first
,
last
,
comparison
,
policy
,
block_size
);
mtapi
::
Task
task
=
node
.
Spawn
(
mtapi
::
Action
(
base
::
MakeFunction
(
embb
::
tasks
::
Task
task
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor
,
&
QuickSortFunctor
<
RAI
,
ComparisonFunction
>::
Action
)));
task
.
Wait
(
MTAPI_INFINITE
);
}
...
...
@@ -224,7 +224,7 @@ void QuickSortIteratorCheck(RAI first, RAI last,
template
<
typename
RAI
,
typename
ComparisonFunction
>
void
QuickSort
(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
typename
std
::
iterator_traits
<
RAI
>::
iterator_category
category
;
internal
::
QuickSortIteratorCheck
(
first
,
last
,
comparison
,
policy
,
block_size
,
category
());
...
...
algorithms_cpp/include/embb/algorithms/internal/reduce-inl.h
View file @
a7bc2f9b
...
...
@@ -27,7 +27,7 @@
#ifndef EMBB_ALGORITHMS_INTERNAL_REDUCE_INL_H_
#define EMBB_ALGORITHMS_INTERNAL_REDUCE_INL_H_
#include <embb/
mtapi/mtapi
.h>
#include <embb/
tasks/tasks
.h>
#include <embb/algorithms/internal/partition.h>
#include <functional>
...
...
@@ -46,7 +46,7 @@ class ReduceFunctor {
ReturnType
neutral
,
ReductionFunction
reduction
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
const
BlockSizePartitioner
<
RAI
>&
partitioner
,
ReturnType
&
result
)
:
chunk_first_
(
chunk_first
),
chunk_last_
(
chunk_last
),
neutral_
(
neutral
),
...
...
@@ -54,7 +54,7 @@ class ReduceFunctor {
partitioner_
(
partitioner
),
result_
(
result
)
{
}
void
Action
(
mtapi
::
TaskContext
&
)
{
void
Action
(
embb
::
tasks
::
TaskContext
&
)
{
if
(
chunk_first_
==
chunk_last_
)
{
// Leaf case, recursed to single chunk. Do work on chunk:
ChunkDescriptor
<
RAI
>
chunk
=
partitioner_
[
chunk_first_
];
...
...
@@ -81,13 +81,13 @@ class ReduceFunctor {
neutral_
,
reduction_
,
transformation_
,
policy_
,
partitioner_
,
result_r
);
mtapi
::
Task
task_l
=
mtapi
::
Node
::
GetInstance
().
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task_l
=
embb
::
tasks
::
Node
::
GetInstance
().
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_l
,
&
self_t
::
Action
),
policy_
));
mtapi
::
Task
task_r
=
mtapi
::
Node
::
GetInstance
().
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task_r
=
embb
::
tasks
::
Node
::
GetInstance
().
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_r
,
&
self_t
::
Action
),
policy_
));
...
...
@@ -108,7 +108,7 @@ class ReduceFunctor {
ReturnType
neutral_
;
ReductionFunction
reduction_
;
TransformationFunction
transformation_
;
const
embb
::
mtapi
::
ExecutionPolicy
&
policy_
;
const
embb
::
tasks
::
ExecutionPolicy
&
policy_
;
const
BlockSizePartitioner
<
RAI
>&
partitioner_
;
ReturnType
&
result_
;
...
...
@@ -124,7 +124,7 @@ template<typename RAI, typename ReturnType, typename ReductionFunction,
ReturnType
ReduceRecursive
(
RAI
first
,
RAI
last
,
ReturnType
neutral
,
ReductionFunction
reduction
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
typename
std
::
iterator_traits
<
RAI
>::
difference_type
difference_type
;
difference_type
distance
=
std
::
distance
(
first
,
last
);
...
...
@@ -137,7 +137,7 @@ ReturnType ReduceRecursive(RAI first, RAI last, ReturnType neutral,
if
(
num_cores
==
0
)
{
EMBB_THROW
(
embb
::
base
::
ErrorException
,
"No cores in execution policy"
);
}
mtapi
::
Node
&
node
=
mtapi
::
Node
::
GetInstance
();
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
// Determine actually used block size
if
(
block_size
==
0
)
{
block_size
=
(
static_cast
<
size_t
>
(
distance
)
/
num_cores
);
...
...
@@ -162,8 +162,8 @@ ReturnType ReduceRecursive(RAI first, RAI last, ReturnType neutral,
policy
,
partitioner
,
result
);
mtapi
::
Task
task
=
node
.
Spawn
(
mtapi
::
Action
(
base
::
MakeFunction
(
embb
::
tasks
::
Task
task
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor
,
&
Functor
::
Action
),
policy
));
task
.
Wait
(
MTAPI_INFINITE
);
return
result
;
...
...
@@ -174,7 +174,7 @@ template<typename RAI, typename TransformationFunction,
ReturnType
ReduceIteratorCheck
(
RAI
first
,
RAI
last
,
ReductionFunction
reduction
,
TransformationFunction
transformation
,
ReturnType
neutral
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
,
std
::
random_access_iterator_tag
)
{
return
ReduceRecursive
(
first
,
last
,
neutral
,
reduction
,
transformation
,
...
...
@@ -188,7 +188,7 @@ template<typename RAI, typename ReturnType, typename ReductionFunction,
ReturnType
Reduce
(
RAI
first
,
RAI
last
,
ReturnType
neutral
,
ReductionFunction
reduction
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typename
std
::
iterator_traits
<
RAI
>::
iterator_category
category
;
return
internal
::
ReduceIteratorCheck
(
first
,
last
,
reduction
,
transformation
,
...
...
algorithms_cpp/include/embb/algorithms/internal/scan-inl.h
View file @
a7bc2f9b
...
...
@@ -29,8 +29,8 @@
#include <cassert>
#include <embb/base/exceptions.h>
#include <embb/
mtapi/mtapi
.h>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks/tasks
.h>
#include <embb/
tasks
/execution_policy.h>
#include <embb/algorithms/internal/partition.h>
namespace
embb
{
...
...
@@ -44,7 +44,7 @@ class ScanFunctor {
ScanFunctor
(
size_t
chunk_first
,
size_t
chunk_last
,
RAIOut
output_iterator
,
ReturnType
neutral
,
ScanFunction
scan
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
const
BlockSizePartitioner
<
RAIIn
>&
partitioner
,
ReturnType
*
tree_values
,
size_t
node_id
,
bool
going_down
)
...
...
@@ -55,7 +55,7 @@ class ScanFunctor {
node_id_
(
node_id
),
parent_value_
(
neutral
),
is_first_pass_
(
going_down
)
{
}
void
Action
(
mtapi
::
TaskContext
&
)
{
void
Action
(
embb
::
tasks
::
TaskContext
&
)
{
if
(
chunk_first_
==
chunk_last_
)
{
ChunkDescriptor
<
RAIIn
>
chunk
=
partitioner_
[
chunk_first_
];
RAIIn
iter_in
=
chunk
.
GetFirst
();
...
...
@@ -104,13 +104,13 @@ class ScanFunctor {
functor_r
.
parent_value_
=
functor_l
.
GetTreeValue
()
+
parent_value_
;
}
// Spawn tasks to recurse:
mtapi
::
Node
&
node
=
mtapi
::
Node
::
GetInstance
();
mtapi
::
Task
task_l
=
node
.
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
embb
::
tasks
::
Task
task_l
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_l
,
&
ScanFunctor
::
Action
),
policy_
));
mtapi
::
Task
task_r
=
node
.
Spawn
(
mtapi
::
Action
(
embb
::
tasks
::
Task
task_r
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_r
,
&
ScanFunctor
::
Action
),
policy_
));
// Wait for tasks to complete:
...
...
@@ -131,7 +131,7 @@ class ScanFunctor {
private
:
static
const
int
LEFT
=
1
;
static
const
int
RIGHT
=
2
;
const
embb
::
mtapi
::
ExecutionPolicy
&
policy_
;
const
embb
::
tasks
::
ExecutionPolicy
&
policy_
;
size_t
chunk_first_
;
size_t
chunk_last_
;
RAIOut
output_iterator_
;
...
...
@@ -168,7 +168,7 @@ typename ScanFunction, typename TransformationFunction>
void
ScanIteratorCheck
(
RAIIn
first
,
RAIIn
last
,
RAIOut
output_iterator
,
ReturnType
neutral
,
ScanFunction
scan
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
,
std
::
random_access_iterator_tag
)
{
typedef
typename
std
::
iterator_traits
<
RAIIn
>::
difference_type
difference_type
;
...
...
@@ -199,15 +199,14 @@ void ScanIteratorCheck(RAIIn first, RAIIn last, RAIOut output_iterator,
// it creates the tree.
typedef
ScanFunctor
<
RAIIn
,
RAIOut
,
ReturnType
,
ScanFunction
,
TransformationFunction
>
Functor
;
mtapi
::
Node
&
node
=
mtapi
::
Node
::
GetInstance
();
embb
::
tasks
::
Node
&
node
=
embb
::
tasks
::
Node
::
GetInstance
();
BlockSizePartitioner
<
RAIIn
>
partitioner_down
(
first
,
last
,
block_size
);
Functor
functor_down
(
0
,
partitioner_down
.
Size
()
-
1
,
output_iterator
,
neutral
,
scan
,
transformation
,
policy
,
partitioner_down
,
values
,
0
,
true
);
mtapi
::
Task
task_down
=
node
.
Spawn
(
mtapi
::
Action
(
base
::
MakeFunction
(
functor_down
,
&
Functor
::
Action
),
policy
));
embb
::
tasks
::
Task
task_down
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_down
,
&
Functor
::
Action
),
policy
));
task_down
.
Wait
(
MTAPI_INFINITE
);
// Second pass. Gives to each leaf the part of the prefix missing
...
...
@@ -215,9 +214,8 @@ void ScanIteratorCheck(RAIIn first, RAIIn last, RAIOut output_iterator,
Functor
functor_up
(
0
,
partitioner_up
.
Size
()
-
1
,
output_iterator
,
neutral
,
scan
,
transformation
,
policy
,
partitioner_up
,
values
,
0
,
false
);
mtapi
::
Task
task_up
=
node
.
Spawn
(
mtapi
::
Action
(
base
::
MakeFunction
(
functor_up
,
&
Functor
::
Action
),
policy
));
embb
::
tasks
::
Task
task_up
=
node
.
Spawn
(
embb
::
tasks
::
Action
(
base
::
MakeFunction
(
functor_up
,
&
Functor
::
Action
),
policy
));
task_up
.
Wait
(
MTAPI_INFINITE
);
}
...
...
@@ -227,7 +225,7 @@ template<typename RAIIn, typename RAIOut, typename ReturnType,
typename
ScanFunction
,
typename
TransformationFunction
>
void
Scan
(
RAIIn
first
,
RAIIn
last
,
RAIOut
output_iterator
,
ReturnType
neutral
,
ScanFunction
scan
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
typename
std
::
iterator_traits
<
RAIIn
>::
iterator_category
category
;
internal
::
ScanIteratorCheck
(
first
,
last
,
output_iterator
,
neutral
,
scan
,
transformation
,
policy
,
block_size
,
category
());
...
...
algorithms_cpp/include/embb/algorithms/invoke.h
View file @
a7bc2f9b
...
...
@@ -28,7 +28,7 @@
#define EMBB_ALGORITHMS_INVOKE_H_
#include <embb/base/function.h>
#include <embb/
mtapi/mtapi
.h>
#include <embb/
tasks/tasks
.h>
namespace
embb
{
namespace
algorithms
{
...
...
@@ -89,15 +89,16 @@ template<typename Function>
class
TaskWrapper
{
public
:
/**
* Wraps the function into an mtapi::Action and spawns an mtapi::Task.
* Wraps the function into an embb::tasks::Action and spawns an
* embb::tasks::Task.
*/
explicit
TaskWrapper
(
Function
function
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
:
function_
(
function
),
task_
()
{
mtapi
::
Action
action
(
embb
::
base
::
MakeFunction
(
*
this
,
&
TaskWrapper
::
Run
),
embb
::
tasks
::
Action
action
(
embb
::
base
::
MakeFunction
(
*
this
,
&
TaskWrapper
::
Run
),
policy
);
task_
=
mtapi
::
Node
::
GetInstance
().
Spawn
(
action
);
task_
=
embb
::
tasks
::
Node
::
GetInstance
().
Spawn
(
action
);
}
/**
...
...
@@ -109,9 +110,9 @@ class TaskWrapper {
private
:
Function
function_
;
mtapi
::
Task
task_
;
embb
::
tasks
::
Task
task_
;
void
Run
(
embb
::
mtapi
::
TaskContext
&
)
{
void
Run
(
embb
::
tasks
::
TaskContext
&
)
{
function_
();
}
};
...
...
@@ -120,7 +121,7 @@ class TaskWrapper {
template
<
typename
Function1
>
void
Invoke
(
Function1
func1
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
}
...
...
@@ -128,7 +129,7 @@ template<typename Function1, typename Function2>
void
Invoke
(
Function1
func1
,
Function2
func2
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
}
...
...
@@ -138,7 +139,7 @@ void Invoke(
Function1
func1
,
Function2
func2
,
Function3
func3
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -151,7 +152,7 @@ template<typename Function1, typename Function2, typename Function3,
Function2
func2
,
Function3
func3
,
Function4
func4
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -166,7 +167,7 @@ template<typename Function1, typename Function2, typename Function3,
Function3
func3
,
Function4
func4
,
Function5
func5
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -183,7 +184,7 @@ template<typename Function1, typename Function2, typename Function3,
Function4
func4
,
Function5
func5
,
Function6
func6
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -203,7 +204,7 @@ template<typename Function1, typename Function2, typename Function3,
Function5
func5
,
Function6
func6
,
Function7
func7
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -225,7 +226,7 @@ template<typename Function1, typename Function2, typename Function3,
Function6
func6
,
Function7
func7
,
Function8
func8
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -249,7 +250,7 @@ template<typename Function1, typename Function2, typename Function3,
Function7
func7
,
Function8
func8
,
Function9
func9
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -276,7 +277,7 @@ template<typename Function1, typename Function2, typename Function3,
Function8
func8
,
Function9
func9
,
Function10
func10
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
)
{
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
internal
::
TaskWrapper
<
Function1
>
wrap1
(
func1
,
policy
);
internal
::
TaskWrapper
<
Function2
>
wrap2
(
func2
,
policy
);
internal
::
TaskWrapper
<
Function3
>
wrap3
(
func3
,
policy
);
...
...
@@ -292,21 +293,21 @@ template<typename Function1, typename Function2, typename Function3,
template
<
typename
Function1
>
void
Invoke
(
Function1
func1
)
{
Invoke
(
func1
,
embb
::
mtapi
::
ExecutionPolicy
());
Invoke
(
func1
,
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
>
void
Invoke
(
Function1
func1
,
Function2
func2
)
{
Invoke
(
func1
,
func2
,
embb
::
mtapi
::
ExecutionPolicy
());
Invoke
(
func1
,
func2
,
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
>
void
Invoke
(
Function1
func1
,
Function2
func2
,
Function3
func3
)
{
Invoke
(
func1
,
func2
,
func3
,
embb
::
mtapi
::
ExecutionPolicy
());
Invoke
(
func1
,
func2
,
func3
,
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
,
...
...
@@ -316,7 +317,7 @@ void Invoke(
Function2
func2
,
Function3
func3
,
Function4
func4
)
{
Invoke
(
func1
,
func2
,
func3
,
func4
,
embb
::
mtapi
::
ExecutionPolicy
());
Invoke
(
func1
,
func2
,
func3
,
func4
,
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
,
...
...
@@ -327,7 +328,7 @@ void Invoke(
Function3
func3
,
Function4
func4
,
Function5
func5
)
{
Invoke
(
func1
,
func2
,
func3
,
func4
,
func5
,
embb
::
mtapi
::
ExecutionPolicy
());
Invoke
(
func1
,
func2
,
func3
,
func4
,
func5
,
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
,
...
...
@@ -340,7 +341,7 @@ void Invoke(
Function5
func5
,
Function6
func6
)
{
Invoke
(
func1
,
func2
,
func3
,
func4
,
func5
,
func6
,
embb
::
mtapi
::
ExecutionPolicy
());
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
,
...
...
@@ -355,7 +356,7 @@ void Invoke(
Function6
func6
,
Function7
func7
)
{
Invoke
(
func1
,
func2
,
func3
,
func4
,
func5
,
func6
,
func7
,
embb
::
mtapi
::
ExecutionPolicy
());
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
,
...
...
@@ -371,7 +372,7 @@ void Invoke(
Function7
func7
,
Function8
func8
)
{
Invoke
(
func1
,
func2
,
func3
,
func4
,
func5
,
func6
,
func7
,
func8
,
embb
::
mtapi
::
ExecutionPolicy
());
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
,
...
...
@@ -388,7 +389,7 @@ void Invoke(
Function8
func8
,
Function9
func9
)
{
Invoke
(
func1
,
func2
,
func3
,
func4
,
func5
,
func6
,
func7
,
func8
,
func9
,
embb
::
mtapi
::
ExecutionPolicy
());
embb
::
tasks
::
ExecutionPolicy
());
}
template
<
typename
Function1
,
typename
Function2
,
typename
Function3
,
...
...
@@ -407,7 +408,7 @@ void Invoke(
Function9
func9
,
Function10
func10
)
{
Invoke
(
func1
,
func2
,
func3
,
func4
,
func5
,
func6
,
func7
,
func8
,
func9
,
func10
,
embb
::
mtapi
::
ExecutionPolicy
());
embb
::
tasks
::
ExecutionPolicy
());
}
#endif // else DOXYGEN
...
...
algorithms_cpp/include/embb/algorithms/merge_sort.h
View file @
a7bc2f9b
...
...
@@ -28,7 +28,7 @@
#define EMBB_ALGORITHMS_MERGE_SORT_H_
#include <functional>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <embb/base/memory_allocation.h>
namespace
embb
{
...
...
@@ -149,7 +149,7 @@ void MergeSort(
RAI
last
,
RAITemp
temporary_first
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
);
...
...
@@ -161,7 +161,7 @@ void MergeSortAllocate(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
)
{
typedef
base
::
Allocation
Alloc
;
...
...
@@ -200,7 +200,7 @@ void MergeSortAllocate(
)
{
MergeSortAllocate
(
first
,
last
,
std
::
less
<
typename
std
::
iterator_traits
<
RAI
>::
value_type
>
(),
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -212,7 +212,7 @@ void MergeSortAllocate(
RAI
last
,
ComparisonFunction
comparison
)
{
MergeSortAllocate
(
first
,
last
,
comparison
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
MergeSortAllocate
(
first
,
last
,
comparison
,
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -223,7 +223,7 @@ void MergeSortAllocate(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
MergeSortAllocate
(
first
,
last
,
comparison
,
policy
,
0
);
}
...
...
@@ -239,7 +239,7 @@ void MergeSort(
)
{
MergeSort
(
first
,
last
,
temporary_first
,
std
::
less
<
typename
std
::
iterator_traits
<
RAI
>::
value_type
>
(),
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -253,7 +253,7 @@ void MergeSort(
ComparisonFunction
comparison
)
{
MergeSort
(
first
,
last
,
temporary_first
,
comparison
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -265,7 +265,7 @@ void MergeSort(
RAI
last
,
RAITemp
temporary_first
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
MergeSort
(
first
,
last
,
temporary_first
,
comparison
,
policy
,
0
);
}
...
...
algorithms_cpp/include/embb/algorithms/quick_sort.h
View file @
a7bc2f9b
...
...
@@ -28,7 +28,7 @@
#define EMBB_ALGORITHMS_QUICK_SORT_H_
#include <functional>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
namespace
embb
{
namespace
algorithms
{
...
...
@@ -72,7 +72,7 @@ void QuickSort(
\c a appears before an element \c b in the sorted range if
<tt>comparison(a, b) == true</tt>. The default value uses the
less-than relation. */
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
=
embb
::
mtapi
::
ExecutionPolicy
(),
const
embb
::
tasks
::
ExecutionPolicy
&
policy
=
embb
::
tasks
::
ExecutionPolicy
(),
/**< [IN] embb::mtapi::ExecutionPolicy for the quick sort algorithm */
size_t
block_size
=
0
/**< [IN] Lower bound for partitioning the range of elements into blocks that
...
...
@@ -95,7 +95,7 @@ void QuickSort(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
);
...
...
@@ -109,7 +109,7 @@ void QuickSort(
)
{
QuickSort
(
first
,
last
,
std
::
less
<
typename
std
::
iterator_traits
<
RAI
>::
value_type
>
(),
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -121,7 +121,7 @@ void QuickSort(
RAI
last
,
ComparisonFunction
comparison
)
{
QuickSort
(
first
,
last
,
comparison
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
QuickSort
(
first
,
last
,
comparison
,
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -132,7 +132,7 @@ void QuickSort(
RAI
first
,
RAI
last
,
ComparisonFunction
comparison
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
QuickSort
(
first
,
last
,
comparison
,
policy
,
0
);
}
...
...
algorithms_cpp/include/embb/algorithms/reduce.h
View file @
a7bc2f9b
...
...
@@ -27,7 +27,7 @@
#ifndef EMBB_ALGORITHMS_REDUCE_H_
#define EMBB_ALGORITHMS_REDUCE_H_
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <embb/algorithms/identity.h>
namespace
embb
{
...
...
@@ -113,7 +113,7 @@ ReturnType Reduce(
ReturnType
neutral
,
ReductionFunction
reduction
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
);
...
...
@@ -128,7 +128,7 @@ ReturnType Reduce(
ReductionFunction
reduction
)
{
return
Reduce
(
first
,
last
,
neutral
,
reduction
,
Identity
(),
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -144,7 +144,7 @@ ReturnType Reduce(
TransformationFunction
transformation
)
{
return
Reduce
(
first
,
last
,
neutral
,
reduction
,
transformation
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -158,7 +158,7 @@ ReturnType Reduce(
ReturnType
neutral
,
ReductionFunction
reduction
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
return
Reduce
(
first
,
last
,
neutral
,
reduction
,
transformation
,
policy
,
0
);
}
...
...
algorithms_cpp/include/embb/algorithms/scan.h
View file @
a7bc2f9b
...
...
@@ -27,7 +27,7 @@
#ifndef EMBB_ALGORITHMS_SCAN_H_
#define EMBB_ALGORITHMS_SCAN_H_
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <embb/algorithms/identity.h>
namespace
embb
{
...
...
@@ -121,7 +121,7 @@ void Scan(
ReturnType
neutral
,
ScanFunction
scan
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
,
const
embb
::
tasks
::
ExecutionPolicy
&
policy
,
size_t
block_size
);
...
...
@@ -138,7 +138,7 @@ void Scan(
ScanFunction
scan
)
{
Scan
(
first
,
last
,
output_iterator
,
neutral
,
scan
,
Identity
(),
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -155,7 +155,7 @@ void Scan(
TransformationFunction
transformation
)
{
Scan
(
first
,
last
,
output_iterator
,
neutral
,
scan
,
transformation
,
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
}
/**
...
...
@@ -170,7 +170,7 @@ void Scan(
ReturnType
neutral
,
ScanFunction
scan
,
TransformationFunction
transformation
,
const
embb
::
mtapi
::
ExecutionPolicy
&
policy
const
embb
::
tasks
::
ExecutionPolicy
&
policy
)
{
Scan
(
first
,
last
,
output_iterator
,
neutral
,
scan
,
transformation
,
policy
,
0
);
}
...
...
algorithms_cpp/test/count_test.cc
View file @
a7bc2f9b
...
...
@@ -26,7 +26,7 @@
#include <count_test.h>
#include <embb/algorithms/count.h>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <deque>
#include <vector>
#include <functional>
...
...
@@ -122,7 +122,7 @@ void CountTest::TestBlockSizes() {
void
CountTest
::
TestPolicy
()
{
using
embb
::
algorithms
::
Count
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
int
a
[]
=
{
10
,
20
,
30
,
30
,
20
,
10
,
10
,
20
,
20
,
20
};
std
::
vector
<
int
>
vector
(
a
,
a
+
(
sizeof
a
/
sizeof
a
[
0
]));
PT_EXPECT_EQ
(
Count
(
vector
.
begin
(),
vector
.
end
(),
10
,
ExecutionPolicy
()),
3
);
...
...
@@ -134,7 +134,7 @@ void CountTest::TestPolicy() {
void
CountTest
::
StressTest
()
{
using
embb
::
algorithms
::
Count
;
size_t
count
=
embb
::
mtapi
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
size_t
count
=
embb
::
tasks
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
std
::
vector
<
int
>
large_vector
(
count
);
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
{
large_vector
[
i
]
=
static_cast
<
int
>
(
0
);
...
...
algorithms_cpp/test/for_each_test.cc
View file @
a7bc2f9b
...
...
@@ -26,7 +26,7 @@
#include <for_each_test.h>
#include <embb/algorithms/for_each.h>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <vector>
#include <deque>
#include <sstream>
...
...
@@ -166,7 +166,7 @@ void ForEachTest::TestRanges() {
void
ForEachTest
::
TestBlockSizes
()
{
using
embb
::
algorithms
::
ForEach
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
std
::
vector
<
int
>
vector
(
count
);
...
...
@@ -186,7 +186,7 @@ void ForEachTest::TestBlockSizes() {
void
ForEachTest
::
TestPolicy
()
{
using
embb
::
algorithms
::
ForEach
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
std
::
vector
<
int
>
vector
(
count
);
...
...
@@ -240,8 +240,8 @@ void ForEachTest::TestPolicy() {
void
ForEachTest
::
StressTest
()
{
using
embb
::
algorithms
::
ForEach
;
using
embb
::
mtapi
::
ExecutionPolicy
;
size_t
count
=
embb
::
mtapi
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
embb
::
tasks
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
std
::
vector
<
int
>
large_vector
(
count
);
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
{
large_vector
[
i
]
=
static_cast
<
int
>
((
i
+
2
)
%
1000
);
...
...
algorithms_cpp/test/main.cc
View file @
a7bc2f9b
...
...
@@ -25,7 +25,7 @@
*/
#include <partest/partest.h>
#include <embb/
mtapi/mtapi
.h>
#include <embb/
tasks/tasks
.h>
#include <iostream>
#include <sstream>
...
...
@@ -66,7 +66,7 @@ int compute1_() {
}
PT_MAIN
(
"Algorithms"
)
{
embb
::
mtapi
::
Node
::
Initialize
(
THIS_DOMAIN_ID
,
THIS_NODE_ID
);
embb
::
tasks
::
Node
::
Initialize
(
THIS_DOMAIN_ID
,
THIS_NODE_ID
);
PT_RUN
(
PartitionerTest
);
PT_RUN
(
ForEachTest
);
...
...
@@ -78,7 +78,7 @@ PT_MAIN("Algorithms") {
PT_RUN
(
MergeSortTest
);
PT_RUN
(
InvokeTest
);
embb
::
mtapi
::
Node
::
Finalize
();
embb
::
tasks
::
Node
::
Finalize
();
PT_EXPECT
(
embb_get_bytes_allocated
()
==
0
);
...
...
algorithms_cpp/test/merge_sort_test.cc
View file @
a7bc2f9b
...
...
@@ -26,7 +26,7 @@
#include <merge_sort_test.h>
#include <embb/algorithms/merge_sort.h>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <vector>
#include <deque>
#include <sstream>
...
...
@@ -50,7 +50,7 @@ MergeSortTest::MergeSortTest() {
void
MergeSortTest
::
TestDataStructures
()
{
using
embb
::
algorithms
::
MergeSortAllocate
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
int
array
[
kCountSize
];
std
::
vector
<
int
>
vector
(
kCountSize
);
std
::
deque
<
int
>
deque
(
kCountSize
);
...
...
@@ -75,7 +75,7 @@ void MergeSortTest::TestDataStructures() {
void
MergeSortTest
::
TestFunctionPointers
()
{
using
embb
::
algorithms
::
MergeSortAllocate
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
std
::
vector
<
int
>
vector
(
kCountSize
);
for
(
size_t
i
=
kCountSize
-
1
;
i
>
0
;
i
--
)
{
...
...
@@ -158,7 +158,7 @@ void MergeSortTest::TestRanges() {
void
MergeSortTest
::
TestBlockSizes
()
{
using
embb
::
algorithms
::
MergeSortAllocate
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
std
::
vector
<
int
>
vector
(
count
);
...
...
@@ -181,7 +181,7 @@ void MergeSortTest::TestBlockSizes() {
void
MergeSortTest
::
TestPolicy
()
{
using
embb
::
algorithms
::
MergeSortAllocate
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
std
::
vector
<
int
>
vector
(
count
);
...
...
@@ -242,7 +242,7 @@ void MergeSortTest::TestPolicy() {
void
MergeSortTest
::
StressTest
()
{
using
embb
::
algorithms
::
MergeSortAllocate
;
size_t
count
=
embb
::
mtapi
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
size_t
count
=
embb
::
tasks
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
std
::
vector
<
int
>
large_vector
(
count
);
std
::
vector
<
int
>
vector_copy
(
count
);
for
(
size_t
i
=
count
-
1
;
i
>
0
;
i
--
)
{
...
...
algorithms_cpp/test/quick_sort_test.cc
View file @
a7bc2f9b
...
...
@@ -26,7 +26,7 @@
#include <quick_sort_test.h>
#include <embb/algorithms/quick_sort.h>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <vector>
#include <deque>
#include <sstream>
...
...
@@ -54,7 +54,7 @@ QuickSortTest::QuickSortTest() {
void
QuickSortTest
::
TestDataStructures
()
{
using
embb
::
algorithms
::
QuickSort
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
int
array
[
kCountSize
];
std
::
vector
<
int
>
vector
(
kCountSize
);
...
...
@@ -163,7 +163,7 @@ void QuickSortTest::TestRanges() {
void
QuickSortTest
::
TestBlockSizes
()
{
using
embb
::
algorithms
::
QuickSort
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
...
...
@@ -187,7 +187,7 @@ void QuickSortTest::TestBlockSizes() {
void
QuickSortTest
::
TestPolicy
()
{
using
embb
::
algorithms
::
QuickSort
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
std
::
vector
<
int
>
vector
(
count
);
...
...
@@ -248,7 +248,7 @@ void QuickSortTest::TestPolicy() {
void
QuickSortTest
::
StressTest
()
{
using
embb
::
algorithms
::
QuickSort
;
size_t
count
=
embb
::
mtapi
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
size_t
count
=
embb
::
tasks
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
std
::
vector
<
int
>
large_vector
(
count
);
std
::
vector
<
int
>
vector_copy
(
count
);
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
{
...
...
algorithms_cpp/test/reduce_test.cc
View file @
a7bc2f9b
...
...
@@ -26,7 +26,7 @@
#include <reduce_test.h>
#include <embb/algorithms/reduce.h>
#include <embb/
mtapi
/execution_policy.h>
#include <embb/
tasks
/execution_policy.h>
#include <deque>
#include <vector>
#include <functional>
...
...
@@ -163,7 +163,7 @@ void ReduceTest::TestBlockSizes() {
void
ReduceTest
::
TestPolicy
()
{
using
embb
::
algorithms
::
Reduce
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
using
embb
::
algorithms
::
Identity
;
size_t
count
=
4
;
int
sum
=
0
;
...
...
@@ -210,9 +210,9 @@ void ReduceTest::TestPolicy() {
void
ReduceTest
::
StressTest
()
{
using
embb
::
algorithms
::
Reduce
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
using
embb
::
algorithms
::
Identity
;
size_t
count
=
embb
::
mtapi
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
size_t
count
=
embb
::
tasks
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
std
::
vector
<
int
>
large_vector
(
count
);
mtapi_int32_t
expected
=
0
;
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
{
...
...
algorithms_cpp/test/scan_test.cc
View file @
a7bc2f9b
...
...
@@ -228,7 +228,7 @@ void ScanTest::TestRanges() {
void
ScanTest
::
TestBlockSizes
()
{
using
embb
::
algorithms
::
Scan
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
using
embb
::
algorithms
::
Identity
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
...
...
@@ -253,7 +253,7 @@ void ScanTest::TestBlockSizes() {
void
ScanTest
::
TestPolicy
()
{
using
embb
::
algorithms
::
Scan
;
using
embb
::
mtapi
::
ExecutionPolicy
;
using
embb
::
tasks
::
ExecutionPolicy
;
using
embb
::
algorithms
::
Identity
;
size_t
count
=
4
;
std
::
vector
<
int
>
init
(
count
);
...
...
@@ -324,8 +324,8 @@ void ScanTest::TestPolicy() {
void
ScanTest
::
StressTest
()
{
using
embb
::
algorithms
::
Scan
;
using
embb
::
algorithms
::
Identity
;
using
embb
::
mtapi
::
ExecutionPolicy
;
size_t
count
=
embb
::
mtapi
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
using
embb
::
tasks
::
ExecutionPolicy
;
size_t
count
=
embb
::
tasks
::
Node
::
GetInstance
().
GetCoreCount
()
*
10
;
std
::
vector
<
int
>
large_vector
(
count
);
std
::
vector
<
int
>
large_vector_output
(
count
);
for
(
size_t
i
=
0
;
i
<
count
;
i
++
)
{
...
...
algorithms_cpp/test/zip_iterator_test.cc
View file @
a7bc2f9b
...
...
@@ -136,7 +136,7 @@ void ZipIteratorTest::TestZipScan() {
Scan
(
embb
::
algorithms
::
Zip
(
vectorA
.
begin
(),
vectorB
.
begin
()),
embb
::
algorithms
::
Zip
(
vectorA
.
end
(),
vectorB
.
end
()),
vectorOut
.
begin
(),
0
,
std
::
plus
<
int
>
(),
DotProductFunctor
(),
embb
::
mtapi
::
ExecutionPolicy
(),
0
);
embb
::
tasks
::
ExecutionPolicy
(),
0
);
long
sum
=
0
;
for
(
size_t
i
=
0
;
i
<
kCountSize
;
i
++
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment