Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
las3_pub
/
predictable_parallel_patterns
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
4469bcd3
authored
5 years ago
by
FritzFlorian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Re-Commit: Fix: correct install script and readme for continuation style.
parent
ec10685a
Pipeline
#1439
passed with stages
in 3 minutes 21 seconds
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
106 additions
and
62 deletions
+106
-62
CMakeLists.txt
+8
-0
README.md
+42
-39
app/context_switch/deboost.context/CMakeLists.txt
+0
-3
app/playground/main.cpp
+37
-1
lib/context_switcher/CMakeLists.txt
+16
-4
lib/context_switcher/context_switcher-config.cmake
+1
-1
lib/pls/CMakeLists.txt
+0
-14
lib/pls/pls-config.cmake
+2
-0
No files found.
CMakeLists.txt
View file @
4469bcd3
...
...
@@ -35,6 +35,14 @@ add_subdirectory(extern/benchmark_runner)
add_subdirectory
(
lib/context_switcher
)
add_subdirectory
(
lib/pls
)
# ...add a custom target that will only build the library when installing.
# This can allow us to speed up the installation on embedded devices.
ADD_CUSTOM_TARGET
(
install.pls
${
CMAKE_COMMAND
}
-DBUILD_TYPE=
${
CMAKE_BUILD_TYPE
}
-P
${
CMAKE_BINARY_DIR
}
/cmake_install.cmake
)
ADD_DEPENDENCIES
(
install.pls context_switcher pls
)
# Include examples
add_subdirectory
(
app/playground
)
add_subdirectory
(
app/benchmark_fft
)
...
...
This diff is collapsed.
Click to expand it.
README.md
View file @
4469bcd3
...
...
@@ -9,16 +9,16 @@
This section will give a brief introduction on how to get a minimal
project setup that uses the PLS library.
Further
[
general notes
](
NOTES.md
)
and
[
performance notes
](
PERFORMANCE.md
)
can be found in
Further
[
general notes
](
NOTES.md
)
and
[
performance notes
](
PERFORMANCE
-v2
.md
)
can be found in
their respective files.
Further notes on
[
performance
](
PERFORMANCE.md
)
and general
[
notes
](
NOTES.md
)
on the development progress can be found in
the linked documents.
### Installation
PLS has no external dependencies. To compile and install it you
only need cmake and a recent C++ 17 compatible compiler.
Care might be required on not explicitly supported systems
(currently we support Linux x86 and ARMv7).
Clone the repository and open a terminal session in its folder.
Create a build folder using
`mkdir cmake-build-release`
and switch into it
`cd cmake-build-release`
.
...
...
@@ -36,54 +36,57 @@ using `target_link_libraries(your_target pls::pls)`.
#include <pls/pls.h>
#include <iostream>
// Static memory allocation (see execution trees for how to configure)
static
const
int
MAX_NUM_TASKS
=
32
;
static
const
int
MAX_STACK_SIZE
=
4096
;
static
const
int
NUM_THREADS
=
8
;
long
fib
(
long
n
);
int
main
()
{
// All memory needed by the scheduler can be allocated in advance either on stack or using malloc.
const
unsigned
int
num_threads
=
8
;
const
unsigned
int
memory_per_thread
=
2
<<
14
;
static
pls
::
static_scheduler_memory
<
num_threads
,
memory_per_thread
>
memory
;
// Create the scheduler instance (starts a thread pool).
pls
::
scheduler
scheduler
{
&
memory
,
num_threads
};
// Wake up the thread pool and perform work.
scheduler
.
perform_work
([
&
]
{
long
result
=
fib
(
20
);
std
::
cout
<<
"fib(20)="
<<
result
<<
std
::
endl
;
});
// At this point the thread pool sleeps.
// This can for example be used for periodic work.
// Create a scheduler with the static amount of resources.
// All memory and system resources are allocated here.
pls
::
scheduler
scheduler
{
NUM_THREADS
,
MAX_NUM_TASKS
,
MAX_STACK_SIZE
};
// Wake up the thread pool and perform work.
scheduler
.
perform_work
([
&
]
{
long
result
=
fib
(
20
);
std
::
cout
<<
"fib(20)="
<<
result
<<
std
::
endl
;
});
// At this point the thread pool sleeps.
// This can for example be used for periodic work.
// The scheduler is destroyed at the end of the scope
}
long
fib
(
long
n
)
{
if
(
n
==
0
)
{
return
0
;
}
if
(
n
==
1
)
{
return
1
;
}
// Example for the high level API.
// Will run both functions in parallel as seperate tasks.
int
left
,
right
;
pls
::
invoke_parallel
(
[
&
]
{
left
=
fib
(
n
-
1
);
},
[
&
]
{
right
=
fib
(
n
-
2
);
}
);
return
left
+
right
;
if
(
n
<=
1
)
{
return
n
;
}
// Example for the high level API.
// Will run both functions in parallel as separate tasks.
int
a
,
b
;
pls
::
invoke
(
[
&
a
,
n
]
{
a
=
fib
(
n
-
1
);
},
[
&
b
,
n
]
{
b
=
fib
(
n
-
2
);
}
);
return
a
+
b
;
}
```
### Execution Trees and Static Resource Allocation
TODO: For the static memory allocation you need to find the maximum required resources.
## Project Structure
The project uses
[
CMAKE
](
https://cmake.org/
)
as it's build system,
the recommended IDE is either a simple text editor or
[
CLion
](
https://www.jetbrains.com/clion/
)
.
We divide the project into sub-targets to separate for the library
itself, testing and example code. The library itself can be found in
`lib/pls`
, t
esting related code is in
`test`
, example and playground
apps are in
`app`
.
`lib/pls`
, t
he context switching implementation in
`lib/context_switcher`
,
testing related code is in
`test`
, example and playground/benchmark
apps are in
`app`
.
### Buiding
...
...
This diff is collapsed.
Click to expand it.
app/context_switch/deboost.context/CMakeLists.txt
View file @
4469bcd3
...
...
@@ -74,6 +74,3 @@ target_include_directories(fcontext
set_property
(
TARGET fcontext PROPERTY INTERPROCEDURAL_OPTIMIZATION FALSE
)
set_target_properties
(
fcontext PROPERTIES FOLDER Deps
${
IOS_GENERAL_PROPERTIES
}
)
install
(
TARGETS fcontext DESTINATION lib
)
install
(
FILES
${
HEADER
}
DESTINATION include/fcontext
)
This diff is collapsed.
Click to expand it.
app/playground/main.cpp
View file @
4469bcd3
#include <pls/pls.h>
#include <iostream>
// Static memory allocation (see execution trees for how to configure)
static
const
int
MAX_NUM_TASKS
=
32
;
static
const
int
MAX_STACK_SIZE
=
4096
;
static
const
int
NUM_THREADS
=
8
;
long
fib
(
long
n
);
int
main
()
{
// Create a scheduler with the static amount of resources.
// All memory and system resources are allocated here.
pls
::
scheduler
scheduler
{
NUM_THREADS
,
MAX_NUM_TASKS
,
MAX_STACK_SIZE
};
// Wake up the thread pool and perform work.
scheduler
.
perform_work
([
&
]
{
long
result
=
fib
(
20
);
std
::
cout
<<
"fib(20)="
<<
result
<<
std
::
endl
;
});
// At this point the thread pool sleeps.
// This can for example be used for periodic work.
// The scheduler is destroyed at the end of the scope
}
long
fib
(
long
n
)
{
if
(
n
<=
1
)
{
return
n
;
}
return
0
;
// Example for the high level API.
// Will run both functions in parallel as separate tasks.
int
a
,
b
;
pls
::
invoke
(
[
&
a
,
n
]
{
a
=
fib
(
n
-
1
);
},
[
&
b
,
n
]
{
b
=
fib
(
n
-
2
);
}
);
return
a
+
b
;
}
This diff is collapsed.
Click to expand it.
lib/context_switcher/CMakeLists.txt
View file @
4469bcd3
...
...
@@ -64,19 +64,31 @@ target_include_directories(context_switcher
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
/include>
PRIVATE
${
CMAKE_CURRENT_SOURCE_DIR
}
/src
${
CMAKE_CURRENT_SOURCE_DIR
}
/src
# TODO: Set this up when we require private headers
)
# Installation on the system (we pack the context switcher with pls for now...)
# Rules for installing the library on a system
# ...binaries
INSTALL
(
TARGETS context_switcher
EXPORT
pls
-targets
EXPORT
context_switcher
-targets
LIBRARY DESTINATION lib/context_switcher
ARCHIVE DESTINATION lib/context_switcher
)
# ...all headers in `include`
INSTALL
(
DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
/include/
pls
DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
/include/
context_switcher
DESTINATION include
FILES_MATCHING PATTERN
"*.h*"
)
# ...allow our project to be a cmake dependency
install
(
EXPORT context_switcher-targets
FILE context_switcherTargets.cmake
NAMESPACE context_switcher::
DESTINATION lib/context_switcher
)
INSTALl
(
FILES context_switcher-config.cmake
DESTINATION lib/context_switcher
)
This diff is collapsed.
Click to expand it.
lib/context_switcher/context_switcher-config.cmake
View file @
4469bcd3
get_filename_component
(
SELF_DIR
"
${
CMAKE_CURRENT_LIST_FILE
}
"
PATH
)
include
(
${
SELF_DIR
}
/
pls
Targets.cmake
)
include
(
${
SELF_DIR
}
/
context_switcher
Targets.cmake
)
This diff is collapsed.
Click to expand it.
lib/pls/CMakeLists.txt
View file @
4469bcd3
...
...
@@ -53,13 +53,6 @@ target_include_directories(pls
${
CMAKE_CURRENT_SOURCE_DIR
}
/src
# TODO: Set this up when we require private headers
)
# Enable warnings/tidy code checking from our compiler
target_compile_options
(
pls PRIVATE
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:
-Wall>
$<$<CXX_COMPILER_ID:MSVC>:
-W4>
)
# Rules for installing the library on a system
# ...binaries
INSTALL
(
TARGETS pls
...
...
@@ -84,10 +77,3 @@ INSTALl(
FILES pls-config.cmake
DESTINATION lib/pls
)
# ...add a custom target that will only build the library when installing.
# This can allow us to speed up the installation on embedded devices.
ADD_CUSTOM_TARGET
(
install.pls
${
CMAKE_COMMAND
}
-DBUILD_TYPE=
${
CMAKE_BUILD_TYPE
}
-P
${
CMAKE_BINARY_DIR
}
/cmake_install.cmake
)
ADD_DEPENDENCIES
(
install.pls context_switcher pls
)
This diff is collapsed.
Click to expand it.
lib/pls/pls-config.cmake
View file @
4469bcd3
find_package
(
context_switcher REQUIRED
)
get_filename_component
(
SELF_DIR
"
${
CMAKE_CURRENT_LIST_FILE
}
"
PATH
)
include
(
${
SELF_DIR
}
/plsTargets.cmake
)
This diff is collapsed.
Click to expand it.
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