Skip to content

Commit 1238706

Browse files
authored
Refine unittest with setting gflags (#5476)
* add gflags for C++ unittest
1 parent 605b3e4 commit 1238706

File tree

6 files changed

+66
-20
lines changed

6 files changed

+66
-20
lines changed

cmake/generic.cmake

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ function(cc_test TARGET_NAME)
227227
set(multiValueArgs SRCS DEPS)
228228
cmake_parse_arguments(cc_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
229229
add_executable(${TARGET_NAME} ${cc_test_SRCS})
230-
target_link_libraries(${TARGET_NAME} ${cc_test_DEPS} gtest gtest_main)
231-
add_dependencies(${TARGET_NAME} ${cc_test_DEPS} gtest gtest_main)
230+
target_link_libraries(${TARGET_NAME} ${cc_test_DEPS} paddle_gtest_main paddle_memory gtest gflags)
231+
add_dependencies(${TARGET_NAME} ${cc_test_DEPS} paddle_gtest_main paddle_memory gtest gflags)
232232
add_test(NAME ${TARGET_NAME} COMMAND ${TARGET_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
233233
endif()
234234
endfunction(cc_test)
@@ -288,8 +288,8 @@ function(nv_test TARGET_NAME)
288288
set(multiValueArgs SRCS DEPS)
289289
cmake_parse_arguments(nv_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
290290
cuda_add_executable(${TARGET_NAME} ${nv_test_SRCS})
291-
target_link_libraries(${TARGET_NAME} ${nv_test_DEPS} gtest gtest_main)
292-
add_dependencies(${TARGET_NAME} ${nv_test_DEPS} gtest gtest_main)
291+
target_link_libraries(${TARGET_NAME} ${nv_test_DEPS} paddle_gtest_main paddle_memory gtest gflags)
292+
add_dependencies(${TARGET_NAME} ${nv_test_DEPS} paddle_gtest_main paddle_memory gtest gflags)
293293
add_test(${TARGET_NAME} ${TARGET_NAME})
294294
endif()
295295
endfunction(nv_test)

paddle/memory/memory.cc

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,33 @@ BuddyAllocator* GetGPUBuddyAllocator(int gpu_id) {
8181
}
8282

8383
template <>
84-
void* Alloc<platform::GPUPlace>(platform::GPUPlace place, size_t size) {
85-
return GetGPUBuddyAllocator(place.device)->Alloc(size);
84+
size_t Used<platform::GPUPlace>(platform::GPUPlace place) {
85+
return GetGPUBuddyAllocator(place.device)->Used();
8686
}
8787

8888
template <>
89-
void Free<platform::GPUPlace>(platform::GPUPlace place, void* p) {
90-
GetGPUBuddyAllocator(place.device)->Free(p);
89+
void* Alloc<platform::GPUPlace>(platform::GPUPlace place, size_t size) {
90+
auto* buddy_allocator = GetGPUBuddyAllocator(place.device);
91+
auto* ptr = buddy_allocator->Alloc(size);
92+
if (ptr == nullptr) {
93+
int cur_dev = platform::GetCurrentDeviceId();
94+
platform::SetDeviceId(place.device);
95+
size_t avail, total;
96+
platform::GpuMemoryUsage(avail, total);
97+
LOG(WARNING) << "Cannot allocate " << size << " bytes in GPU "
98+
<< place.device << ", available " << avail << " bytes";
99+
LOG(WARNING) << "total " << total;
100+
LOG(WARNING) << "GpuMinChunkSize " << platform::GpuMinChunkSize();
101+
LOG(WARNING) << "GpuMaxChunkSize " << platform::GpuMaxChunkSize();
102+
LOG(WARNING) << "GPU memory used: " << Used<platform::GPUPlace>(place);
103+
platform::SetDeviceId(cur_dev);
104+
}
105+
return ptr;
91106
}
92107

93108
template <>
94-
size_t Used<platform::GPUPlace>(platform::GPUPlace place) {
95-
return GetGPUBuddyAllocator(place.device)->Used();
109+
void Free<platform::GPUPlace>(platform::GPUPlace place, void* p) {
110+
GetGPUBuddyAllocator(place.device)->Free(p);
96111
}
97112

98113
#endif

paddle/optimizer/parameter_optimizer_test.cc

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,3 @@ TEST_F(OptimizerTest, TestGetWeight) { TestGetWeight(); }
127127
TEST_F(OptimizerTest, TestUpdate) { TestUpdate(); }
128128

129129
TEST_F(OptimizerTest, TestCheckPoint) { TestCheckPoint(); }
130-
131-
int main(int argc, char** argv) {
132-
testing::InitGoogleTest(&argc, argv);
133-
return RUN_ALL_TESTS();
134-
}

paddle/optimizer/serialization_test.cc

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,3 @@ TEST(TensorToProto, Case2) {
4646
EXPECT_EQ(t1[i], t[i]);
4747
}
4848
}
49-
50-
int main(int argc, char** argv) {
51-
testing::InitGoogleTest(&argc, argv);
52-
return RUN_ALL_TESTS();
53-
}

paddle/testing/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ if(WITH_TESTING)
55
add_dependencies(paddle_test_main paddle_proto ${external_project_dependencies})
66
add_library(paddle_test_util STATIC TestUtil.cpp)
77
add_dependencies(paddle_test_util paddle_proto ${external_project_dependencies})
8+
add_library(paddle_gtest_main STATIC paddle_gtest_main.cc)
9+
add_dependencies(paddle_gtest_main paddle_memory gtest gflags)
810
endif()

paddle/testing/paddle_gtest_main.cc

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License. */
14+
15+
#include <cstring>
16+
#include "gflags/gflags.h"
17+
#include "gtest/gtest.h"
18+
#include "paddle/memory/memory.h"
19+
20+
int main(int argc, char** argv) {
21+
std::vector<char*> new_argv;
22+
std::string gflags_env;
23+
new_argv.push_back(argv[0]);
24+
#ifdef PADDLE_WITH_CUDA
25+
new_argv.push_back(
26+
strdup("--tryfromenv=fraction_of_gpu_memory_to_use,use_pinned_memory"));
27+
#else
28+
new_argv.push_back(strdup("--tryfromenv=use_pinned_memory"));
29+
#endif
30+
int new_argc = static_cast<int>(new_argv.size());
31+
char** new_argv_address = new_argv.data();
32+
google::ParseCommandLineFlags(&new_argc, &new_argv_address, false);
33+
testing::InitGoogleTest(&argc, argv);
34+
paddle::memory::Used(paddle::platform::CPUPlace());
35+
#ifdef PADDLE_WITH_CUDA
36+
paddle::memory::Used(paddle::platform::GPUPlace(0));
37+
#endif
38+
return RUN_ALL_TESTS();
39+
}

0 commit comments

Comments
 (0)