Skip to content

Commit decaad5

Browse files
authored
Merge pull request #8542 from panyx0718/test
Extend current profiler for timeline and more features.
2 parents ef35c4e + 1783ab1 commit decaad5

24 files changed

+699
-38
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ include(external/cares)
146146
include(external/grpc)
147147

148148
include(cudnn) # set cudnn libraries, must before configure
149+
include(cupti)
149150
include(configure) # add paddle env configuration
150151
include(generic) # simplify cmake module
151152
include(package) # set paddle packages

cmake/configure.cmake

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ endif(NOT WITH_GOLANG)
5959

6060
if(NOT WITH_GPU)
6161
add_definitions(-DHPPL_STUB_FUNC)
62+
add_definitions("-DCUPTI_LIB_PATH=\"\"")
6263

6364
list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS cu)
6465
else()
@@ -73,7 +74,14 @@ else()
7374
if(NOT CUDNN_FOUND)
7475
message(FATAL_ERROR "Paddle needs cudnn to compile")
7576
endif()
76-
77+
if(CUPTI_FOUND)
78+
include_directories(${CUPTI_INCLUDE_DIR})
79+
add_definitions(-DPADDLE_WITH_CUPTI)
80+
add_definitions("-DCUPTI_LIB_PATH=\"${CUPTI_LIBRARY_PATH}\"")
81+
else()
82+
add_definitions("-DCUPTI_LIB_PATH=\"\"")
83+
message(STATUS "Cannot find CUPTI, GPU Profiling is incorrect.")
84+
endif()
7785
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xcompiler ${SIMD_FLAG}")
7886

7987
# Include cuda and cudnn

cmake/cuda.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@ endif()
155155
include_directories(${CUDA_INCLUDE_DIRS})
156156
list(APPEND EXTERNAL_LIBS ${CUDA_LIBRARIES} ${CUDA_rt_LIBRARY})
157157
if(NOT WITH_DSO)
158-
list(APPEND EXTERNAL_LIBS ${CUDNN_LIBRARY} ${CUDA_CUBLAS_LIBRARIES} ${CUDA_curand_LIBRARY} ${NCCL_LIBRARY})
158+
# TODO(panyx0718): CUPTI only allows DSO?
159+
list(APPEND EXTERNAL_LIBS ${CUDNN_LIBRARY} ${CUPTI_LIBRARY} ${CUDA_CUBLAS_LIBRARIES} ${CUDA_curand_LIBRARY} ${NCCL_LIBRARY})
159160
endif(NOT WITH_DSO)
160161

161162
# setting nvcc arch flags

cmake/cupti.cmake

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
if(NOT WITH_GPU)
2+
return()
3+
endif()
4+
5+
6+
set(CUPTI_ROOT "/usr" CACHE PATH "CUPTI ROOT")
7+
find_path(CUPTI_INCLUDE_DIR cupti.h
8+
PATHS ${CUPTI_ROOT} ${CUPTI_ROOT}/include
9+
$ENV{CUPTI_ROOT} $ENV{CUPTI_ROOT}/include
10+
${CUDA_TOOLKIT_ROOT_DIR}/extras/CUPTI/include
11+
NO_DEFAULT_PATH
12+
)
13+
14+
get_filename_component(__libpath_hist ${CUDA_CUDART_LIBRARY} PATH)
15+
16+
set(TARGET_ARCH "x86_64")
17+
if(NOT ${CMAKE_SYSTEM_PROCESSOR})
18+
set(TARGET_ARCH ${CMAKE_SYSTEM_PROCESSOR})
19+
endif()
20+
21+
list(APPEND CUPTI_CHECK_LIBRARY_DIRS
22+
${CUPTI_ROOT}
23+
${CUPTI_ROOT}/lib64
24+
${CUPTI_ROOT}/lib
25+
${CUPTI_ROOT}/lib/${TARGET_ARCH}-linux-gnu
26+
$ENV{CUPTI_ROOT}
27+
$ENV{CUPTI_ROOT}/lib64
28+
$ENV{CUPTI_ROOT}/lib
29+
/usr/lib
30+
${CUDA_TOOLKIT_ROOT_DIR}/extras/CUPTI/lib64)
31+
find_library(CUPTI_LIBRARY NAMES libcupti.so libcupti.dylib # libcupti_static.a
32+
PATHS ${CUPTI_CHECK_LIBRARY_DIRS} ${CUPTI_INCLUDE_DIR} ${__libpath_hist}
33+
NO_DEFAULT_PATH
34+
DOC "Path to cuPTI library.")
35+
36+
get_filename_component(CUPTI_LIBRARY_PATH ${CUPTI_LIBRARY} DIRECTORY)
37+
if(CUPTI_INCLUDE_DIR AND CUPTI_LIBRARY)
38+
set(CUPTI_FOUND ON)
39+
else()
40+
set(CUPTI_FOUND OFF)
41+
endif()

paddle/fluid/framework/executor.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@ void Executor::Run(const ProgramDesc& pdesc, Scope* scope, int block_id,
127127
auto op = paddle::framework::OpRegistry::CreateOp(*op_desc);
128128

129129
platform::DeviceContextPool& pool = platform::DeviceContextPool::Instance();
130-
platform::RecordEvent record_event(op->Type(), pool.Get(place_));
130+
// TODO(panyx0718): Need a program id to distinguish programs.
131+
platform::RecordEvent record_event(op->Type(), pool.Get(place_),
132+
op_desc->Block()->ID());
131133

132134
VLOG(3) << place_ << " " << op->DebugStringEx(local_scope);
133135
op->Run(*local_scope, place_);

paddle/fluid/framework/framework.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,4 +167,6 @@ message BlockDesc {
167167
// Please refer to
168168
// https://github.com/PaddlePaddle/Paddle/blob/develop/doc/design/program.md
169169
// for more details.
170+
// TODO(panyx0718): A model can have multiple programs. Need a
171+
// way to distinguish them. Maybe ID or name?
170172
message ProgramDesc { repeated BlockDesc blocks = 1; }

paddle/fluid/framework/op_desc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ class OpDesc {
125125

126126
BlockDesc *Block() { return this->block_; }
127127

128+
const BlockDesc &BlockRef() const { return *this->block_; }
129+
128130
void SetBlock(BlockDesc *block) { this->block_ = block; }
129131

130132
private:

paddle/fluid/platform/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
proto_library(profiler_proto SRCS profiler.proto)
2+
13
if(WITH_GPU)
24
cc_library(enforce SRCS enforce.cc DEPS)
35
else()
@@ -37,7 +39,8 @@ nv_test(cudnn_helper_test SRCS cudnn_helper_test.cc DEPS dynload_cuda)
3739
nv_test(transform_test SRCS transform_test.cu DEPS paddle_memory place device_context)
3840
nv_test(nccl_test SRCS nccl_test.cu DEPS dynload_cuda gpu_info device_context)
3941

40-
cc_library(profiler SRCS profiler.cc DEPS device_context)
42+
cc_library(device_tracer SRCS device_tracer.cc DEPS profiler_proto ${GPU_CTX_DEPS})
43+
cc_library(profiler SRCS profiler.cc DEPS device_context device_tracer)
4144
cc_test(profiler_test SRCS profiler_test.cc DEPS profiler)
4245

4346
nv_test(float16_gpu_test SRCS float16_test.cu)

0 commit comments

Comments
 (0)