Skip to content

Commit 1b372d9

Browse files
committed
Merge branch 'develop' of https://github.com/PaddlePaddle/Paddle into change_requirements
test=develop
2 parents 53760bb + 1d9b2a4 commit 1b372d9

File tree

422 files changed

+9573
-2709
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

422 files changed

+9573
-2709
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
python/paddle/fluid/tests/unittests/reader_reset_test.recordio
12
paddle/operators/check_t.save
23
paddle/operators/check_tensor.ls
34
paddle/operators/tensor.save
45
python/paddle/v2/fluid/tests/book/image_classification_resnet.inference.model/
56
python/paddle/v2/fluid/tests/book/image_classification_vgg.inference.model/
67
python/paddle/v2/fluid/tests/book/label_semantic_roles.inference.model/
8+
paddle/fluid/operators/distributed/send_recv.proto
79
*.DS_Store
810
*.vs
911
build/
@@ -28,4 +30,5 @@ third_party/
2830
build_*
2931
# clion workspace.
3032
cmake-build-*
33+
paddle/fluid/operators/distributed/send_recv.proto
3134
model_test

AUTHORS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
| QiJune | Jun Qi |
4343
| qingqing01 | Qing-Qing Dang |
4444
| reyoung | Yang Yu |
45+
| Sand3r- | Michal Gallus |
4546
| Superjom | Chun-Wei Yan |
4647
| tensor-tang | Jian Tang |
4748
| tianbingsz | Tian-Bing Xu |

