Skip to content

Commit f6c0f32

Browse files
authored
Merge pull request #10 from digitalillusions/only-omp
Remove dependency on parallel stl algorithms
2 parents 99fa1fe + 6d449c5 commit f6c0f32

File tree

7 files changed

+26
-69
lines changed

7 files changed

+26
-69
lines changed

CMakeLists.txt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,14 @@ set_property(GLOBAL PROPERTY USE_FOLDERS on)
88
set(CMAKE_CXX_STANDARD 11)
99
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1010

11-
if (UNIX)
12-
find_package(OpenMP)
11+
find_package(OpenMP REQUIRED)
1312
if (OPENMP_FOUND)
1413
if (CMAKE_VERSION VERSION_GREATER "3.8")
1514
link_libraries(OpenMP::OpenMP_CXX)
1615
else()
1716
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
1817
endif()
1918
endif(OPENMP_FOUND)
20-
endif (UNIX)
2119

2220
OPTION(BUILD_AS_SHARED_LIBS "Build all the libraries as shared" OFF)
2321
if (BUILD_AS_SHARED_LIBS)
@@ -49,11 +47,6 @@ endif ()
4947

5048
target_include_directories(CompactNSearch PUBLIC include)
5149

52-
if (APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
53-
find_package(oneDPL REQUIRED)
54-
target_link_libraries(CompactNSearch PUBLIC oneDPL)
55-
endif()
56-
5750
install(FILES "include/CompactNSearch" ${HEADER_FILES}
5851
DESTINATION include/)
5952

demo/main.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <limits>
99
#include <chrono>
1010
#include <random>
11+
#include <algorithm>
1112

1213
#include <omp.h>
1314

@@ -151,21 +152,15 @@ enright_velocity_field(std::array<Real, 3> const& x)
151152
void
152153
advect()
153154
{
154-
#ifdef _MSC_VER
155-
concurrency::parallel_for_each(
156-
#elif defined(__APPLE__) && defined(__clang__)
157-
std::for_each(oneapi::dpl::execution::par,
158-
#else
159-
__gnu_parallel::for_each(
160-
#endif
161-
positions.begin(), positions.end(), [&](std::array<Real, 3>& x)
155+
#pragma omp parallel for
156+
for (int _i = 0; _i < positions.size(); _i++)
162157
{
158+
std::array<Real, 3>& x = positions[_i];
163159
std::array<Real, 3> v = enright_velocity_field(x);
164160
x[0] += static_cast<Real>(0.005) * v[0];
165161
x[1] += static_cast<Real>(0.005) * v[1];
166162
x[2] += static_cast<Real>(0.005) * v[1];
167163
}
168-
);
169164
}
170165

171166
int main(int argc, char* argv[])

include/CompactNSearch.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "DataStructures.h"
55
#include "PointSet.h"
66

7+
#include <cmath>
78
#include <unordered_map>
89

910
namespace CompactNSearch

include/Config.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,3 @@ namespace CompactNSearch
1111

1212
#define INITIAL_NUMBER_OF_INDICES 50
1313
#define INITIAL_NUMBER_OF_NEIGHBORS 50
14-
15-
#ifdef _MSC_VER
16-
#include <ppl.h>
17-
#elif defined(__APPLE__) && defined(__clang__)
18-
#include <oneapi/dpl/execution>
19-
#include <oneapi/dpl/algorithm>
20-
#else
21-
#include <parallel/algorithm>
22-
#endif

include/DataStructures.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "Config.h"
44

5+
#include <algorithm>
56
#include <atomic>
67
#include <vector>
78

include/PointSet.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <Config.h>
4+
#include <limits>
45
#include <iostream>
56

67
namespace CompactNSearch

src/CompactNSearch.cpp

Lines changed: 18 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -234,15 +234,9 @@ NeighborhoodSearch::update_point_sets()
234234
}
235235

236236
// Precompute cell indices.
237-
#ifdef _MSC_VER
238-
concurrency::parallel_for_each(
239-
#elif defined(__APPLE__) && defined(__clang__)
240-
std::for_each(oneapi::dpl::execution::par,
241-
#else
242-
__gnu_parallel::for_each(
243-
#endif
244-
m_point_sets.begin(), m_point_sets.end(), [&](PointSet& d)
245-
{
237+
#pragma omp parallel for
238+
for (int j = 0; j < m_point_sets.size(); j++){
239+
PointSet& d = m_point_sets[j];
246240
if (d.is_dynamic())
247241
{
248242
d.m_keys.swap(d.m_old_keys);
@@ -251,7 +245,7 @@ NeighborhoodSearch::update_point_sets()
251245
d.m_keys[i] = cell_index(d.point(i));
252246
}
253247
}
254-
});
248+
}
255249

256250
std::vector<unsigned int> to_delete;
257251
if (m_erase_empty_cells)
@@ -315,15 +309,9 @@ NeighborhoodSearch::erase_empty_entries(std::vector<unsigned int> const& to_dele
315309
});
316310

317311
// Perform neighborhood search.
318-
#ifdef _MSC_VER
319-
concurrency::parallel_for_each(
320-
#elif defined(__APPLE__) && defined(__clang__)
321-
std::for_each(oneapi::dpl::execution::par,
322-
#else
323-
__gnu_parallel::for_each(
324-
#endif
325-
kvps.begin(), kvps.end(), [&](std::pair<HashKey const, unsigned int>* kvp_)
326-
{
312+
#pragma omp parallel for
313+
for (int j =0; j < kvps.size(); j++){
314+
std::pair<HashKey const, unsigned int>* kvp_ = kvps[j];
327315
auto& kvp = *kvp_;
328316

329317
for (unsigned int i = 0; i < to_delete.size(); ++i)
@@ -334,7 +322,7 @@ NeighborhoodSearch::erase_empty_entries(std::vector<unsigned int> const& to_dele
334322
break;
335323
}
336324
}
337-
});
325+
}
338326
}
339327

340328
void
@@ -415,22 +403,16 @@ NeighborhoodSearch::query()
415403
});
416404

