Skip to content

Commit c313542

Browse files
authored
[new-exec] refactor code of interpretercore gc (#39617)
* relocate code of interpretercore gc
1 parent f29da15 commit c313542

File tree

10 files changed

+70
-62
lines changed

10 files changed

+70
-62
lines changed

paddle/fluid/framework/new_executor/CMakeLists.txt

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,25 @@
11
set(INTERPRETERCORE_DEPS op_registry device_context scope framework_proto data_feed_proto heter_service_proto trainer_desc_proto glog
22
lod_rank_table fs shell fleet_wrapper heter_wrapper ps_gpu_wrapper box_wrapper lodtensor_printer feed_fetch_method
3-
graph_to_program_pass variable_helper timer monitor nan_inf_utils interpretercore_event_garbage_collector)
3+
graph_to_program_pass variable_helper timer monitor nan_inf_utils)
44

5-
if(WITH_GPU)
6-
list(APPEND INTERPRETERCORE_DEPS interpretercore_fast_garbage_collector)
7-
endif()
85

96
add_subdirectory(workqueue)
7+
add_subdirectory(garbage_collector)
108

119
cc_library(data_transfer SRCS data_transfer.cc DEPS enforce scope glog)
1210
cc_library(new_executor_defs SRCS new_executor_defs.cc DEPS enforce glog scope)
13-
cc_library(interpretercore_garbage_collector SRCS interpretercore_garbage_collector.cc DEPS garbage_collector)
14-
cc_library(interpretercore_event_garbage_collector SRCS interpretercore_event_garbage_collector.cc DEPS interpretercore_garbage_collector)
1511
cc_library(interpretercore_util SRCS interpretercore_util.cc DEPS ${INTERPRETERCORE_DEPS} workqueue new_executor_defs data_transfer)
1612
cc_library(event_manager SRCS event_manager.cc DEPS ${DEVICE_EVENT_LIBS} glog new_executor_defs)
1713
cc_library(stream_analyzer SRCS stream_analyzer.cc DEPS ${DEVICE_EVENT_LIBS} glog device_context new_executor_defs)
18-
cc_library(interpretercore SRCS interpretercore.cc DEPS workqueue ${DEVICE_EVENT_LIBS} interpretercore_util interpretercore_event_garbage_collector stream_analyzer event_manager)
19-
cc_library(standalone_executor SRCS standalone_executor.cc DEPS interpretercore)
2014

2115
if(WITH_GPU OR WITH_ROCM)
22-
if(WITH_GPU)
23-
nv_library(interpretercore_fast_garbage_collector SRCS interpretercore_fast_garbage_collector.cc DEPS interpretercore_garbage_collector)
24-
elseif(WITH_ROCM)
25-
hip_library(interpretercore_fast_garbage_collector SRCS interpretercore_fast_garbage_collector.cc DEPS interpretercore_garbage_collector)
26-
endif()
27-
28-
target_link_libraries(interpretercore interpretercore_fast_garbage_collector)
16+
cc_library(interpretercore SRCS interpretercore.cc DEPS workqueue ${DEVICE_EVENT_LIBS} interpretercore_util interpretercore_event_garbage_collector interpretercore_fast_garbage_collector stream_analyzer event_manager)
17+
else()
18+
cc_library(interpretercore SRCS interpretercore.cc DEPS workqueue ${DEVICE_EVENT_LIBS} interpretercore_util interpretercore_event_garbage_collector stream_analyzer event_manager)
2919
endif()
3020

21+
cc_library(standalone_executor SRCS standalone_executor.cc DEPS interpretercore)
22+
3123
# cc_binary(standalone_executor_test SRCS standalone_executor_test.cc DEPS interpretercore standalone_executor operator op_registry executor ${GLOB_OP_LIB} ${GLOB_OPERATOR_DEPS} profiler)
3224
# skip win32 since wget is not installed by default on windows machine.
3325
# skip COVERAGE_CI since the test runs slowly because of instrumentation.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
cc_library(interpretercore_garbage_collector SRCS garbage_collector.cc DEPS garbage_collector)
2+
cc_library(interpretercore_event_garbage_collector SRCS event_garbage_collector.cc DEPS interpretercore_garbage_collector)
3+
4+
if(WITH_GPU OR WITH_ROCM)
5+
if(WITH_GPU)
6+
nv_library(interpretercore_fast_garbage_collector SRCS fast_garbage_collector.cc DEPS interpretercore_garbage_collector)
7+
elseif(WITH_ROCM)
8+
hip_library(interpretercore_fast_garbage_collector SRCS fast_garbage_collector.cc DEPS interpretercore_garbage_collector)
9+
endif()
10+
endif()