CMakeLists.txt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,14 @@ set(PADDLE_PYTHON_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/python/build")
302302
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG")
303303
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG")
304304

305+
if (ON_INFER)
306+
message(STATUS "On inference mode, will take place some specific optimization.")
307+
add_definitions(-DPADDLE_ON_INFERENCE)
308+
else()
309+
#TODO(luotao), combine this warning with `make inference_lib_dist` command.
310+
message(WARNING "On inference mode, will take place some specific optimization. Turn on the ON_INFER flag when building inference_lib only.")
311+
endif()
312+
305313
add_subdirectory(paddle)
306314
if(WITH_PYTHON)
307315
add_subdirectory(python)
@@ -312,11 +320,3 @@ if(WITH_DOC)
312320
find_python_module(recommonmark REQUIRED)
313321
add_subdirectory(doc)
314322
endif()
315-
316-
if (ON_INFER)
317-
message(STATUS "On inference mode, will take place some specific optimization.")
318-
add_definitions(-DPADDLE_ON_INFERENCE)
319-
else()
320-
#TODO(luotao), combine this warning with `make inference_lib_dist` command.
321-
message(WARNING "On inference mode, will take place some specific optimization. Turn on the ON_INFER flag when building inference_lib only.")
322-
endif()

cmake/configure.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,7 @@ endif(WITH_GRPC)
218218
if(WITH_BRPC_RDMA)
219219
add_definitions(-DPADDLE_WITH_BRPC_RDMA)
220220
endif(WITH_BRPC_RDMA)
221+
222+
if(ON_INFER)
223+
add_definitions(-DPADDLE_ON_INFERENCE)
224+
endif(ON_INFER)

cmake/inference_lib.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ copy(framework_lib DEPS ${framework_lib_deps}
166166

167167
set(module "memory")
168168
copy(memory_lib
169-
SRCS ${src_dir}/${module}/*.h ${src_dir}/${module}/detail/*.h
170-
DSTS ${dst_dir}/${module} ${dst_dir}/${module}/detail
169+
SRCS ${src_dir}/${module}/*.h ${src_dir}/${module}/detail/*.h ${src_dir}/${module}/allocation/*.h
170+
DSTS ${dst_dir}/${module} ${dst_dir}/${module}/detail ${dst_dir}/${module}/allocation
171171
)
172172

173173
set(inference_deps paddle_fluid_shared paddle_fluid)

cmake/operators.cmake

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
set(PART_CUDA_KERNEL_FILES)
2+
function(op_library TARGET)
3+
# op_library is a function to create op library. The interface is same as
4+
# cc_library. But it handle split GPU/CPU code and link some common library
5+
# for ops.
6+
set(cc_srcs)
7+
set(cu_srcs)
8+
set(hip_cu_srcs)
9+
set(miopen_hip_cc_srcs)
10+
set(cu_cc_srcs)
11+
set(cudnn_cu_cc_srcs)
12+
set(CUDNN_FILE)
13+
set(mkldnn_cc_srcs)
14+
set(MKLDNN_FILE)
15+
set(op_common_deps operator op_registry math_function)
16+
set(options "")
17+
set(oneValueArgs "")
18+
set(multiValueArgs SRCS DEPS)
19+
set(pybind_flag 0)
20+
cmake_parse_arguments(op_library "${options}" "${oneValueArgs}"
21+
"${multiValueArgs}" ${ARGN})
22+
23+
list(LENGTH op_library_SRCS op_library_SRCS_len)
24+
if (${op_library_SRCS_len} EQUAL 0)
25+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.cc)
26+
list(APPEND cc_srcs ${TARGET}.cc)
27+
endif()
28+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.cu.cc)
29+
list(APPEND cu_cc_srcs ${TARGET}.cu.cc)
30+
endif()
31+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.cu)
32+
list(APPEND cu_srcs ${TARGET}.cu)
33+
endif()
34+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.part.cu)
35+
set(PART_CUDA_KERNEL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.part.cu
36+
${PART_CUDA_KERNEL_FILES} PARENT_SCOPE)
37+
list(APPEND cu_srcs ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.part.cu)
38+
endif()
39+
40+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}.hip.cu)
41+
list(APPEND hip_cu_srcs ${TARGET}.hip.cu)
42+
endif()
43+
string(REPLACE "_op" "_cudnn_op" CUDNN_FILE "${TARGET}")
44+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CUDNN_FILE}.cu.cc)
45+
list(APPEND cudnn_cu_cc_srcs ${CUDNN_FILE}.cu.cc)
46+
endif()
47+
if(WITH_AMD_GPU)
48+
string(REPLACE "_op" "_miopen_op" MIOPEN_FILE "${TARGET}")
49+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MIOPEN_FILE}.hip.cc)
50+
list(APPEND miopen_hip_cc_srcs ${MIOPEN_FILE}.hip.cc)
51+
endif()
52+
endif()
53+
if(WITH_MKLDNN)
54+
string(REPLACE "_op" "_mkldnn_op" MKLDNN_FILE "${TARGET}")
55+
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${MKLDNN_FILE}.cc)
56+
list(APPEND mkldnn_cc_srcs ${MKLDNN_FILE}.cc)
57+
endif()
58+
endif()
59+
else()
60+
foreach(src ${op_library_SRCS})
61+
if (${src} MATCHES ".*\\.hip.cu$")
62+
list(APPEND hip_cu_srcs ${src})
63+
elseif (${src} MATCHES ".*\\.cu$")
64+
list(APPEND cu_srcs ${src})
65+
elseif(${src} MATCHES ".*_cudnn_op.cu.cc$")
66+
list(APPEND cudnn_cu_cc_srcs ${src})
67+
elseif(WITH_AMD_GPU AND ${src} MATCHES ".*_miopen_op.hip.cc$")
68+
list(APPEND miopen_hip_cc_srcs ${src})
69+
elseif(WITH_MKLDNN AND ${src} MATCHES ".*_mkldnn_op.cc$")
70+
list(APPEND mkldnn_cc_srcs ${src})
71+
elseif(${src} MATCHES ".*\\.cu.cc$")
72+
list(APPEND cu_cc_srcs ${src})
73+
elseif(${src} MATCHES ".*\\.cc$")
74+
list(APPEND cc_srcs ${src})
75+
else()
76+
message(FATAL_ERROR "${TARGET} Source file ${src} should only be .cc or .cu")
77+
endif()
78+
endforeach()
79+
endif()
80+
81+
list(LENGTH cc_srcs cc_srcs_len)
82+
if (${cc_srcs_len} EQUAL 0)
83+
message(FATAL_ERROR "The op library ${TARGET} should contains at least one .cc file")
84+
endif()
85+
if (WIN32)
86+
# remove windows unsupported op, because windows has no nccl, no warpctc such ops.
87+
foreach(windows_unsupport_op "nccl_op" "gen_nccl_id_op" "warpctc_op" "hierarchical_sigmoid_op"
88+
"crf_decoding_op" "select_op" "lstmp_op" "gru_op" "fusion_gru_op" "lstm_op" "fusion_lstm_op" "cumsum_op"
89+
"fusion_seqconv_eltadd_relu_op" "channel_send_op" "channel_create_op" "channel_close_op" "channel_recv_op")
90+
if ("${TARGET}" STREQUAL "${windows_unsupport_op}")
91+
return()
92+
endif()
93+
endforeach()
94+
endif(WIN32)
95+
set(OP_LIBRARY ${TARGET} ${OP_LIBRARY} CACHE INTERNAL "op libs")
96+
97+
list(LENGTH op_library_DEPS op_library_DEPS_len)
98+
if (${op_library_DEPS_len} GREATER 0)
99+
set(DEPS_OPS ${TARGET} ${DEPS_OPS} PARENT_SCOPE)
100+
endif()
101+
if (WITH_GPU)
102+
nv_library(${TARGET} SRCS ${cc_srcs} ${cu_cc_srcs} ${cudnn_cu_cc_srcs} ${mkldnn_cc_srcs} ${cu_srcs} DEPS ${op_library_DEPS}
103+
${op_common_deps})
104+
elseif (WITH_AMD_GPU)
105+
hip_library(${TARGET} SRCS ${cc_srcs} ${hip_cu_srcs} ${miopen_hip_cc_srcs} ${mkldnn_cc_srcs} DEPS ${op_library_DEPS}
106+
${op_common_deps})
107+
else()
108+
cc_library(${TARGET} SRCS ${cc_srcs} ${mkldnn_cc_srcs} DEPS ${op_library_DEPS}
109+
${op_common_deps})
110+
endif()
111+
112+
# Define operators that don't need pybind here.
113+
foreach(manual_pybind_op "compare_op" "logical_op" "nccl_op"
114+
"tensor_array_read_write_op" "tensorrt_engine_op" "conv_fusion_op")
115+
if ("${TARGET}" STREQUAL "${manual_pybind_op}")
116+
set(pybind_flag 1)
117+
endif()
118+
endforeach()
119+
120+
# The registration of USE_OP, please refer to paddle/fluid/framework/op_registry.h.
121+
# Note that it's enough to just adding one operator to pybind in a *_op.cc file.
122+
# And for detail pybind information, please see generated paddle/pybind/pybind.h.
123+
file(READ ${TARGET}.cc TARGET_CONTENT)
124+
string(REGEX MATCH "REGISTER_OPERATOR\\(.*REGISTER_OPERATOR\\(" multi_register "${TARGET_CONTENT}")
125+
string(REGEX MATCH "REGISTER_OPERATOR\\([a-z0-9_]*," one_register "${multi_register}")
126+
if (one_register STREQUAL "")
127+
string(REPLACE "_op" "" TARGET "${TARGET}")
128+
else ()
129+
string(REPLACE "REGISTER_OPERATOR(" "" TARGET "${one_register}")
130+
string(REPLACE "," "" TARGET "${TARGET}")
131+
endif()
132+
133+
# pybind USE_NO_KERNEL_OP
134+
# HACK: if REGISTER_OP_CPU_KERNEL presents the operator must have kernel
135+
string(REGEX MATCH "REGISTER_OP_CPU_KERNEL" regex_result "${TARGET_CONTENT}")
136+
string(REPLACE "_op" "" TARGET "${TARGET}")
137+
if (${pybind_flag} EQUAL 0 AND regex_result STREQUAL "")
138+
file(APPEND ${pybind_file} "USE_NO_KERNEL_OP(${TARGET});\n")
139+
set(pybind_flag 1)
140+
endif()
141+
142+
# pybind USE_CPU_ONLY_OP
143+
list(LENGTH cu_srcs cu_srcs_len)
144+
list(LENGTH cu_cc_srcs cu_cc_srcs_len)
145+
list(LENGTH mkldnn_cc_srcs mkldnn_cc_srcs_len)
146+
list(LENGTH hip_cu_srcs hip_cu_srcs_len)
147+
list(LENGTH miopen_hip_cc_srcs miopen_hip_cc_srcs_len)
148+
if (${pybind_flag} EQUAL 0 AND ${mkldnn_cc_srcs_len} EQUAL 0 AND ${cu_srcs_len} EQUAL 0 AND ${cu_cc_srcs_len} EQUAL 0 AND
149+
${hip_cu_srcs_len} EQUAL 0 AND ${miopen_hip_cc_srcs_len} EQUAL 0)
150+
file(APPEND ${pybind_file} "USE_CPU_ONLY_OP(${TARGET});\n")
151+
set(pybind_flag 1)
152+
endif()
153+
154+
# pybind USE_OP_DEVICE_KERNEL for CUDNN
155+
list(LENGTH cudnn_cu_cc_srcs cudnn_cu_cc_srcs_len)
156+
if (WITH_GPU AND ${cudnn_cu_cc_srcs_len} GREATER 0)
157+
file(APPEND ${pybind_file} "USE_OP_DEVICE_KERNEL(${TARGET}, CUDNN);\n")
158+
endif()
159+
160+
# pybind USE_OP_DEVICE_KERNEL for MIOPEN
161+
if (WITH_AMD_GPU AND ${miopen_hip_cc_srcs_len} GREATER 0)
162+
file(APPEND ${pybind_file} "USE_OP_DEVICE_KERNEL(${TARGET}, MIOPEN);\n")
163+
endif()
164+
165+
# pybind USE_OP_DEVICE_KERNEL for MKLDNN
166+
if (WITH_MKLDNN AND ${mkldnn_cc_srcs_len} GREATER 0)
167+
# Append first implemented MKLDNN activation operator
168+
if (${MKLDNN_FILE} STREQUAL "activation_mkldnn_op")
169+
file(APPEND ${pybind_file} "USE_OP_DEVICE_KERNEL(relu, MKLDNN);\n")
170+
else()
171+
file(APPEND ${pybind_file} "USE_OP_DEVICE_KERNEL(${TARGET}, MKLDNN);\n")
172+
endif()
173+
endif()
174+
175+
# pybind USE_OP
176+
if (${pybind_flag} EQUAL 0)
177+
# NOTE(*): activation use macro to regist the kernels, set use_op manually.
178+
if(${TARGET} STREQUAL "activation")
179+
file(APPEND ${pybind_file} "USE_OP(relu);\n")
180+
elseif(${TARGET} STREQUAL "fake_dequantize")
181+
file(APPEND ${pybind_file} "USE_OP(fake_dequantize_max_abs);\n")
182+
elseif(${TARGET} STREQUAL "fake_quantize")
183+
file(APPEND ${pybind_file} "USE_OP(fake_quantize_abs_max);\n")
184+
elseif(${TARGET} STREQUAL "tensorrt_engine_op")
185+
message(STATUS "Pybind skips [tensorrt_engine_op], for this OP is only used in inference")
186+
elseif(${TARGET} STREQUAL "fc")
187+
# HACK: fc only have mkldnn and cpu, which would mismatch the cpu only condition
188+
file(APPEND ${pybind_file} "USE_CPU_ONLY_OP(${TARGET});\n")
189+
else()
190+
file(APPEND ${pybind_file} "USE_OP(${TARGET});\n")
191+
endif()
192+
endif()
193+
endfunction()
194+
195+
196+
function(register_operators)
197+
set(options "")
198+
set(oneValueArgs "")
199+
set(multiValueArgs EXCLUDES DEPS)
200+
cmake_parse_arguments(register_operators "${options}" "${oneValueArgs}"
201+
"${multiValueArgs}" ${ARGN})
202+
203+
file(GLOB OPS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "*_op.cc")
204+
string(REPLACE "_mkldnn" "" OPS "${OPS}")
205+
string(REPLACE ".cc" "" OPS "${OPS}")
206+
list(REMOVE_DUPLICATES OPS)
207+
list(LENGTH register_operators_DEPS register_operators_DEPS_len)
208+
209+
foreach(src ${OPS})
210+
list(FIND register_operators_EXCLUDES ${src} _index)
211+
if (${_index} EQUAL -1)
212+
if (${register_operators_DEPS_len} GREATER 0)
213+
op_library(${src} DEPS ${register_operators_DEPS})
214+
else()
215+
op_library(${src})
216+
endif()
217+
endif()
218+
endforeach()
219+
endfunction()

paddle/fluid/API.spec

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,11 @@ paddle.fluid.layers.edit_distance ArgSpec(args=['input', 'label', 'normalized',
9393
paddle.fluid.layers.l2_normalize ArgSpec(args=['x', 'axis', 'epsilon', 'name'], varargs=None, keywords=None, defaults=(1e-12, None))
9494
paddle.fluid.layers.matmul ArgSpec(args=['x', 'y', 'transpose_x', 'transpose_y', 'alpha', 'name'], varargs=None, keywords=None, defaults=(False, False, 1.0, None))
9595
paddle.fluid.layers.topk ArgSpec(args=['input', 'k', 'name'], varargs=None, keywords=None, defaults=(None,))
96-
paddle.fluid.layers.warpctc ArgSpec(args=['input', 'label', 'blank', 'norm_by_times'], varargs=None, keywords=None, defaults=(0, False))
96+
paddle.fluid.layers.warpctc ArgSpec(args=['input', 'label', 'blank', 'norm_by_times', 'use_cudnn'], varargs=None, keywords=None, defaults=(0, False, False))
9797
paddle.fluid.layers.sequence_reshape ArgSpec(args=['input', 'new_dim'], varargs=None, keywords=None, defaults=None)
9898
paddle.fluid.layers.transpose ArgSpec(args=['x', 'perm', 'name'], varargs=None, keywords=None, defaults=(None,))
9999
paddle.fluid.layers.im2sequence ArgSpec(args=['input', 'filter_size', 'stride', 'padding', 'input_image_size', 'out_stride', 'name'], varargs=None, keywords=None, defaults=(1, 1, 0, None, 1, None))
100-
paddle.fluid.layers.nce ArgSpec(args=['input', 'label', 'num_total_classes', 'sample_weight', 'param_attr', 'bias_attr', 'num_neg_samples', 'name'], varargs=None, keywords=None, defaults=(None, None, None, None, None))
100+
paddle.fluid.layers.nce ArgSpec(args=['input', 'label', 'num_total_classes', 'sample_weight', 'param_attr', 'bias_attr', 'num_neg_samples', 'name', 'sampler', 'custom_dist', 'seed'], varargs=None, keywords=None, defaults=(None, None, None, None, None, 'uniform', None, 0))
101101
paddle.fluid.layers.hsigmoid ArgSpec(args=['input', 'label', 'num_classes', 'param_attr', 'bias_attr', 'name'], varargs=None, keywords=None, defaults=(None, None, None))
102102
paddle.fluid.layers.beam_search ArgSpec(args=['pre_ids', 'pre_scores', 'ids', 'scores', 'beam_size', 'end_id', 'level', 'name'], varargs=None, keywords=None, defaults=(0, None))
103103
paddle.fluid.layers.row_conv ArgSpec(args=['input', 'future_context_size', 'param_attr', 'act'], varargs=None, keywords=None, defaults=(None, None))
@@ -128,6 +128,7 @@ paddle.fluid.layers.sequence_scatter ArgSpec(args=['input', 'index', 'updates',
128128
paddle.fluid.layers.random_crop ArgSpec(args=['x', 'shape', 'seed'], varargs=None, keywords=None, defaults=(None,))
129129
paddle.fluid.layers.mean_iou ArgSpec(args=['input', 'label', 'num_classes'], varargs=None, keywords=None, defaults=None)
130130
paddle.fluid.layers.relu ArgSpec(args=['x', 'name'], varargs=None, keywords=None, defaults=(None,))
131+
paddle.fluid.layers.selu ArgSpec(args=['x', 'scale', 'alpha', 'name'], varargs=None, keywords=None, defaults=(None, None, None))
131132
paddle.fluid.layers.log ArgSpec(args=['x', 'name'], varargs=None, keywords=None, defaults=(None,))
132133
paddle.fluid.layers.crop ArgSpec(args=['x', 'shape', 'offsets', 'name'], varargs=None, keywords=None, defaults=(None, None, None))
133134
paddle.fluid.layers.rank_loss ArgSpec(args=['label', 'left', 'right', 'name'], varargs=None, keywords=None, defaults=(None,))

paddle/fluid/framework/data_device_transform_test.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ limitations under the License. */
1717
#include "paddle/fluid/framework/lod_tensor.h"
1818
#include "paddle/fluid/framework/op_info.h"
1919
#include "paddle/fluid/framework/op_registry.h"
20-
#include "paddle/fluid/operators/elementwise_op_function.h"
20+
#include "paddle/fluid/operators/elementwise/elementwise_op_function.h"
2121
#include "paddle/fluid/operators/math/math_function.h"
2222
#include "paddle/fluid/platform/device_context.h"
2323
#include "paddle/fluid/platform/init.h"

paddle/fluid/framework/details/exception_holder.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class ExceptionHolder {
3030
Catch(exp);
3131
} catch (platform::EnforceNotMet exp) {
3232
Catch(exp);
33+
} catch (std::exception& ex) {
34+
LOG(FATAL) << "std::exception caught, " << ex.what();
3335
} catch (...) {
3436
LOG(FATAL) << "Unknown exception caught";
3537
}

paddle/fluid/framework/executor.cc

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -418,11 +418,6 @@ void Executor::RunPreparedContext(ExecutorPrepareContext* ctx, Scope* scope,
418418
DeleteUnusedTensors(*local_scope, op.get(), gc.get(),
419419
&(ctx->cur_ref_cnts_));
420420
}
421-
422-
if (FLAGS_benchmark) {
423-
VLOG(20) << "Memory used after operator " + op->Type() + " running: "
424-
<< memory::memory_usage(place_);
425-
}
426421
}
427422

428423
if (gc != nullptr) {
@@ -444,13 +439,6 @@ void Executor::RunPreparedContext(ExecutorPrepareContext* ctx, Scope* scope,
444439
scope->DropKids();
445440
}
446441
}
447-
448-
if (FLAGS_benchmark) {
449-
VLOG(20) << "-------------------------------------------------------";
450-
VLOG(20) << "Memory used after deleting local scope: "
451-
<< memory::memory_usage(place_);
452-
VLOG(20) << "-------------------------------------------------------";
453-
}
454442
}
455443

456444
void Executor::RunPreparedContext(

0 commit comments

Comments
 (0)