summaryrefslogtreecommitdiff
path: root/graphics/asymptote/parallel.h
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote/parallel.h')
-rw-r--r--graphics/asymptote/parallel.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/graphics/asymptote/parallel.h b/graphics/asymptote/parallel.h
new file mode 100644
index 0000000000..0daa164e6f
--- /dev/null
+++ b/graphics/asymptote/parallel.h
@@ -0,0 +1,63 @@
+#pragma once
+
+#ifndef _OPENMP
+#ifndef SINGLE_THREAD
+#define SINGLE_THREAD
+#endif
+#endif
+
+#ifndef SINGLE_THREAD
+#include <omp.h>
+#endif
+
+extern size_t threshold;
+
+namespace parallel {
+extern size_t lastThreads;
+inline int get_thread_num()
+{
+#ifdef SINGLE_THREAD
+ return 0;
+#else
+ return omp_get_thread_num();
+#endif
+}
+
+inline int get_max_threads()
+{
+#ifdef SINGLE_THREAD
+ return 1;
+#else
+ return omp_get_max_threads();
+#endif
+}
+}
+
+#ifndef SINGLE_THREAD
+#define PARALLEL(code) \
+ if(threads > 1) { \
+ _Pragma("omp parallel for num_threads(threads)") \
+ code \
+ } else {code}
+#else
+#define PARALLEL(code) {code}
+#endif
+
+#ifndef SINGLE_THREAD
+#define OMPIF(condition,directive,code) \
+ if(threads > 1 && condition) { \
+ _Pragma(directive) \
+ code \
+ } else {code}
+#else
+#define OMPIF(condition,directive,code) {code}
+#endif
+
+#define PARALLELIF(condition,code) \
+ OMPIF(condition,"omp parallel for num_threads(threads)",code)
+
+namespace parallel {
+
+void Threshold(size_t threads);
+
+}