-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reorganize kernel region test files and add test for synchronization.
- Loading branch information
1 parent
72a642a
commit 19972b7
Showing
8 changed files
with
256 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
70 changes: 70 additions & 0 deletions
70
test/functional/kernel/region/test-kernel-region-sync-openmp.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// | ||
// Copyright (c) 2016-20, Lawrence Livermore National Security, LLC | ||
// and RAJA project contributors. See the RAJA/COPYRIGHT file for details. | ||
// | ||
// SPDX-License-Identifier: (BSD-3-Clause) | ||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// | ||
|
||
#include "tests/test-kernel-region-sync.hpp" | ||
|
||
#include "../../forall/test-forall-utils.hpp" | ||
|
||
using OpenMPKernelRegionSyncExecPols = | ||
camp::list< | ||
|
||
RAJA::KernelPolicy< | ||
RAJA::statement::Region<RAJA::omp_parallel_region, | ||
|
||
RAJA::statement::For<0, RAJA::omp_for_nowait_exec, | ||
RAJA::statement::Lambda<0, RAJA::Segs<0>> | ||
>, | ||
|
||
RAJA::statement::OmpSyncThreads, | ||
|
||
RAJA::statement::For<1, RAJA::omp_for_nowait_exec, | ||
RAJA::statement::Lambda<1, RAJA::Segs<1>> | ||
>, | ||
|
||
RAJA::statement::OmpSyncThreads, | ||
|
||
RAJA::statement::For<0, RAJA::omp_for_nowait_exec, | ||
RAJA::statement::Lambda<2, RAJA::Segs<0>> | ||
> | ||
|
||
> | ||
>, | ||
|
||
RAJA::KernelPolicy< | ||
RAJA::statement::Region<RAJA::omp_parallel_region, | ||
|
||
RAJA::statement::For<0, RAJA::omp_for_exec, | ||
RAJA::statement::Lambda<0, RAJA::Segs<0>> | ||
>, | ||
|
||
RAJA::statement::OmpSyncThreads, | ||
|
||
RAJA::statement::For<1, RAJA::omp_for_exec, | ||
RAJA::statement::Lambda<1, RAJA::Segs<1>> | ||
>, | ||
|
||
RAJA::statement::OmpSyncThreads, | ||
|
||
RAJA::statement::For<0, RAJA::omp_for_exec, | ||
RAJA::statement::Lambda<2, RAJA::Segs<0>> | ||
> | ||
|
||
> | ||
> | ||
|
||
>; | ||
|
||
|
||
// Cartesian product of types for OpenMP tests | ||
using OpenMPKernelRegionSyncTypes = | ||
Test< camp::cartesian_product<IdxTypeList, | ||
HostResourceList, | ||
OpenMPKernelRegionSyncExecPols> >::Types; | ||
|
||
INSTANTIATE_TYPED_TEST_SUITE_P(OpenMP, | ||
KernelRegionFunctionalTest, | ||
OpenMPKernelRegionSyncTypes); |
96 changes: 96 additions & 0 deletions
96
test/functional/kernel/region/tests/test-kernel-region-sync.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// | ||
// Copyright (c) 2016-20, Lawrence Livermore National Security, LLC | ||
// and RAJA project contributors. See the RAJA/COPYRIGHT file for details. | ||
// | ||
// SPDX-License-Identifier: (BSD-3-Clause) | ||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// | ||
|
||
#ifndef __TEST_KERNEL_REGION_SYNC_HPP__ | ||
#define __TEST_KERNEL_REGION_SYNC_HPP__ | ||
|
||
#include "test-kernel-region-utils.hpp" | ||
|
||
#include <algorithm> | ||
#include <numeric> | ||
#include <vector> | ||
|
||
template <typename INDEX_TYPE, typename WORKING_RES, typename EXEC_POLICY> | ||
void KernelRegionSyncFunctionalTest(INDEX_TYPE first, INDEX_TYPE last) | ||
{ | ||
camp::resources::Resource host_res{camp::resources::Host()}; | ||
camp::resources::Resource work_res{WORKING_RES()}; | ||
|
||
const INDEX_TYPE N = last - first; | ||
|
||
INDEX_TYPE* work_array1; | ||
INDEX_TYPE* work_array2; | ||
INDEX_TYPE* work_array3; | ||
|
||
INDEX_TYPE* check_array; | ||
|
||
allocRegionTestData(N, | ||
work_res, | ||
&work_array1, &work_array2, &work_array3, | ||
host_res, | ||
&check_array); | ||
|
||
work_res.memset( work_array1, 0, sizeof(INDEX_TYPE) * N ); | ||
work_res.memset( work_array2, 0, sizeof(INDEX_TYPE) * N ); | ||
work_res.memset( work_array3, 0, sizeof(INDEX_TYPE) * N ); | ||
|
||
host_res.memset( check_array, 0, sizeof(INDEX_TYPE) * N ); | ||
|
||
std::vector<INDEX_TYPE> idx_array(N); | ||
std::iota(idx_array.begin(), idx_array.end(), first); | ||
std::reverse(idx_array.begin(), idx_array.end()); | ||
RAJA::TypedListSegment<INDEX_TYPE> lseg(&idx_array[0], N, | ||
work_res); | ||
|
||
RAJA::TypedRangeSegment<INDEX_TYPE> rseg(first, last); | ||
|
||
RAJA::kernel<EXEC_POLICY>( | ||
|
||
RAJA::make_tuple(rseg, lseg), | ||
|
||
[=] (INDEX_TYPE i) { | ||
work_array1[i - first] = 50; | ||
}, | ||
|
||
[=] (INDEX_TYPE i) { | ||
work_array2[i - first] = 100; | ||
}, | ||
|
||
[=] (INDEX_TYPE i) { | ||
work_array3[i - first] = work_array1[i - first] + | ||
work_array2[i - first] + 1; | ||
} | ||
|
||
); | ||
|
||
work_res.memcpy(check_array, work_array3, sizeof(INDEX_TYPE) * N); | ||
|
||
for (INDEX_TYPE i = 0; i < N; i++) { | ||
ASSERT_EQ(check_array[i], 151); | ||
} | ||
|
||
deallocRegionTestData(work_res, | ||
work_array1, work_array2, work_array3, | ||
host_res, | ||
check_array); | ||
} | ||
|
||
TYPED_TEST_P(KernelRegionFunctionalTest, RegionSyncKernel) | ||
{ | ||
using INDEX_TYPE = typename camp::at<TypeParam, camp::num<0>>::type; | ||
using WORKING_RES = typename camp::at<TypeParam, camp::num<1>>::type; | ||
using EXEC_POLICY = typename camp::at<TypeParam, camp::num<2>>::type; | ||
|
||
KernelRegionSyncFunctionalTest<INDEX_TYPE, WORKING_RES, EXEC_POLICY>(0, 25); | ||
KernelRegionSyncFunctionalTest<INDEX_TYPE, WORKING_RES, EXEC_POLICY>(1, 153); | ||
KernelRegionSyncFunctionalTest<INDEX_TYPE, WORKING_RES, EXEC_POLICY>(3, 2556); | ||
} | ||
|
||
REGISTER_TYPED_TEST_SUITE_P(KernelRegionFunctionalTest, | ||
RegionSyncKernel); | ||
|
||
#endif // __TEST_KERNEL_REGION_SYNC_HPP__ |
51 changes: 51 additions & 0 deletions
51
test/functional/kernel/region/tests/test-kernel-region-utils.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// | ||
// Copyright (c) 2016-20, Lawrence Livermore National Security, LLC | ||
// and RAJA project contributors. See the RAJA/COPYRIGHT file for details. | ||
// | ||
// SPDX-License-Identifier: (BSD-3-Clause) | ||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// | ||
|
||
#ifndef __TEST_KERNEL_REGION_UTILS_HPP__ | ||
#define __TEST_KERNEL_REGION_UTILS_HPP__ | ||
|
||
#include "RAJA/RAJA.hpp" | ||
|
||
#include "camp/resource.hpp" | ||
|
||
#include "gtest/gtest.h" | ||
|
||
template <typename T> | ||
class KernelRegionFunctionalTest : public ::testing::Test | ||
{ | ||
}; | ||
|
||
template <typename T> | ||
void allocRegionTestData(int N, | ||
camp::resources::Resource& work_res, | ||
T** work1, T** work2, T** work3, | ||
camp::resources::Resource& host_res, | ||
T** check) | ||
{ | ||
*work1 = work_res.allocate<T>(N); | ||
*work2 = work_res.allocate<T>(N); | ||
*work3 = work_res.allocate<T>(N); | ||
|
||
*check = host_res.allocate<T>(N); | ||
} | ||
|
||
template <typename T> | ||
void deallocRegionTestData(camp::resources::Resource& work_res, | ||
T* work1, T* work2, T* work3, | ||
camp::resources::Resource& host_res, | ||
T* check) | ||
{ | ||
work_res.deallocate(work1); | ||
work_res.deallocate(work2); | ||
work_res.deallocate(work3); | ||
|
||
host_res.deallocate(check); | ||
} | ||
|
||
TYPED_TEST_SUITE_P(KernelRegionFunctionalTest); | ||
|
||
#endif // __TEST_KERNEL_REGION_UTILS_HPP__ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters