Skip to content

use quickpool #53

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* Add classes `ProgressCounter` and `ProgressBar` for tracking progress in long-
running loops (#49).

* Increased speed due to lock-free queue (#51).
* Increased speed due to work-stealing and lock-free pops (#51).


# RcppThread 1.0.0
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ or the [API documentation](https://tnagler.github.io/RcppThread/).

Since then, the following features have been added:

- Faster runtimes thanks to a work stealing queue with lock-free pops (from [tpool](https://github.com/tnagler/tpool)).
- Faster runtimes thanks to a work stealing queue with lock-free pops (from [quickpool](https://github.com/tnagler/quickpool)).

- An R function `RcppThread::detectCores()` to determine the number of (logical)
cores on your machine.
Expand Down
2 changes: 1 addition & 1 deletion docs/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -894,7 +894,7 @@ EXCLUDE_PATTERNS =
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*

EXCLUDE_SYMBOLS = std tpool *Batch*
EXCLUDE_SYMBOLS = std quickpool *Batch*

# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
Expand Down
4 changes: 0 additions & 4 deletions docs/classRcppThread_1_1ThreadPool.html
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,6 @@ <h2><a href="#pub-methods">Public functions</a></h2>
<span class="m-doc-wrap-bumper">void <a href="#a1ba95e4fe30c81e19c7980c865a8ce86" class="m-doc-self">join</a>(</span><span class="m-doc-wrap">)</span>
</dt>
<dd>waits for all jobs to finish and joins all threads.</dd>
<dt id="a3a26cfd27907154d54a76a2240940507">
<span class="m-doc-wrap-bumper">void <a href="#a3a26cfd27907154d54a76a2240940507" class="m-doc-self">clear</a>(</span><span class="m-doc-wrap">)</span>
</dt>
<dd>clears the pool from all open jobs.</dd>
</dl>
</section>
<section>
Expand Down
232 changes: 232 additions & 0 deletions docs/classquickpool_1_1TodoList.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>quickpool::TodoList class | RcppThread R-friendly
threading
in
C++</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
<link rel="stylesheet" href="m-dark+documentation.compiled.css" />
<link rel="icon" href="favicon-dark.png" type="image/png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#22272e" />
</head>
<body>
<header><nav id="navigation">
<div class="m-container">
<div class="m-row">
<span id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">
<a href="https://github.com/tnagler/RcppThread">RcppThread</a> <span class="m-breadcrumb">|</span> <a href="index.html" class="m-thin">R-friendly
threading
in
C++</a>
</span>
<div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
<a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<path id="m-doc-search-icon-path" d="m6 0c-3.31 0-6 2.69-6 6 0 3.31 2.69 6 6 6 1.49 0 2.85-0.541 3.89-1.44-0.0164 0.338 0.147 0.759 0.5 1.15l3.22 3.79c0.552 0.614 1.45 0.665 2 0.115 0.55-0.55 0.499-1.45-0.115-2l-3.79-3.22c-0.392-0.353-0.812-0.515-1.15-0.5 0.895-1.05 1.44-2.41 1.44-3.89 0-3.31-2.69-6-6-6zm0 1.56a4.44 4.44 0 0 1 4.44 4.44 4.44 4.44 0 0 1-4.44 4.44 4.44 4.44 0 0 1-4.44-4.44 4.44 4.44 0 0 1 4.44-4.44z"/>
</svg></a>
<a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
<a id="m-navbar-hide" href="#" title="Hide navigation"></a>
</div>
<div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
<div class="m-row">
<ol class="m-col-t-6 m-col-m-none">
<li><a href="namespaceRcppThread.html">RcppThread</a></li>
<li><a href="overrides.html">Automatic overrides</a></li>
</ol>
<ol class="m-col-t-6 m-col-m-none" start="3">
<li><a href="https://github.com/tnagler/RcppThread">GitHub</a></li>
<li class="m-show-m"><a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<use href="#m-doc-search-icon-path" />
</svg></a></li>
</ol>
</div>
</div>
</div>
</div>
</nav></header>
<main><article>
<div class="m-container m-container-inflatable">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<h1>
<span class="m-breadcrumb"><a href="namespacequickpool.html">quickpool</a>::<wbr/></span>TodoList <span class="m-thin">class</span>
</h1>
<p>Todo list - a synchronization primitive.</p>
<div class="m-block m-default">
<h3>Contents</h3>
<ul>
<li>
Reference
<ul>
<li><a href="#typeless-methods">Constructors, destructors, conversion operators</a></li>
<li><a href="#pub-methods">Public functions</a></li>
</ul>
</li>
</ul>
</div>
<p>Add a task with <code>add()</code>, cross it off with <code>cross()</code>, and wait for all tasks to complete with <code>wait()</code>.</p>
<section id="typeless-methods">
<h2><a href="#typeless-methods">Constructors, destructors, conversion operators</a></h2>
<dl class="m-doc">
<dt>
<span class="m-doc-wrap-bumper"><a href="#ad900c395f0ce371f6773206dda4e5407" class="m-doc">TodoList</a>(</span><span class="m-doc-wrap">size_t num_tasks = 0) <span class="m-label m-flat m-success">noexcept</span></span>
</dt>
<dd></dd>
</dl>
</section>
<section id="pub-methods">
<h2><a href="#pub-methods">Public functions</a></h2>
<dl class="m-doc">
<dt>
<span class="m-doc-wrap-bumper">void <a href="#adb2aa12f95bd70c0d68dab45eb73e19e" class="m-doc">add</a>(</span><span class="m-doc-wrap">size_t num_tasks = 1) <span class="m-label m-flat m-success">noexcept</span></span>
</dt>
<dd></dd>
<dt>
<span class="m-doc-wrap-bumper">void <a href="#ad23ce5136b646788f476843bd4d2ef54" class="m-doc">cross</a>(</span><span class="m-doc-wrap">size_t num_tasks = 1)</span>
</dt>
<dd></dd>
<dt id="a4fd16a01633911f5b82c80857ce66527">
<span class="m-doc-wrap-bumper">auto <a href="#a4fd16a01633911f5b82c80857ce66527" class="m-doc-self">empty</a>(</span><span class="m-doc-wrap">) const -&gt; bool <span class="m-label m-flat m-success">noexcept</span></span>
</dt>
<dd>checks whether list is empty.</dd>
<dt>
<span class="m-doc-wrap-bumper">void <a href="#a6711794e2f9f91e1d34f64f82b6cf7f2" class="m-doc">wait</a>(</span><span class="m-doc-wrap">size_t millis = 0)</span>
</dt>
<dd></dd>
<dt>
<span class="m-doc-wrap-bumper">void <a href="#a80d8d12098fb46df66f76bc7c6156e7f" class="m-doc">clear</a>(</span><span class="m-doc-wrap">std::exception_ptr eptr = nullptr) <span class="m-label m-flat m-success">noexcept</span></span>
</dt>
<dd></dd>
</dl>
</section>
<section>
<h2>Function documentation</h2>
<section class="m-doc-details" id="ad900c395f0ce371f6773206dda4e5407"><div>
<h3>
<span class="m-doc-wrap-bumper"> quickpool::<wbr />TodoList::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#ad900c395f0ce371f6773206dda4e5407" class="m-doc-self">TodoList</a>(</span><span class="m-doc-wrap">size_t num_tasks = 0) <span class="m-label m-success">noexcept</span></span></span>
</h3>
<table class="m-table m-fullwidth m-flat">
<thead>
<tr><th colspan="2">Parameters</th></tr>
</thead>
<tbody>
<tr>
<td style="width: 1%">num_tasks</td>
<td>initial number of tasks.</td>
</tr>
</tbody>
</table>
<p>constructs the todo list.</p>
</div></section>
<section class="m-doc-details" id="adb2aa12f95bd70c0d68dab45eb73e19e"><div>
<h3>
<span class="m-doc-wrap-bumper">void quickpool::<wbr />TodoList::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#adb2aa12f95bd70c0d68dab45eb73e19e" class="m-doc-self">add</a>(</span><span class="m-doc-wrap">size_t num_tasks = 1) <span class="m-label m-success">noexcept</span></span></span>
</h3>
<table class="m-table m-fullwidth m-flat">
<thead>
<tr><th colspan="2">Parameters</th></tr>
</thead>
<tbody>
<tr>
<td style="width: 1%">num_tasks</td>
<td>add that many tasks to the list.</td>
</tr>
</tbody>
</table>
<p>adds tasks to the list.</p>
</div></section>
<section class="m-doc-details" id="ad23ce5136b646788f476843bd4d2ef54"><div>
<h3>
<span class="m-doc-wrap-bumper">void quickpool::<wbr />TodoList::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#ad23ce5136b646788f476843bd4d2ef54" class="m-doc-self">cross</a>(</span><span class="m-doc-wrap">size_t num_tasks = 1)</span></span>
</h3>
<table class="m-table m-fullwidth m-flat">
<thead>
<tr><th colspan="2">Parameters</th></tr>
</thead>
<tbody>
<tr>
<td style="width: 1%">num_tasks</td>
<td>cross that many tasks to the list.</td>
</tr>
</tbody>
</table>
<p>crosses tasks from the list.</p>
</div></section>
<section class="m-doc-details" id="a6711794e2f9f91e1d34f64f82b6cf7f2"><div>
<h3>
<span class="m-doc-wrap-bumper">void quickpool::<wbr />TodoList::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a6711794e2f9f91e1d34f64f82b6cf7f2" class="m-doc-self">wait</a>(</span><span class="m-doc-wrap">size_t millis = 0)</span></span>
</h3>
<table class="m-table m-fullwidth m-flat">
<thead>
<tr><th colspan="2">Parameters</th></tr>
</thead>
<tbody>
<tr>
<td style="width: 1%">millis</td>
<td>if &gt; 0; waiting aborts after waiting that many milliseconds.</td>
</tr>
</tbody>
</table>
<p>waits for the list to be empty.</p>
</div></section>
<section class="m-doc-details" id="a80d8d12098fb46df66f76bc7c6156e7f"><div>
<h3>
<span class="m-doc-wrap-bumper">void quickpool::<wbr />TodoList::<wbr /></span><span class="m-doc-wrap"><span class="m-doc-wrap-bumper"><a href="#a80d8d12098fb46df66f76bc7c6156e7f" class="m-doc-self">clear</a>(</span><span class="m-doc-wrap">std::exception_ptr eptr = nullptr) <span class="m-label m-success">noexcept</span></span></span>
</h3>
<table class="m-table m-fullwidth m-flat">
<thead>
<tr><th colspan="2">Parameters</th></tr>
</thead>
<tbody>
<tr>
<td style="width: 1%">eptr</td>
<td>(optional) pointer to an active exception to be rethrown by a waiting thread; typically retrieved from <code>std::current_exception()</code>.</td>
</tr>
</tbody>
</table>
<p>clears the list.</p>
</div></section>
</section>
</div>
</div>
</div>
</article></main>
<div class="m-doc-search" id="search">
<a href="#!" onclick="return hideSearch()"></a>
<div class="m-container">
<div class="m-row">
<div class="m-col-m-8 m-push-m-2">
<div class="m-doc-search-header m-text m-small">
<div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
<div id="search-symbolcount">&hellip;</div>
</div>
<div class="m-doc-search-content">
<form>
<input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
</form>
<noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
<div id="search-help" class="m-text m-dim m-text-center">
<p class="m-noindent">Search for symbols, directories, files, pages, OpenGL, GLSL, Vulkan and OpenAL APIs. You can omit any prefix from the symbol or file path; adding a <code>:</code> or <code>/</code> suffix lists all members of given symbol or directory.</p> <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span> / <span class="m-label m-dim">&uarr;</span> to navigate through the list, <span class="m-label m-dim">Enter</span> to go. <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can copy a link to the result using <span class="m-label m-dim">⌘</span> <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span> <span class="m-label m-dim">M</span> produces a Markdown link.</p>
</div>
<div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
<ul id="search-results"></ul>
</div>
</div>
</div>
</div>
</div>
<script src="search-v1.js"></script>
<script src="searchdata-v1.js" async="async"></script>
<footer><nav>
<div class="m-container">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<p>RcppThread docs. copyright © <a href="http://tnagler.com/">Thomas Nagler</a> 2021.<br />Generated by <a href="https://doxygen.org/">Doxygen</a> 1.8.17 and <a href="https://mcss.mosra.cz/">m.css</a>. Contact the author via <a href="https://github.com/tnagler/RcppThread">GitHub</a> or <a href="mailto:mail@tnagler.com">e-mail</a>
</div>
</div>
</div>
</nav></footer>
</body>
</html>
Loading