sci-libs/miopen: add 6.3.0

Signed-off-by: Sv. Lockal <lockalsash@gmail.com>
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sv. Lockal
2024-12-09 09:42:35 +00:00
committed by Sam James
parent 8f2f5e1cf9
commit 6b567cdfe9
7 changed files with 453 additions and 1 deletions

View File

@@ -1,4 +1,5 @@
DIST MIOpen-5.1.3.tar.gz 88118329 BLAKE2B d24722ffc5f5dab6d6a1de2ce34193ad2f25c9a2562e38c52e010a29870f01d9ea1c56970ba0601a088c8286e97958ee95d0da27fc8082126dd2ebe5ccb36b70 SHA512 a14e28cfcb12e5061e0e7b999ef3e67fa0a0e897e31bc50e7288b8a23eb1791312e33d3b697021c2b654ccc065ae1b046c1cfd77ba8e04b0f3e87e9cc0626dcd
DIST MIOpen-5.7.1.tar.gz 100751593 BLAKE2B c5f847fe4374ab22737c281a65401125012328412d584fc09244b431ea6265d6d5028429115ee15fa8b04cbe0edd020e4e7ac8deb22561183ed76cb8c3d4d9d4 SHA512 3354b3b154f29a6337403abc5a71ec47c0b2558320c5a1b0cbfbbdb370c4fada2db12d4a19a312b5e30ca2e2302ee50ece3390603e84d132b2212a168e9523fa
DIST MIOpen-6.1.1.tar.gz 101935496 BLAKE2B 5aadaa5eefa1b22dedfe87deb36f8acdbe57962cac8b7b6b20bc76f136ef29f0441e48112010280c2e674a1ae9fd202ca3e07be47cf4a4bc797234d6dc618be5 SHA512 b8860583919bf2f3e0da7ace30fdb0595ab45b85a367be3737e0b15a22a5565b8d6660c652ee070f21c36ac7d17ef3ba8e2eda7ed89bd6a0c65a4df799626d1a
DIST MIOpen-6.3.0.tar.gz 104152308 BLAKE2B 46c238314393599a1bd4d3c49b0c95386b36cbee1831bf442ab127082b4c740116e81cf643c773627125b59c3974a2344753939b4287aa4adbbc51e4c4833988 SHA512 14ca2967ed6545ad68c362128be93b8e6a9d4aa69e16e989b187463d15351eca2fc437d07e88c41f693138131a7449add607333c698e24efaf0207077e15ae55
DIST gtest-1.11.0_p20210611.tar.gz 887296 BLAKE2B 8f29b7028a6dd8190a113cd93398705b23b61d88bee38beaf9dcc0dfc8a463aed7fcd3719f6f1b131d4363aa57231629aaeffa108f6558efb58416cfface6d6e SHA512 cf9e7f3fd3e31ce6677eac355fb8bfe19c5b56a8ec3af8b9417d0904cdf5da92f99f7411a08131cc9fa4fc7d38e6a71fcfac993648e47b269a74a27de7607f7a

View File