paddle/fluid/framework/new_executor/interpretercore_event_garbage_collector.cc renamed to paddle/fluid/framework/new_executor/garbage_collector/event_garbage_collector.cc

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
#include "paddle/fluid/framework/new_executor/interpretercore_event_garbage_collector.h"
15+
#include "paddle/fluid/framework/new_executor/garbage_collector/event_garbage_collector.h"
1616

1717
#if !defined(_WIN32)
1818
#include <sched.h>
@@ -36,7 +36,7 @@ InterpreterCoreEventGarbageCollector::~InterpreterCoreEventGarbageCollector() {
3636
}
3737

3838
void InterpreterCoreEventGarbageCollector::Add(
39-
Garbage garbage, platform::DeviceEvent& event,
39+
Garbage garbage, platform::DeviceEvent* event,
4040
const platform::DeviceContext* ctx) {
4141
if (!garbage) {
4242
return;
@@ -60,8 +60,14 @@ void InterpreterCoreEventGarbageCollector::Add(
6060
}
6161
}
6262

63+
void InterpreterCoreEventGarbageCollector::Add(Variable* var) {
64+
PADDLE_THROW(platform::errors::Unimplemented(
65+
"Add(Variable* var) is not implemented for "
66+
"InterpreterCoreEventGarbageCollector."));
67+
}
68+
6369
void InterpreterCoreEventGarbageCollector::Add(
64-
Variable* var, platform::DeviceEvent& event,
70+
Variable* var, platform::DeviceEvent* event,
6571
const platform::DeviceContext* ctx) {
6672
if (UNLIKELY(max_memory_size_ < 0) || var == nullptr) {
6773
return;
@@ -100,11 +106,11 @@ void InterpreterCoreEventGarbageCollector::Add(
100106
}
101107

102108
void InterpreterCoreEventGarbageCollector::Free(
103-
GarbageQueue* garbages, platform::DeviceEvent& event,
109+
GarbageQueue* garbages, platform::DeviceEvent* event,
104110
const platform::DeviceContext* ctx) {
105-
event.Record(ctx);
106-
event.SetFininshed(); // Only for CPU Event
107-
queue_->AddTask([ container = garbages, event = &event ]() {
111+
event->Record(ctx);
112+
event->SetFininshed(); // Only for CPU Event
113+
queue_->AddTask([ container = garbages, event = event ]() {
108114
while (!event->Query()) {
109115
#if defined(_WIN32)
110116
SleepEx(50, FALSE);
@@ -118,11 +124,11 @@ void InterpreterCoreEventGarbageCollector::Free(
118124
}
119125

120126
void InterpreterCoreEventGarbageCollector::Free(
121-
Garbage& garbage, platform::DeviceEvent& event,
127+
const Garbage& garbage, platform::DeviceEvent* event,
122128
const platform::DeviceContext* ctx) {
123-
event.Record(ctx);
124-
event.SetFininshed(); // Only for CPU Event
125-
queue_->AddTask([ container = garbage, event = &event ]() {
129+
event->Record(ctx);
130+
event->SetFininshed(); // Only for CPU Event
131+
queue_->AddTask([ container = garbage, event = event ]() {
126132
while (!event->Query()) {
127133
#if defined(_WIN32)
128134
SleepEx(50, FALSE);

paddle/fluid/framework/new_executor/interpretercore_event_garbage_collector.h renamed to paddle/fluid/framework/new_executor/garbage_collector/event_garbage_collector.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#pragma once
1515

1616
#include <queue>
17-
#include "paddle/fluid/framework/new_executor/interpretercore_garbage_collector.h"
17+
#include "paddle/fluid/framework/new_executor/garbage_collector/garbage_collector.h"
1818
#include "paddle/fluid/framework/new_executor/workqueue/workqueue.h"
1919

2020
namespace paddle {
@@ -26,15 +26,17 @@ class InterpreterCoreEventGarbageCollector
2626
InterpreterCoreEventGarbageCollector();
2727
~InterpreterCoreEventGarbageCollector();
2828

29-
virtual void Add(Variable* var, platform::DeviceEvent& event,
30-
const platform::DeviceContext* ctx) override;
29+
void Add(Variable* var) override;
30+
31+
virtual void Add(Variable* var, platform::DeviceEvent* event,
32+
const platform::DeviceContext* ctx);
3133

3234
private:
33-
void Add(Garbage garbage, platform::DeviceEvent& event,
35+
void Add(Garbage garbage, platform::DeviceEvent* event,
3436
const platform::DeviceContext* ctx);
35-
void Free(GarbageQueue* garbages, platform::DeviceEvent& event,
37+
void Free(GarbageQueue* garbages, platform::DeviceEvent* event,
3638
const platform::DeviceContext* ctx);
37-
void Free(Garbage& garbage, platform::DeviceEvent& event,
39+
void Free(const Garbage& garbage, platform::DeviceEvent* event,
3840
const platform::DeviceContext* ctx);
3941

4042
std::unique_ptr<WorkQueue> queue_;

paddle/fluid/framework/new_executor/interpretercore_fast_garbage_collector.cc renamed to paddle/fluid/framework/new_executor/garbage_collector/fast_garbage_collector.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,18 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
#include "paddle/fluid/framework/new_executor/interpretercore_fast_garbage_collector.h"
15+
#include "paddle/fluid/framework/new_executor/garbage_collector/fast_garbage_collector.h"
1616

1717
namespace paddle {
1818
namespace framework {
1919

20+
void InterpreterCoreFastGarbageCollector::Add(
21+
Variable* var, platform::DeviceEvent* event,
22+
const platform::DeviceContext* ctx) {
23+
PADDLE_THROW(platform::errors::Unimplemented(
24+
"Not implemented for InterpreterCoreFastGarbageCollector."));
25+
}
26+
2027
void InterpreterCoreFastGarbageCollector::Add(Variable* var) {
2128
if (UNLIKELY(max_memory_size_ < 0) || var == nullptr) {
2229
return;

paddle/fluid/framework/new_executor/interpretercore_fast_garbage_collector.h renamed to paddle/fluid/framework/new_executor/garbage_collector/fast_garbage_collector.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,24 @@
1313
// limitations under the License.
1414
#pragma once
1515

16-
#include "paddle/fluid/framework/new_executor/interpretercore_garbage_collector.h"
16+
#if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP)
17+
18+
#include "paddle/fluid/framework/new_executor/garbage_collector/garbage_collector.h"
1719

1820
namespace paddle {
1921
namespace framework {
2022

2123
class InterpreterCoreFastGarbageCollector
2224
: public InterpreterCoreGarbageCollector {
2325
public:
24-
virtual void Add(Variable* var) override;
26+
void Add(Variable* var) override;
27+
void Add(Variable* var, platform::DeviceEvent* event,
28+
const platform::DeviceContext* ctx) override;
2529

2630
private:
2731
void Add(Garbage garbage);
2832
};
2933
} // namespace framework
3034
} // namespace paddle
35+
36+
#endif

paddle/fluid/framework/new_executor/interpretercore_garbage_collector.cc renamed to paddle/fluid/framework/new_executor/garbage_collector/garbage_collector.cc

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
#include "paddle/fluid/framework/new_executor/interpretercore_garbage_collector.h"
15+
#include "paddle/fluid/framework/new_executor/garbage_collector/garbage_collector.h"
1616
#include "paddle/fluid/framework/garbage_collector.h"
1717

1818
namespace paddle {
@@ -24,19 +24,5 @@ InterpreterCoreGarbageCollector::InterpreterCoreGarbageCollector() {
2424
cur_memory_size_ = 0;
2525
}
2626

27-
void InterpreterCoreGarbageCollector::Add(Variable* var) {
28-
PADDLE_THROW(
29-
platform::errors::Unimplemented("Not allowed to call the member function "
30-
"of InterpreterCoreGarbageCollector"));
31-
}
32-
33-
void InterpreterCoreGarbageCollector::Add(Variable* var,
34-
platform::DeviceEvent& event,
35-
const platform::DeviceContext* ctx) {
36-
PADDLE_THROW(
37-
platform::errors::Unimplemented("Not allowed to call the member function "
38-
"of InterpreterCoreGarbageCollector"));
39-
}
40-
4127
} // namespace framework
4228
} // namespace paddle

paddle/fluid/framework/new_executor/interpretercore_garbage_collector.h renamed to paddle/fluid/framework/new_executor/garbage_collector/garbage_collector.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include <queue>
1717
#include "paddle/fluid/memory/allocation/spin_lock.h"
1818
#include "paddle/fluid/platform/device_event.h"
19+
#include "paddle/fluid/platform/enforce.h"
20+
#include "paddle/fluid/platform/errors.h"
1921

2022
namespace paddle {
2123
namespace framework {
@@ -26,10 +28,10 @@ using GarbageQueue = std::deque<Garbage>;
2628
class InterpreterCoreGarbageCollector {
2729
public:
2830
InterpreterCoreGarbageCollector();
29-
virtual ~InterpreterCoreGarbageCollector(){};
30-
virtual void Add(Variable* var);
31-
virtual void Add(Variable* var, platform::DeviceEvent& event,
32-
const platform::DeviceContext* ctx);
31+
virtual ~InterpreterCoreGarbageCollector() {}
32+
virtual void Add(Variable* var) = 0;
33+
virtual void Add(Variable* var, platform::DeviceEvent* event,
34+
const platform::DeviceContext* ctx) = 0;
3335
DISABLE_COPY_AND_ASSIGN(InterpreterCoreGarbageCollector);
3436

3537
protected:

paddle/fluid/framework/new_executor/interpretercore.cc

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,13 @@
1616
#include <unordered_set>
1717
#include "paddle/fluid/framework/details/nan_inf_utils.h"
1818
#include "paddle/fluid/framework/details/share_tensor_buffer_functor.h"
19-
#include "paddle/fluid/framework/new_executor/interpretercore_event_garbage_collector.h"
19+
#include "paddle/fluid/framework/new_executor/garbage_collector/event_garbage_collector.h"
20+
#include "paddle/fluid/framework/new_executor/garbage_collector/fast_garbage_collector.h"
2021
#include "paddle/fluid/framework/new_executor/interpretercore_util.h"
2122
#include "paddle/fluid/framework/operator.h"
2223
#include "paddle/fluid/platform/os_info.h"
2324
#include "paddle/fluid/platform/profiler/event_tracing.h"
2425

25-
#if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP)
26-
#include "paddle/fluid/framework/new_executor/interpretercore_fast_garbage_collector.h"
27-
#endif
28-
2926
PADDLE_DEFINE_EXPORTED_bool(new_executor_use_inplace, true,
3027
"Use inplace in new executor");
3128
PADDLE_DEFINE_EXPORTED_bool(new_executor_use_local_scope, true,
@@ -726,12 +723,12 @@ void InterpreterCore::CheckGC(const Instruction& instr) {
726723

727724
} else {
728725
static_cast<InterpreterCoreEventGarbageCollector*>(gc_.get())->Add(
729-
var_scope.Var(var_id), gc_event_.at(instr_id),
726+
var_scope.Var(var_id), &gc_event_.at(instr_id),
730727
&instr.DeviceContext());
731728
}
732729
#else
733730
static_cast<InterpreterCoreEventGarbageCollector*>(gc_.get())->Add(
734-
var_scope.Var(var_id), gc_event_.at(instr_id),
731+
var_scope.Var(var_id), &gc_event_.at(instr_id),
735732
&instr.DeviceContext());
736733
#endif
737734
}

paddle/fluid/framework/new_executor/interpretercore.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
#include "paddle/fluid/framework/details/exception_holder.h"
2323
#include "paddle/fluid/framework/new_executor/event_manager.h"
24-
#include "paddle/fluid/framework/new_executor/interpretercore_garbage_collector.h"
24+
#include "paddle/fluid/framework/new_executor/garbage_collector/garbage_collector.h"
2525
#include "paddle/fluid/framework/new_executor/interpretercore_util.h"
2626
#include "paddle/fluid/framework/new_executor/new_executor_defs.h"
2727
#include "paddle/fluid/framework/new_executor/profiler.h"

0 commit comments

Comments
 (0)