Skip to content

Commit e34725f

Browse files
authored
Merge pull request #906 from hongriTianqi/develop
test(Parallel): add UT of `split_diag_world` and `split_grid_world`
2 parents a0ce815 + 7f61f8e commit e34725f

File tree

3 files changed

+125
-0
lines changed

3 files changed

+125
-0
lines changed

source/src_parallel/test/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,22 @@ AddTest(
44
SOURCES parallel_common_test.cpp ../../module_base/global_variable.cpp ../parallel_common.cpp
55
)
66

7+
AddTest(
8+
TARGET ParaGlobal
9+
LIBS MPI::MPI_CXX
10+
SOURCES parallel_global_test.cpp ../../module_base/global_variable.cpp ../parallel_global.cpp
11+
)
12+
713
install(FILES parallel_common_test.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
14+
install(FILES parallel_global_test.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
815

916
find_program(BASH bash)
17+
1018
add_test(NAME parallel_common_test
1119
COMMAND ${BASH} parallel_common_test.sh
1220
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
1321
)
22+
add_test(NAME parallel_global_test
23+
COMMAND ${BASH} parallel_global_test.sh
24+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
25+
)
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#ifdef __MPI
2+
#include "mpi.h"
3+
#include "gtest/gtest.h"
4+
#include "module_base/global_variable.h"
5+
#include "src_parallel/parallel_global.h"
6+
#include <complex>
7+
#include <string>
8+
#include <cstring>
9+
10+
/************************************************
11+
* unit test of functions in parallel_global.cpp
12+
***********************************************/
13+
14+
/**
15+
* The tested functions are:
16+
* i. Parallel_Global::split_diag_world(), which is
17+
* used in David diagonalization in pw basis
18+
* calculation.
19+
* ii. Parallel_Global::split_grid_world()
20+
*/
21+
22+
TEST(ParaGlobal,SplitGrid)
23+
{
24+
// NPROC is set to 6 in parallel_global_test.sh
25+
if(GlobalV::NPROC==6)
26+
{
27+
Parallel_Global::split_grid_world(2);
28+
EXPECT_EQ(GlobalV::GSIZE,3);
29+
if(GlobalV::MY_RANK==0) EXPECT_EQ(GlobalV::GRANK,0);
30+
if(GlobalV::MY_RANK==1) EXPECT_EQ(GlobalV::GRANK,1);
31+
if(GlobalV::MY_RANK==2) EXPECT_EQ(GlobalV::GRANK,2);
32+
if(GlobalV::MY_RANK==3) EXPECT_EQ(GlobalV::GRANK,0);
33+
if(GlobalV::MY_RANK==4) EXPECT_EQ(GlobalV::GRANK,1);
34+
if(GlobalV::MY_RANK==5) EXPECT_EQ(GlobalV::GRANK,2);
35+
Parallel_Global::split_grid_world(6);
36+
EXPECT_EQ(GlobalV::GSIZE,1);
37+
if(GlobalV::MY_RANK==0) EXPECT_EQ(GlobalV::GRANK,0);
38+
if(GlobalV::MY_RANK==1) EXPECT_EQ(GlobalV::GRANK,0);
39+
if(GlobalV::MY_RANK==2) EXPECT_EQ(GlobalV::GRANK,0);
40+
if(GlobalV::MY_RANK==3) EXPECT_EQ(GlobalV::GRANK,0);
41+
if(GlobalV::MY_RANK==4) EXPECT_EQ(GlobalV::GRANK,0);
42+
if(GlobalV::MY_RANK==5) EXPECT_EQ(GlobalV::GRANK,0);
43+
}
44+
else
45+
{
46+
Parallel_Global::split_grid_world(GlobalV::NPROC);
47+
EXPECT_EQ(GlobalV::GSIZE,1);
48+
EXPECT_EQ(GlobalV::GRANK,0);
49+
}
50+
//std::cout<<GlobalV::MY_RANK<<" "<<GlobalV::NPROC<<" ";
51+
//std::cout<<GlobalV::GRANK<<" "<<GlobalV::GSIZE<<std::endl;
52+
}
53+
54+
TEST(ParaGlobal,SplitDiag)
55+
{
56+
// NPROC is set to 6 in parallel_global_test.sh
57+
if(GlobalV::NPROC==6)
58+
{
59+
Parallel_Global::split_diag_world(2);
60+
EXPECT_EQ(GlobalV::DSIZE,2);
61+
if(GlobalV::MY_RANK==0) EXPECT_EQ(GlobalV::DRANK,0);
62+
if(GlobalV::MY_RANK==1) EXPECT_EQ(GlobalV::DRANK,0);
63+
if(GlobalV::MY_RANK==2) EXPECT_EQ(GlobalV::DRANK,0);
64+
if(GlobalV::MY_RANK==3) EXPECT_EQ(GlobalV::DRANK,1);
65+
if(GlobalV::MY_RANK==4) EXPECT_EQ(GlobalV::DRANK,1);
66+
if(GlobalV::MY_RANK==5) EXPECT_EQ(GlobalV::DRANK,1);
67+
Parallel_Global::split_diag_world(6);
68+
EXPECT_EQ(GlobalV::DSIZE,6);
69+
if(GlobalV::MY_RANK==0) EXPECT_EQ(GlobalV::DRANK,0);
70+
if(GlobalV::MY_RANK==1) EXPECT_EQ(GlobalV::DRANK,1);
71+
if(GlobalV::MY_RANK==2) EXPECT_EQ(GlobalV::DRANK,2);
72+
if(GlobalV::MY_RANK==3) EXPECT_EQ(GlobalV::DRANK,3);
73+
if(GlobalV::MY_RANK==4) EXPECT_EQ(GlobalV::DRANK,4);
74+
if(GlobalV::MY_RANK==5) EXPECT_EQ(GlobalV::DRANK,5);
75+
}
76+
else
77+
{
78+
Parallel_Global::split_diag_world(GlobalV::NPROC);
79+
EXPECT_EQ(GlobalV::DSIZE,GlobalV::NPROC);
80+
}
81+
//std::cout<<GlobalV::MY_RANK<<" "<<GlobalV::NPROC<<" ";
82+
//std::cout<<GlobalV::DRANK<<" "<<GlobalV::DSIZE<<std::endl;
83+
}
84+
85+
int main(int argc, char **argv)
86+
{
87+
88+
MPI_Init(&argc, &argv);
89+
testing::InitGoogleTest(&argc, argv);
90+
91+
MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC);
92+
MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK);
93+
94+
int result = RUN_ALL_TESTS();
95+
96+
MPI_Finalize();
97+
98+
return result;
99+
}
100+
#endif
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
3+
np=`cat /proc/cpuinfo | grep "cpu cores" | uniq| awk '{print $NF}'`
4+
echo "nprocs in this machine is $np"
5+
6+
for i in 6;do
7+
if [[ $i -gt $np ]];then
8+
continue
9+
fi
10+
echo "TEST in parallel, nprocs=$i"
11+
mpirun -np $i ./ParaGlobal
12+
break
13+
done

0 commit comments

Comments
 (0)