@@ -0,0 +1,246 @@
--- a/cmake/EnableCompilerWarnings.cmake
+++ b/cmake/EnableCompilerWarnings.cmake
@@ -70,6 +70,7 @@ set(__clang_cxx_compile_options
-Wno-unused-command-line-argument
-Wno-weak-vtables
-Wno-covered-switch-default
+ -Wno-switch-default
-Wno-unused-result
-Wno-unsafe-buffer-usage
-Wno-deprecated-declarations
--- a/src/include/miopen/bfloat16.hpp
+++ b/src/include/miopen/bfloat16.hpp
@@ -28,6 +28,7 @@
#include <boost/operators.hpp>
#include <iostream>
#include <miopen/config.h>
+#include <miopen/libcxx_compat.hpp>
class bfloat16 : boost::totally_ordered<bfloat16, boost::arithmetic<bfloat16>>
{
@@ -152,7 +153,7 @@ private:
std::uint16_t data_;
};
-namespace std {
+NAMESPACE_STD_BEGIN
template <>
class numeric_limits<bfloat16>
{
@@ -173,5 +174,5 @@ public:
return bfloat16::generate(0x0001); // 0x0.02p-126
}
};
-} // namespace std
+NAMESPACE_STD_END
#endif
--- /dev/null
+++ b/src/include/miopen/libcxx_compat.hpp
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ *
+ * MIT License
+ *
+ * Copyright (c) 2024 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+#ifndef LIBCXX_COMPAT_HPP_
+#define LIBCXX_COMPAT_HPP_
+
+// Definitions for libc++ compatibility
+#ifdef __has_include
+#if __has_include (<__config>)
+#include <__config>
+#endif
+#endif
+
+#ifdef _LIBCPP_VERSION
+#define NAMESPACE_STD_BEGIN _LIBCPP_BEGIN_NAMESPACE_STD
+#define NAMESPACE_STD_END _LIBCPP_END_NAMESPACE_STD
+#else
+#define NAMESPACE_STD_BEGIN namespace std {
+#define NAMESPACE_STD_END }
+#endif
+
+#endif
--- a/src/kernels/hip_float8.hpp
+++ b/src/kernels/hip_float8.hpp
@@ -26,6 +26,7 @@
#pragma once
#include "miopen_cstdint.hpp"
+#include "libcxx_compat.hpp"
#ifndef MIOPEN_ENABLE_F8_DEVICE_CODE
#define MIOPEN_ENABLE_F8_DEVICE_CODE 0
@@ -590,7 +591,7 @@ public:
// from the precompiled header.
#else
// NOLINTBEGIN(cert-dcl58-cpp)
-namespace std {
+NAMESPACE_STD_BEGIN
inline bool isfinite(miopen_f8::hip_f8<miopen_f8::hip_f8_type::fp8> x) // NOLINT
{
return !(x.is_inf() || x.is_nan());
@@ -611,12 +612,12 @@ inline bool isnan(miopen_f8::hip_f8<miopen_f8::hip_f8_type::bf8> x) // NOLINT
return x.is_nan();
}
-} // namespace std
+NAMESPACE_STD_END
// NOLINTEND(cert-dcl58-cpp)
#endif
// NOLINTBEGIN(cert-dcl58-cpp)
-namespace std {
+NAMESPACE_STD_BEGIN
template <typename T>
class numeric_limits;
@@ -633,7 +634,7 @@ class numeric_limits<miopen_f8::hip_f8<miopen_f8::hip_f8_type::bf8>>
{
};
-} // namespace std
+NAMESPACE_STD_END
// NOLINTEND(cert-dcl58-cpp)
template <miopen_f8::hip_f8_type T>
--- /dev/null
+++ b/src/kernels/libcxx_compat.hpp
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ *
+ * MIT License
+ *
+ * Copyright (c) 2024 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ *******************************************************************************/
+#pragma once
+
+// Definitions for libc++ compatibility
+#ifdef __has_include
+#if __has_include (<__config>)
+#include <__config>
+#endif
+#endif
+
+#ifdef _LIBCPP_VERSION
+#define NAMESPACE_STD_BEGIN _LIBCPP_BEGIN_NAMESPACE_STD
+#define NAMESPACE_STD_END _LIBCPP_END_NAMESPACE_STD
+#else
+#define NAMESPACE_STD_BEGIN namespace std {
+#define NAMESPACE_STD_END }
+#endif
--- a/src/kernels/miopen_limits.hpp
+++ b/src/kernels/miopen_limits.hpp
@@ -33,8 +33,9 @@
#define MIOPEN_ENABLE_F8_DEVICE_CODE 1
#include "hip_float8.hpp"
+#include "libcxx_compat.hpp"
-namespace std {
+NAMESPACE_STD_BEGIN
template <typename T>
class numeric_limits;
@@ -91,7 +92,7 @@ public:
};
#endif
-} // namespace std
+NAMESPACE_STD_END
#else
--- a/src/kernels/miopen_type_traits.hpp
+++ b/src/kernels/miopen_type_traits.hpp
@@ -26,8 +26,9 @@
#pragma once
#ifdef MIOPEN_DONT_USE_HIP_RUNTIME_HEADERS
+#include "libcxx_compat.hpp"
-namespace std {
+NAMESPACE_STD_BEGIN
template <class T>
struct remove_reference
@@ -140,7 +141,7 @@ struct conditional<false, X, Y>
template <bool predicate, typename X, typename Y>
using conditional_t = typename conditional<predicate, X, Y>::type;
-} // namespace std
+NAMESPACE_STD_END
#else
#include <type_traits> // std::remove_reference, std::remove_cv, is_pointer
--- a/src/kernels/miopen_utility.hpp
+++ b/src/kernels/miopen_utility.hpp
@@ -28,8 +28,9 @@
#ifdef MIOPEN_DONT_USE_HIP_RUNTIME_HEADERS
#include "miopen_type_traits.hpp" // std::remove_reference
+#include "libcxx_compat.hpp"
-namespace std {
+NAMESPACE_STD_BEGIN
template <typename T>
constexpr T&& forward(typename remove_reference<T>::type& t_) noexcept
@@ -43,7 +44,7 @@ constexpr T&& forward(typename remove_reference<T>::type&& t_) noexcept
return static_cast<T&&>(t_);
}
-} // namespace std
+NAMESPACE_STD_END
#else
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -481,6 +481,7 @@ if( MIOPEN_BACKEND MATCHES "OpenCL" OR MIOPEN_BACKEND STREQUAL "HIPOC" OR MIOPEN
kernels/gpr_alloc.inc
kernels/hip_atomic.hpp
kernels/hip_f8_impl.hpp
+ kernels/libcxx_compat.hpp
kernels/hip_float8.hpp
kernels/inst_wrappers.inc
kernels/miopen_cstdint.hpp

View File

@@ -0,0 +1,46 @@
composable_kernel does not build some functions/targets depending on GPU.
Upstream bug: https://github.com/ROCm/composable_kernel/issues/1646
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -847,10 +847,6 @@ target_include_directories(MIOpen PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/include>
)
-if(MIOPEN_USE_COMPOSABLEKERNEL)
-set(MIOPEN_CK_LINK_FLAGS composable_kernel::device_other_operations composable_kernel::device_gemm_operations composable_kernel::device_conv_operations composable_kernel::device_reduction_operations composable_kernel::device_mha_operations hip::host)
-endif()
-
if(WIN32)
# Refer to https://en.cppreference.com/w/cpp/language/types for details.
target_compile_options(MIOpen PRIVATE $<BUILD_INTERFACE:$<$<CXX_COMPILER_ID:Clang>:-U__LP64__>>)
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -327,7 +327,27 @@ add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:HIP_COMPILER_FLAGS=${HIP_COMPI
# HIP
if( MIOPEN_BACKEND STREQUAL "HIP" OR MIOPEN_BACKEND STREQUAL "HIPOC" OR MIOPEN_BACKEND STREQUAL "HIPNOGPU")
if(MIOPEN_USE_COMPOSABLEKERNEL)
- find_package(composable_kernel 1.0.0 COMPONENTS device_other_operations device_gemm_operations device_conv_operations device_reduction_operations device_mha_operations)
+ set(MIOPEN_CK_LINK_FLAGS hip::host)
+ set(COMPONENTS_LIST device_other_operations device_gemm_operations device_conv_operations device_reduction_operations device_mha_operations)
+ foreach(component IN LISTS COMPONENTS_LIST)
+ find_package(composable_kernel 1.0.0 COMPONENTS ${component} QUIET)
+ if(TARGET composable_kernel::${component})
+ list(APPEND MIOPEN_CK_LINK_FLAGS "composable_kernel::${component}")
+ else()
+ message(WARNING "CK component '${component}' not found.")
+ endif()
+ endforeach()
+ if(AMDGPU_TARGETS MATCHES "gfx94" OR AMDGPU_TARGETS MATCHES "gfx90a")
+ add_definitions(-DMIOPEN_USE_CK_MHA_OPS=1)
+ else()
+ add_definitions(-DMIOPEN_USE_CK_MHA_OPS=0)
+ endif()
+ if(AMDGPU_TARGETS MATCHES "gfx9")
+ add_definitions(-DMIOPEN_USE_CK_XDL_OPS=1)
+ else()
+ add_definitions(-DMIOPEN_USE_CK_XDL_OPS=0)
+ endif()
+
endif()
if( MIOPEN_BACKEND STREQUAL "HIPNOGPU")
set(MIOPEN_MODE_NOGPU 1)

View File

@@ -0,0 +1,19 @@
--- a/driver/reducecalculation_driver.hpp
+++ b/driver/reducecalculation_driver.hpp
@@ -34,6 +34,7 @@
#include <algorithm>
#include <cfloat>
#include <cstdlib>
+#include <cmath>
#include <memory>
#include <miopen/miopen.h>
#include <miopen/tensor.hpp>
@@ -77,7 +78,7 @@ int32_t mloReduceCalculationForwardRunHost(miopenTensorDescriptor_t inputDesc,
for(size_t i = 0; i < reduce_size; ++i)
{
Tcheck val = static_cast<Tcheck>(input[input_idx]);
- if(nanPropagation && isnan(val))
+ if(nanPropagation && std::isnan(val))
{
val = 0.0f;
}

View File

@@ -19,4 +19,10 @@
<upstream>
<remote-id type="github">ROCm/MIOpen</remote-id>
</upstream>
<use>
<flag name="composable-kernel">Use composable-kernel for GEMM-like and reduction-like operators.</flag>
<flag name="hipblaslt">Use hipBLASLt for some non-batched and strided batched problems.</flag>
<flag name="rocblas">Build with rocBLAS support</flag>
<flag name="roctracer">Build with roctracer support</flag>
</use>
</pkgmetadata>

View File

@@ -21,7 +21,7 @@ IUSE="debug test"
RESTRICT="!test? ( test )"
RDEPEND="
dev-util/hip
dev-util/hip:${SLOT}
>=dev-db/sqlite-3.17
sci-libs/rocBLAS:${SLOT}[${ROCM_USEDEP}]
sci-libs/composable-kernel:${SLOT}[${ROCM_USEDEP}]

View File

@@ -0,0 +1,134 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
ROCM_VERSION=${PV}
LLVM_COMPAT=( 19 )
inherit cmake flag-o-matic llvm-r1 rocm
DESCRIPTION="AMD's Machine Intelligence Library"
HOMEPAGE="https://github.com/ROCm/MIOpen"
SRC_URI="https://github.com/ROCm/MIOpen/archive/rocm-${PV}.tar.gz -> MIOpen-${PV}.tar.gz"
S="${WORKDIR}/MIOpen-rocm-${PV}"
LICENSE="MIT"
SLOT="0/$(ver_cut 1-2)"
KEYWORDS="~amd64"
IUSE="composable-kernel debug hipblaslt rocblas roctracer test"
# tests can freeze machine depending on gpu/kernel
RESTRICT="test"
RDEPEND="
dev-util/hip:${SLOT}
>=dev-db/sqlite-3.17
sci-libs/rocRAND:${SLOT}[${ROCM_USEDEP}]
>=dev-libs/boost-1.72
dev-cpp/nlohmann_json
dev-cpp/frugally-deep
composable-kernel? ( sci-libs/composable-kernel:${SLOT}[${ROCM_USEDEP}] )
hipblaslt? (
sci-libs/hipBLAS:${SLOT}[${ROCM_USEDEP}]
sci-libs/hipBLASLt:${SLOT}
)
rocblas? ( sci-libs/rocBLAS:${SLOT}[${ROCM_USEDEP}] )
roctracer? ( dev-util/roctracer:${SLOT}[${ROCM_USEDEP}] )
"
DEPEND="${RDEPEND}"
BDEPEND="
>=dev-libs/half-1.12.0-r1
dev-build/rocm-cmake
test? ( dev-cpp/gtest )
"
PATCHES=(
"${FILESDIR}"/${PN}-6.1.1-build-all-tests.patch
"${FILESDIR}"/${PN}-6.1.1-fix-libcxx.patch
"${FILESDIR}"/${PN}-6.3.0-conditional-ck-components.patch
"${FILESDIR}"/${PN}-6.3.0-isnan-include.patch
)
src_prepare() {
cmake_src_prepare
# complementary replacements for conditional-ck-components patch
find src -name '*mha*.cpp' -type f | while IFS= read -r file; do
sed -i "s/MIOPEN_USE_COMPOSABLEKERNEL/MIOPEN_USE_CK_MHA_OPS/g" "$file" || die
done
sed -i "s/MIOPEN_USE_COMPOSABLEKERNEL/MIOPEN_USE_CK_XDL_OPS/g" \
src/mlo_dir_conv.cpp \
src/solver/conv_ck_igemm_fwd_bias_res_add_activ_fused.cpp \
src/solver/conv_ck_igemm_fwd_bias_activ_fused.cpp || die
find src -name '*xdl*.cpp' -type f | while IFS= read -r file; do
sed -i "s/MIOPEN_USE_COMPOSABLEKERNEL/MIOPEN_USE_CK_XDL_OPS/g" "$file" || die
done
sed -e '/MIOPEN_TIDY_ERRORS ALL/d' \
-e 's/FLAGS_RELEASE} -s/FLAGS_RELEASE}/g' \
-i CMakeLists.txt || die
sed -e "/add_test/s:--build \${CMAKE_CURRENT_BINARY_DIR}:--build ${BUILD_DIR}:" \
-i test/CMakeLists.txt || die
sed -e "s:\${PROJECT_BINARY_DIR}/miopen/include:\${PROJECT_BINARY_DIR}/include:" \
-i src/CMakeLists.txt || die
}
src_configure() {
rocm_use_hipcc
if ! use debug; then
append-cflags "-DNDEBUG"
append-cxxflags "-DNDEBUG"
CMAKE_BUILD_TYPE="Release"
else
CMAKE_BUILD_TYPE="Debug"
fi
local mycmakeargs=(
-DCMAKE_SKIP_RPATH=ON
-DAMDGPU_TARGETS="$(get_amdgpu_flags)"
-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr"
-DMIOPEN_BACKEND=HIP
-DBoost_USE_STATIC_LIBS=OFF
-DMIOPEN_USE_MLIR=OFF
-DMIOPEN_USE_ROCTRACER=$(usex roctracer ON OFF)
-DMIOPEN_USE_ROCBLAS=$(usex rocblas ON OFF)
-DMIOPEN_USE_HIPBLASLT=$(usex hipblaslt ON OFF)
-DMIOPEN_USE_COMPOSABLEKERNEL=$(usex composable-kernel ON OFF)
-DBUILD_TESTING=$(usex test ON OFF)
-DBUILD_FILE_REORG_BACKWARD_COMPATIBILITY=OFF
-DROCM_SYMLINK_LIBS=OFF
-DMIOPEN_HIP_COMPILER="${ESYSROOT}/usr/bin/hipcc"
-DMIOPEN_AMDGCN_ASSEMBLER="$(get_llvm_prefix)/bin/clang"
-DHIP_OC_COMPILER="$(get_llvm_prefix)/bin/clang"
)
if use test; then
mycmakeargs+=(
-DMIOPEN_TEST_ALL=ON
-DMIOPEN_TEST_GDB=OFF
)
# needed by rocminfo
addpredict /dev/random
check_amdgpu
fi
cmake_src_configure
}
src_test() {
check_amdgpu
LD_LIBRARY_PATH="${BUILD_DIR}"/lib MIOPEN_SYSTEM_DB_PATH="${BUILD_DIR}"/share/miopen/db/ cmake_src_test -j1
}
src_install() {
cmake_src_install
}