618442dc3b
Change-Id: Iff350b47d5d237e0bb3ffcce0e80ce867c74191d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88191 Tested-by: Kohei Yoshida <kohei@libreoffice.org> Reviewed-by: Kohei Yoshida <kohei@libreoffice.org>
84 lines
3 KiB
Diff
84 lines
3 KiB
Diff
diff --git a/configure.ac b/configure.ac
|
|
index ef22726..00ab937 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -70,7 +70,7 @@ AC_ARG_ENABLE(openmp,
|
|
)
|
|
|
|
AS_IF([test x"$enable_openmp" == "xyes"], [
|
|
- CXXFLAGS="$CXXFLAGS -fopenmp"
|
|
+ CXXFLAGS="$CXXFLAGS -fopenmp -DMDDS_USE_OPENMP=1"
|
|
LDFLAGS="$LDFLAGS -fopenmp"
|
|
])
|
|
|
|
diff --git a/include/mdds/global.hpp b/include/mdds/global.hpp
|
|
index f92f0a5..11f0325 100644
|
|
--- a/include/mdds/global.hpp
|
|
+++ b/include/mdds/global.hpp
|
|
@@ -65,6 +65,10 @@
|
|
#define MDDS_LOOP_UNROLLING 1
|
|
#endif
|
|
|
|
+#ifndef MDDS_USE_OPENMP
|
|
+#define MDDS_USE_OPENMP 0
|
|
+#endif
|
|
+
|
|
namespace mdds {
|
|
|
|
class general_error : public ::std::exception
|
|
diff --git a/include/mdds/multi_type_vector.hpp b/include/mdds/multi_type_vector.hpp
|
|
index 1c50a42..d941ee2 100644
|
|
--- a/include/mdds/multi_type_vector.hpp
|
|
+++ b/include/mdds/multi_type_vector.hpp
|
|
@@ -1126,8 +1126,7 @@ private:
|
|
void append_cell_to_block(size_type block_index, const _T& cell);
|
|
|
|
template<typename _T>
|
|
- iterator set_cell_to_empty_block(
|
|
- size_type start_row, size_type block_index, size_type pos_in_block, const _T& cell);
|
|
+ iterator set_cell_to_empty_block(size_type block_index, size_type pos_in_block, const _T& cell);
|
|
|
|
template<typename _T>
|
|
iterator set_cell_to_block_of_size_one(
|
|
diff --git a/include/mdds/multi_type_vector_def.inl b/include/mdds/multi_type_vector_def.inl
|
|
index a4cfe6d..d4fff49 100644
|
|
--- a/include/mdds/multi_type_vector_def.inl
|
|
+++ b/include/mdds/multi_type_vector_def.inl
|
|
@@ -516,7 +516,9 @@ void multi_type_vector<_CellBlockFunc, _EventFunc>::adjust_block_positions(int64
|
|
int64_t rem = len % 8;
|
|
len -= rem;
|
|
len += start_block_index;
|
|
+#if MDDS_USE_OPENMP
|
|
#pragma omp parallel for
|
|
+#endif
|
|
for (int64_t i = start_block_index; i < len; i += 8)
|
|
{
|
|
m_blocks[i].m_position += delta;
|
|
@@ -533,7 +535,9 @@ void multi_type_vector<_CellBlockFunc, _EventFunc>::adjust_block_positions(int64
|
|
for (int64_t i = len; i < rem; ++i)
|
|
m_blocks[i].m_position += delta;
|
|
#else
|
|
+#if MDDS_USE_OPENMP
|
|
#pragma omp parallel for
|
|
+#endif
|
|
for (int64_t i = start_block_index; i < n; ++i)
|
|
m_blocks[i].m_position += delta;
|
|
#endif
|
|
@@ -583,7 +587,7 @@ multi_type_vector<_CellBlockFunc, _EventFunc>::set_impl(size_type pos, size_type
|
|
if (!blk->mp_data)
|
|
{
|
|
// This is an empty block.
|
|
- return set_cell_to_empty_block(start_row, block_index, pos_in_block, value);
|
|
+ return set_cell_to_empty_block(block_index, pos_in_block, value);
|
|
}
|
|
|
|
assert(blk->mp_data);
|
|
@@ -1027,7 +1031,7 @@ template<typename _CellBlockFunc, typename _EventFunc>
|
|
template<typename _T>
|
|
typename multi_type_vector<_CellBlockFunc, _EventFunc>::iterator
|
|
multi_type_vector<_CellBlockFunc, _EventFunc>::set_cell_to_empty_block(
|
|
- size_type start_row, size_type block_index, size_type pos_in_block, const _T& cell)
|
|
+ size_type block_index, size_type pos_in_block, const _T& cell)
|
|
{
|
|
block* blk = &m_blocks[block_index];
|
|
assert(!blk->mp_data); // In this call, the current block is an empty block.
|