You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

CMakeLists.txt 9.3 kB

4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. include_directories(${PROJECT_SOURCE_DIR})
  2. include_directories(${PROJECT_BINARY_DIR})
  3. # N.B. In the original makefile there was a BLOCKS define used in the compilation of these files but I don't see any evidence of it being set anywhere. -hpa
  4. # loop through gemm.c defines
  5. set(GEMM_DEFINES NN NT TN TT)
  6. set(GEMM_COMPLEX_DEFINES RN CN RT CT NR TR RR CR NC TC RC CC)
  7. foreach (GEMM_DEFINE ${GEMM_DEFINES})
  8. string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
  9. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE}" "gemm_${GEMM_DEFINE_LC}" 0)
  10. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  11. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm_thread_${GEMM_DEFINE_LC}" 0)
  12. endif ()
  13. if (BUILD_BFLOAT16)
  14. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE}" "gemm_${GEMM_DEFINE_LC}" 0 "" "" false "BFLOAT16")
  15. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};BGEMM" "gemm_${GEMM_DEFINE_LC}" 0 "" "" false "BFLOAT16")
  16. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  17. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm_thread_${GEMM_DEFINE_LC}" 0 "" "" false "BFLOAT16")
  18. endif ()
  19. endif ()
  20. if (BUILD_HFLOAT16)
  21. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE}" "gemm_${GEMM_DEFINE_LC}" 0 "" "" false "HFLOAT16")
  22. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  23. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm_thread_${GEMM_DEFINE_LC}" 0 "" "" false "HFLOAT16")
  24. endif ()
  25. endif ()
  26. endforeach ()
  27. if ( BUILD_COMPLEX16 AND NOT BUILD_DOUBLE)
  28. foreach (GEMM_DEFINE ${GEMM_DEFINES})
  29. string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
  30. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE}" "gemm_${GEMM_DEFINE_LC}" 0 "" "" false "DOUBLE")
  31. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  32. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm_thread_${GEMM_DEFINE_LC}" 0 "" "" false "DOUBLE")
  33. endif()
  34. endforeach()
  35. endif()
  36. if ( BUILD_COMPLEX AND NOT BUILD_SINGLE)
  37. foreach (GEMM_DEFINE ${GEMM_DEFINES})
  38. string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
  39. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE}" "gemm_${GEMM_DEFINE_LC}" 0 "" "" false "SINGLE")
  40. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  41. GenerateNamedObjects("gemm.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm_thread_${GEMM_DEFINE_LC}" 0 "" "" false "SINGLE")
  42. endif()
  43. endforeach()
  44. endif()
  45. set(TRMM_TRSM_SOURCES
  46. trmm_L.c
  47. trmm_R.c
  48. trsm_L.c
  49. trsm_R.c)
  50. foreach(trmm_trsm_source ${TRMM_TRSM_SOURCES})
  51. string(REGEX MATCH "[a-z]+_[A-Z]+" op_name ${trmm_trsm_source})
  52. GenerateCombinationObjects("${trmm_trsm_source}" "UPPER;UNIT" "L;N" "" 0 "${op_name}N")
  53. GenerateCombinationObjects("${trmm_trsm_source}" "UPPER;UNIT" "L;N" "TRANSA" 0 "${op_name}T")
  54. endforeach()
  55. GenerateCombinationObjects("symm_k.c" "RSIDE;LOWER" "L;U" "NN" 1)
  56. GenerateCombinationObjects("syrk_k.c" "LOWER;TRANS" "U;N" "" 1)
  57. GenerateCombinationObjects("syr2k_k.c" "LOWER;TRANS" "U;N" "" 1)
  58. GenerateCombinationObjects("syrk_kernel.c" "LOWER" "U" "" 2)
  59. GenerateCombinationObjects("syr2k_kernel.c" "LOWER" "U" "" 2)
  60. if (USE_THREAD)
  61. # N.B. these do NOT have a float type (e.g. DOUBLE) defined!
  62. GenerateNamedObjects("gemm_thread_m.c;gemm_thread_n.c;gemm_thread_mn.c;gemm_thread_variable.c;syrk_thread.c" "" "" 0 "" "" 1)
  63. if (NOT USE_SIMPLE_THREADED_LEVEL3)
  64. GenerateCombinationObjects("syrk_k.c" "LOWER;TRANS" "U;N" "THREADED_LEVEL3" 2 "syrk_thread")
  65. GenerateCombinationObjects("symm_k.c" "RSIDE;LOWER" "L;U" "THREADED_LEVEL3;NN" 2 "symm_thread")
  66. endif ()
  67. endif ()
  68. foreach (float_type ${FLOAT_TYPES})
  69. GenerateNamedObjects("gemm_batch_thread.c" "" "gemm_batch_thread" 0 "" "" false ${float_type})
  70. if (${float_type} STREQUAL "COMPLEX" OR ${float_type} STREQUAL "ZCOMPLEX")
  71. GenerateCombinationObjects("zherk_kernel.c" "LOWER;CONJ" "U;N" "HERK" 2 "herk_kernel" false ${float_type})
  72. # TRANS needs to be set/unset when CONJ is set/unset, so can't use it as a combination
  73. GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK" 3 "herk_N" false ${float_type})
  74. GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK;TRANS;CONJ" 3 "herk_C" false ${float_type})
  75. # Need to set CONJ for trmm and trsm
  76. GenerateCombinationObjects("trmm_L.c" "UPPER;UNIT" "L;N" "CONJ" 0 "trmm_LR" false ${float_type})
  77. GenerateCombinationObjects("trmm_L.c" "UPPER;UNIT" "L;N" "TRANSA;CONJ" 0 "trmm_LC" false ${float_type})
  78. GenerateCombinationObjects("trmm_R.c" "UPPER;UNIT" "L;N" "CONJ" 0 "trmm_RR" false ${float_type})
  79. GenerateCombinationObjects("trmm_R.c" "UPPER;UNIT" "L;N" "TRANSA;CONJ" 0 "trmm_RC" false ${float_type})
  80. GenerateCombinationObjects("trsm_L.c" "UPPER;UNIT" "L;N" "CONJ" 0 "trsm_LR" false ${float_type})
  81. GenerateCombinationObjects("trsm_L.c" "UPPER;UNIT" "L;N" "TRANSA;CONJ" 0 "trsm_LC" false ${float_type})
  82. GenerateCombinationObjects("trsm_R.c" "UPPER;UNIT" "L;N" "CONJ" 0 "trsm_RR" false ${float_type})
  83. GenerateCombinationObjects("trsm_R.c" "UPPER;UNIT" "L;N" "TRANSA;CONJ" 0 "trsm_RC" false ${float_type})
  84. #hemm
  85. GenerateCombinationObjects("zhemm_k.c" "LOWER" "U" "NN" 0 "hemm_L" false ${float_type})
  86. GenerateCombinationObjects("zhemm_k.c" "LOWER" "U" "NC;RSIDE" 0 "hemm_R" false ${float_type})
  87. #her2k
  88. GenerateCombinationObjects("zher2k_kernel.c" "LOWER;CONJ" "U;N" "" 2 "her2k_kernel" false ${float_type})
  89. GenerateNamedObjects("zher2k_k.c" "HER2K" "her2k_UN" false "" "" false ${float_type})
  90. GenerateNamedObjects("zher2k_k.c" "HER2K;TRANS;CONJ" "her2k_UC" false "" "" false ${float_type})
  91. GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER" "her2k_LN" false "" "" false ${float_type})
  92. GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER;TRANS;CONJ" "her2k_LC" false "" "" false ${float_type})
  93. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  94. #herk
  95. GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK;THREADED_LEVEL3" 3 "herk_thread_N" false ${float_type})
  96. GenerateCombinationObjects("zherk_k.c" "LOWER" "U" "HERK;THREADED_LEVEL3;TRANS;CONJ" 3 "herk_thread_C" false ${float_type})
  97. #hemm
  98. GenerateCombinationObjects("zhemm_k.c" "LOWER" "U" "NN;THREADED_LEVEL3" 0 "hemm_thread_L" false ${float_type})
  99. GenerateCombinationObjects("zhemm_k.c" "LOWER" "U" "NC;RSIDE;THREADED_LEVEL3" 0 "hemm_thread_R" false ${float_type})
  100. #her2k
  101. GenerateNamedObjects("zher2k_k.c" "HER2K" "her2k_UN" false "" "" false ${float_type})
  102. GenerateNamedObjects("zher2k_k.c" "HER2K;TRANS;CONJ" "her2k_UC" false "" "" false ${float_type})
  103. GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER" "her2k_LN" false "" "" false ${float_type})
  104. GenerateNamedObjects("zher2k_k.c" "HER2K;LOWER;TRANS;CONJ" "her2k_LC" false "" "" false ${float_type})
  105. endif()
  106. # special gemm defines for complex
  107. foreach (gemm_define ${GEMM_COMPLEX_DEFINES})
  108. string(TOLOWER ${gemm_define} gemm_define_LC)
  109. GenerateNamedObjects("gemm.c" "${gemm_define}" "gemm_${gemm_define_LC}" false "" "" false ${float_type})
  110. if(USE_GEMM3M)
  111. GenerateNamedObjects("gemm3m.c" "${gemm_define}" "gemm3m_${gemm_define_LC}" false "" "" false ${float_type})
  112. endif()
  113. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  114. GenerateNamedObjects("gemm.c" "${gemm_define};THREADED_LEVEL3" "gemm_thread_${gemm_define_LC}" false "" "" false ${float_type})
  115. if(USE_GEMM3M)
  116. GenerateNamedObjects("gemm3m.c" "${gemm_define};THREADED_LEVEL3" "gemm3m_thread_${gemm_define_LC}" false "" "" false ${float_type})
  117. endif()
  118. endif ()
  119. endforeach ()
  120. if ( BUILD_COMPLEX16 AND NOT BUILD_DOUBLE)
  121. foreach (gemm_define ${GEMM_COMPLEX_DEFINES})
  122. string(TOLOWER ${gemm_define} gemm_define_LC)
  123. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  124. GenerateNamedObjects("gemm.c" "${gemm_define};THREADED_LEVEL3" "gemm_thread_${gemm_define_LC}" false "" "" false "DOUBLE" )
  125. endif()
  126. endforeach()
  127. endif ()
  128. if ( BUILD_COMPLEX AND NOT BUILD_SINGLE)
  129. foreach (gemm_define ${GEMM_COMPLEX_DEFINES})
  130. string(TOLOWER ${gemm_define} gemm_define_LC)
  131. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  132. GenerateNamedObjects("gemm.c" "${gemm_define};THREADED_LEVEL3" "gemm_thread_${gemm_define_LC}" false "" "" false "SINGLE" )
  133. endif()
  134. endforeach()
  135. endif ()
  136. # for gemm3m
  137. if(USE_GEMM3M)
  138. foreach (GEMM_DEFINE ${GEMM_DEFINES})
  139. string(TOLOWER ${GEMM_DEFINE} GEMM_DEFINE_LC)
  140. GenerateNamedObjects("gemm3m.c" "${GEMM_DEFINE}" "gemm3m_${GEMM_DEFINE_LC}" false "" "" false ${float_type})
  141. if (USE_THREAD AND NOT USE_SIMPLE_THREADED_LEVEL3)
  142. GenerateNamedObjects("gemm3m.c" "${GEMM_DEFINE};THREADED_LEVEL3" "gemm3m_thread_${GEMM_DEFINE_LC}" false "" "" false ${float_type})
  143. endif ()
  144. endforeach ()
  145. endif()
  146. endif ()
  147. endforeach ()
  148. #HPLOBJS =
  149. # dgemm_nn.c dgemm_nt.c dgemm_tn.c dgemm_tt.c
  150. # dtrsm_LNUU.c dtrsm_LNUN.c dtrsm_LNLU.c dtrsm_LNLN.c
  151. # dtrsm_LTUU.c dtrsm_LTUN.c dtrsm_LTLU.c dtrsm_LTLN.c
  152. # dtrsm_RNUU.c dtrsm_RNUN.c dtrsm_RNLU.c dtrsm_RNLN.c
  153. # dtrsm_RTUU.c dtrsm_RTUN.c dtrsm_RTLU.c dtrsm_RTLN.c
  154. #
  155. #if (USE_SIMPLE_THREADED_LEVEL3)
  156. # HPLOBJS += dgemm_thread_nn.c dgemm_thread_nt.c
  157. # dgemm_thread_tn.c dgemm_thread_tt.c
  158. #endif
  159. #
  160. add_library(driver_level3 OBJECT ${OPENBLAS_SRC})
  161. if (USE_OPENMP)
  162. target_link_libraries(driver_level3 OpenMP::OpenMP_C)
  163. endif()