From 88bbceb7b43f3574296a39138c17f5a49624ee43 Mon Sep 17 00:00:00 2001 From: Tobias Ribizel Date: Thu, 10 Aug 2023 18:32:36 +0200 Subject: [PATCH 1/3] collect build time statistics --- .gitlab/scripts.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab/scripts.yml b/.gitlab/scripts.yml index 5cd36de0b9f..cf6baad6fab 100644 --- a/.gitlab/scripts.yml +++ b/.gitlab/scripts.yml @@ -52,6 +52,7 @@ -DGINKGO_DPCPP_SINGLE_MODE=${DPCPP_SINGLE_MODE} -DGINKGO_EXPORT_BUILD_DIR=${EXPORT_BUILD_DIR} - ninja -j${NUM_CORES} -l${CI_LOAD_LIMIT} install + - awk '!/^#/ { print ($2 - $1)/1000 " " $4 }' .ninja_log | sort -nr - if [ "${EXPORT_BUILD_DIR}" == "ON" ]; then ninja test_exportbuild; fi - LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ninja test_pkgconfig dependencies: [] @@ -94,6 +95,7 @@ -DGINKGO_RUN_EXAMPLES=${RUN_EXAMPLES} -DGINKGO_EXPORT_BUILD_DIR=${EXPORT_BUILD_DIR} - ninja -j${NUM_CORES} -l${CI_LOAD_LIMIT} install + - awk '!/^#/ { print ($2 - $1)/1000 " " $4 }' .ninja_log | sort -nr - | (( $(ctest -N | tail -1 | sed 's/Total Tests: //') != 0 )) || exit 1 - ctest -V --timeout 6000 From 2f06a14d241ad27d99536d1cfdf4131f59e24163 Mon Sep 17 00:00:00 2001 From: Tobias Ribizel Date: Thu, 10 Aug 2023 18:33:17 +0200 Subject: [PATCH 2/3] split up mixed-precision builds for slow ROCm debug builds --- hip/matrix/csr_kernels.instantiate.hip.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/hip/matrix/csr_kernels.instantiate.hip.cpp b/hip/matrix/csr_kernels.instantiate.hip.cpp index 498f3ec1795..dcfa4c7b8c8 100644 --- a/hip/matrix/csr_kernels.instantiate.hip.cpp +++ b/hip/matrix/csr_kernels.instantiate.hip.cpp @@ -48,11 +48,15 @@ namespace csr { GKO_INSTANTIATE_FOR_EACH_VALUE_AND_INDEX_TYPE( GKO_DECLARE_CSR_CONVERT_TO_FBCSR_KERNEL); // split -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_AND_INDEX_TYPE( - GKO_DECLARE_CSR_SPMV_KERNEL); +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_SPMV_KERNEL, int32); // split -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_AND_INDEX_TYPE( - GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL); +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, + int64); // split GKO_INSTANTIATE_FOR_EACH_VALUE_AND_INDEX_TYPE(GKO_DECLARE_CSR_TRANSPOSE_KERNEL); // split From 57af99b20c578eec0afddab8bd619a428bb9da1c Mon Sep 17 00:00:00 2001 From: Tobias Ribizel Date: Thu, 10 Aug 2023 18:46:16 +0200 Subject: [PATCH 3/3] split up HIP csr mixed precision instantiations --- core/base/mixed_precision_types.hpp | 83 ++++++++++++++-------- hip/matrix/csr_kernels.instantiate.hip.cpp | 56 +++++++++++++-- 2 files changed, 103 insertions(+), 36 deletions(-) diff --git a/core/base/mixed_precision_types.hpp b/core/base/mixed_precision_types.hpp index 84b0af21c5e..9579caaac4f 100644 --- a/core/base/mixed_precision_types.hpp +++ b/core/base/mixed_precision_types.hpp @@ -39,42 +39,65 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifdef GINKGO_MIXED_PRECISION -#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(_macro, ...) \ - template _macro(float, float, float, __VA_ARGS__); \ - template _macro(float, float, double, __VA_ARGS__); \ - template _macro(float, double, float, __VA_ARGS__); \ - template _macro(float, double, double, __VA_ARGS__); \ - template _macro(double, float, float, __VA_ARGS__); \ - template _macro(double, float, double, __VA_ARGS__); \ - template _macro(double, double, float, __VA_ARGS__); \ - template _macro(double, double, double, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(_macro, ...) \ + template _macro(float, float, float, __VA_ARGS__); \ + template _macro(float, float, double, __VA_ARGS__); \ + template _macro(float, double, float, __VA_ARGS__); \ + template _macro(float, double, double, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(_macro, ...) \ + template _macro(double, float, float, __VA_ARGS__); \ + template _macro(double, float, double, __VA_ARGS__); \ + template _macro(double, double, float, __VA_ARGS__); \ + template _macro(double, double, double, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__); \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__); \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__); \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__); \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__); \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__); \ + template _macro(std::complex, std::complex, \ std::complex, __VA_ARGS__) + #else -#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(_macro, ...) \ - template _macro(float, float, float, __VA_ARGS__); \ - template _macro(double, double, double, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ - std::complex, __VA_ARGS__); \ - template _macro(std::complex, std::complex, \ + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(_macro, ...) \ + template _macro(float, float, float, __VA_ARGS__); + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(_macro, ...) \ + template _macro(double, double, double, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(_macro, ...) \ + template _macro(std::complex, std::complex, \ + std::complex, __VA_ARGS__) + +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(_macro, ...) \ + template _macro(std::complex, std::complex, \ std::complex, __VA_ARGS__) + #endif +#define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(_macro, ...) \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(_macro, __VA_ARGS__); \ + GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(_macro, __VA_ARGS__) + + #define GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_AND_INDEX_TYPE(_macro) \ GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(_macro, int32); \ GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(_macro, int64) diff --git a/hip/matrix/csr_kernels.instantiate.hip.cpp b/hip/matrix/csr_kernels.instantiate.hip.cpp index dcfa4c7b8c8..9a6c29206de 100644 --- a/hip/matrix/csr_kernels.instantiate.hip.cpp +++ b/hip/matrix/csr_kernels.instantiate.hip.cpp @@ -47,16 +47,60 @@ namespace csr { // begin GKO_INSTANTIATE_FOR_EACH_VALUE_AND_INDEX_TYPE( GKO_DECLARE_CSR_CONVERT_TO_FBCSR_KERNEL); + + +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(GKO_DECLARE_CSR_SPMV_KERNEL, + int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); // split -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_SPMV_KERNEL, int32); +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4(GKO_DECLARE_CSR_SPMV_KERNEL, + int64); + + +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); // split -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_SPMV_KERNEL, int64); +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int32); // split -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, - int32); +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT1( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); // split -GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE(GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, - int64); +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT2( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT3( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); +// split +GKO_INSTANTIATE_FOR_EACH_MIXED_VALUE_TYPE_SPLIT4( + GKO_DECLARE_CSR_ADVANCED_SPMV_KERNEL, int64); + + // split GKO_INSTANTIATE_FOR_EACH_VALUE_AND_INDEX_TYPE(GKO_DECLARE_CSR_TRANSPOSE_KERNEL); // split