417405
// Perform neighborhood search.
418-
#ifdef _MSC_VER
419-
concurrency::parallel_for_each(
420-
#elif defined(__APPLE__) && defined(__clang__)
421-
std::for_each(oneapi::dpl::execution::par,
422-
#else
423-
__gnu_parallel::for_each(
424-
#endif
425-
kvps.begin(), kvps.end(), [&](std::pair<HashKey const, unsigned int> const* kvp_)
426-
{
406+
#pragma omp parallel for
407+
for (int _i = 0; _i < kvps.size(); _i++){
408+
std::pair<HashKey const, unsigned int> const* kvp_ = kvps[_i];
427409
auto const& kvp = *kvp_;
428410
HashEntry const& entry = m_entries[kvp.second];
429411
HashKey const& key = kvp.first;
430412

431413
if (entry.n_searching_points == 0u)
432414
{
433-
return;
415+
continue;
434416
}
435417

436418
for (unsigned int a = 0; a < entry.n_indices(); ++a)
@@ -471,26 +453,20 @@ NeighborhoodSearch::query()
471453
}
472454
}
473455
}
474-
);
475456

476457

477458
std::vector<std::array<bool, 27>> visited(m_entries.size(), {false});
478459
std::vector<Spinlock> entry_locks(m_entries.size());
479460

480-
#ifdef _MSC_VER
481-
concurrency::parallel_for_each(
482-
#elif defined(__APPLE__) && defined(__clang__)
483-
std::for_each(oneapi::dpl::execution::par,
484-
#else
485-
__gnu_parallel::for_each(
486-
#endif
487-
kvps.begin(), kvps.end(), [&](std::pair<HashKey const, unsigned int> const* kvp_)
488-
{
461+
#pragma omp parallel for
462+
for (int _i = 0; _i < kvps.size(); _i++){
463+
std::pair<HashKey const, unsigned int> const* kvp_ = kvps[_i];
464+
489465
auto const& kvp = *kvp_;
490466
HashEntry const& entry = m_entries[kvp.second];
491467

492468
if (entry.n_searching_points == 0u)
493-
return;
469+
continue;
494470
HashKey const& key = kvp.first;
495471

496472
for (int dj = -1; dj <= 1; dj++)
@@ -579,8 +555,7 @@ NeighborhoodSearch::query()
579555
}
580556
}
581557
}
582-
});
583-
558+
}
584559
}
585560

586561

0 commit comments

Comments
 (0)