@ -12,6 +12,8 @@ function(op_library TARGET)
set ( OP_LIBRARY ${ TARGET } ${ OP_LIBRARY } PARENT_SCOPE )
set ( cc_srcs )
set ( cu_srcs )
set ( hip_cu_srcs )
set ( miopen_hip_cc_srcs )
set ( cu_cc_srcs )
set ( cudnn_cu_cc_srcs )
set ( CUDNN_FILE )
@ -36,10 +38,19 @@ function(op_library TARGET)
if ( EXISTS ${ CMAKE_CURRENT_SOURCE_DIR } / ${ TARGET } .cu )
list ( APPEND cu_srcs ${ TARGET } .cu )
endif ( )
if ( EXISTS ${ CMAKE_CURRENT_SOURCE_DIR } / ${ TARGET } .hip.cu )
list ( APPEND hip_cu_srcs ${ TARGET } .hip.cu )
endif ( )
string ( REPLACE "_op" "_cudnn_op" CUDNN_FILE "${TARGET}" )
if ( EXISTS ${ CMAKE_CURRENT_SOURCE_DIR } / ${ CUDNN_FILE } .cu.cc )
list ( APPEND cudnn_cu_cc_srcs ${ CUDNN_FILE } .cu.cc )
endif ( )
if ( WITH_AMD_GPU )
string ( REPLACE "_op" "_miopen_op" MIOPEN_FILE "${TARGET}" )
if ( EXISTS ${ CMAKE_CURRENT_SOURCE_DIR } / ${ MIOPEN_FILE } .hip.cc )
list ( APPEND miopen_hip_cc_srcs ${ MIOPEN_FILE } .hip.cc )
endif ( )
endif ( )
if ( WITH_MKLDNN )
string ( REPLACE "_op" "_mkldnn_op" MKLDNN_FILE "${TARGET}" )
if ( EXISTS ${ CMAKE_CURRENT_SOURCE_DIR } / ${ MKLDNN_FILE } .cc )
@ -48,10 +59,14 @@ function(op_library TARGET)
endif ( )
else ( )
foreach ( src ${ op_library_SRCS } )
if ( ${ src } MATCHES ".*\\.cu$" )
if ( ${ src } MATCHES ".*\\.hip.cu$" )
list ( APPEND hip_cu_srcs ${ src } )
elseif ( ${ src } MATCHES ".*\\.cu$" )
list ( APPEND cu_srcs ${ src } )
elseif ( ${ src } MATCHES ".*_cudnn_op.cu.cc$" )
list ( APPEND cudnn_cu_cc_srcs ${ src } )
elseif ( WITH_AMD_GPU AND ${ src } MATCHES ".*_miopen_op.hip.cc$" )
list ( APPEND miopen_hip_cc_srcs ${ src } )
elseif ( WITH_MKLDNN AND ${ src } MATCHES ".*_mkldnn_op.cc$" )
list ( APPEND mkldnn_cc_srcs ${ src } )
elseif ( ${ src } MATCHES ".*\\.cu.cc$" )
@ -77,8 +92,8 @@ function(op_library TARGET)
nv_library ( ${ TARGET } SRCS ${ cc_srcs } ${ cu_cc_srcs } ${ cudnn_cu_cc_srcs } ${ mkldnn_cc_srcs } ${ cu_srcs } DEPS ${ op_library_DEPS }
$ { o p _ c o m m o n _ d e p s } )
elseif ( WITH_AMD_GPU )
hip_library ( ${ TARGET } SRCS ${ cc_srcs } ${ hip_c c_srcs} ${ miopen_cu_cc_srcs } ${ mkldnn_cc_srcs } ${ hip_srcs } DEPS
$ { o p _ li b r a r y _ D E P S } $ { o p _ co m m o n _ d e p s } )
hip_library ( ${ TARGET } SRCS ${ cc_srcs } ${ hip_c u_srcs} ${ miopen_hip_cc_srcs } ${ mkldnn_cc_srcs } DEPS ${ op_library_DEPS }
$ { o p _ co m m o n _ d e p s } )
else ( )
cc_library ( ${ TARGET } SRCS ${ cc_srcs } ${ mkldnn_cc_srcs } DEPS ${ op_library_DEPS }
$ { o p _ c o m m o n _ d e p s } )
@ -91,7 +106,7 @@ function(op_library TARGET)
endif ( )
endforeach ( )
# T h e r e g i s t r a t i o n o f U S E _ O P , p l e a s e r e f e r t o p a d d l e / f ra m e w o r k / o p _ r e g i s t r y . h .
# T h e r e g i s t r a t i o n o f U S E _ O P , p l e a s e r e f e r t o p a d d l e / f lu i d / f ra m e w o r k / o p _ r e g i s t r y . h .
# N o t e t h a t i t ' s e n o u g h t o j u s t a d d i n g o n e o p e r a t o r t o p y b i n d i n a * _ o p . c c f i l e .
# A n d f o r d e t a i l p y b i n d i n f o r m a t i o n , p l e a s e s e e g e n e r a t e d p a d d l e / p y b i n d / p y b i n d . h .
file ( READ ${ TARGET } .cc TARGET_CONTENT )
@ -117,7 +132,10 @@ function(op_library TARGET)
list ( LENGTH cu_srcs cu_srcs_len )
list ( LENGTH cu_cc_srcs cu_cc_srcs_len )
list ( LENGTH mkldnn_cc_srcs mkldnn_cc_srcs_len )
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 )
list ( LENGTH hip_cu_srcs hip_cu_srcs_len )
list ( LENGTH miopen_hip_cc_srcs miopen_hip_cc_srcs_len )
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
$ { h i p _ c u _ s r c s _ l e n } E Q U A L 0 A N D $ { m i o p e n _ h i p _ c c _ s r c s _ l e n } E Q U A L 0 )
file ( APPEND ${ pybind_file } "USE_CPU_ONLY_OP(${TARGET});\n" )
set ( pybind_flag 1 )
endif ( )
@ -128,6 +146,11 @@ function(op_library TARGET)
file ( APPEND ${ pybind_file } "USE_OP_DEVICE_KERNEL(${TARGET}, CUDNN);\n" )
endif ( )
# p y b i n d U S E _ O P _ D E V I C E _ K E R N E L f o r M I O P E N
if ( WITH_AMD_GPU AND ${ miopen_hip_cc_srcs_len } GREATER 0 )
file ( APPEND ${ pybind_file } "USE_OP_DEVICE_KERNEL(${TARGET}, MIOPEN);\n" )
endif ( )
# p y b i n d U S E _ O P _ D E V I C E _ K E R N E L f o r M K L D N N
if ( WITH_MKLDNN AND ${ mkldnn_cc_srcs_len } GREATER 0 )
file ( APPEND ${ pybind_file } "USE_OP_DEVICE_KERNEL(${TARGET}, MKLDNN);\n" )