Transiting from CUDA to HIP (二)

hip gemm 性能优化 使用 hip 和部分内联汇编语言优化gemm 阅读详情
一、Identifying Architecture Features
1. HIP_ARCH Defines

在 CUDA 编程中,__CUDA_ARCH__ 是一个预定义的宏,用于指示当前编译的代码所针对的 NVIDIA GPU 的计算能力(Compute Capability)。开发者可以使用这个宏来编写条件代码,以便在不同架构的 GPU 上支持不同的特性。例如,如果代码需要使用双精度浮点数(doubles),它可能会检查 __CUDA_ARCH__ 是否大于或等于 130,因为这是支持双精度浮点数的最小计算能力。

#if (__CUDA_ARCH__ >= 130) 
// doubles are supported 

然而,当使用 AMD GPU 和 ROCm 平台时,这种基于 __CUDA_ARCH__ 的检查就不再适用,因为 AMD GPU 有不同的架构和特性集。为了解决这个问题,HIP(Heterogeneous-compute Interface for Portability)提供了一套宏定义,使得开发者可以编写可移植的代码,这些代码可以在 NVIDIA 的 CUDA 平台和 AMD 的 ROCm 平台上运行。

HIP 提供的宏定义如下:

  • __HIP_ARCH_HAS_DOUBLES__:如果当前的 GPU 支持双精度浮点数,则定义为真。

在编写 HIP 代码时,您应该使用这些宏来代替直接比较 __CUDA_ARCH__ 的值。这样做的好处是您的代码可以在不同的硬件架构上移植,而不需要为每种架构编写特定的条件代码

#if __HIP_ARCH_HAS_DOUBLES__
// 双精度浮点数在当前架构上是支持的
#endif

对于主机代码(即在 CPU 上运行的代码),所有 __HIP_ARCH__ 相关的宏都会被定义为 0。这意味着这些宏只应该在设备代码(即在 GPU 上运行的代码)中使用。

2. Device-Architecture Properties

在 CUDA 和 HIP 编程中,查询设备属性是一种常见的做法,用于确定特定 GPU 设备支持哪些特性。这对于编写可在不同 GPU 架构上运行的可移植代码非常重要。

在 HIP 中,hipGetDeviceProperties 函数用于获取设备的属性,这些属性描述了设备的能力和特性。设备属性结构体 hipDeviceProp_t 包含了多个字段,可以用来检查设备是否支持特定的功能。

以下是如何使用 hipGetDeviceProperties 来查询设备属性的示例:

hipDeviceProp_t deviceProp;
hipGetDeviceProperties(&deviceProp, device);

// 检查设备是否支持共享 int32 原子操作
if (deviceProp.arch.hasSharedInt32Atomics) {
    // 执行支持共享 int32 原子操作的代码
}

在这个例子中,deviceProp.arch.hasSharedInt32Atomics 是一个布尔字段,如果设备支持共享内存中的 32 位整数原子操作,则该字段为真。

与直接测试 major 和 minor 字段相比,使用 hipGetDeviceProperties 返回的结构体中的特定功能标志字段是一种更可移植的方法。直接测试 major 和 minor 字段通常与特定的 GPU 架构相关联,这限制了代码的可移植性:

// 不可移植的代码示例
if ((deviceProp.major == 1 && deviceProp.minor < 2)) {
    // 针对特定架构的代码
}

在编写 HIP 代码时,应该避免直接比较 major 和 minor 字段,而是使用 hipGetDeviceProperties 返回的属性来检查设备的功能。这样可以确保您的代码能够在不同的 GPU 设备上正常运行,无论它们是由 NVIDIA、AMD 还是其他制造商生产的。

3. Table of Architecture Properties

4. Finding HIP

在 Makefile 中,这段代码是一个条件赋值的示例,它使用了 ?= 运算符来为变量 HIP_PATH 提供一个默认值,但仅当该变量尚未设置时。这是一种常见的做法,用于在环境变量未预先定义的情况下提供一个默认值。

这里的 HIP_PATH 变量通常用于指定 HIP(Heterogeneous-compute Interface for Portability)的安装路径,而 hipconfig 是一个命令行工具,用于获取 HIP 相关的配置信息。

HIP_PATH ?= $(shell hipconfig --path)
  • HIP_PATH:这是 Makefile 中的一个变量,用于存储 HIP 的安装路径。
  • ?=:这是 Makefile 的条件赋值运算符。如果 HIP_PATH 变量在之前的 Makefile 或环境变量中没有被赋值,那么 ?= 运算符会将右侧的值赋给 HIP_PATH。
  • $(shell hipconfig --path):这是一个 shell 函数,它会执行 hipconfig --path 命令,并将其输出(即 HIP 的安装路径)赋值给 HIP_PATH 变量。hipconfig 工具通常用于获取 HIP 相关的配置信息,而 --path 选项用于获取 HIP 安装的根目录路径。

如果 HIP_PATH 已经在环境变量中设置或者在 Makefile 的其他地方被赋值,那么 $(shell hipconfig --path) 的结果不会被用来覆盖它。这样,用户就可以在需要时覆盖默认值。

5. Identifying HIP Runtime

在 HIP 的上下文中,"runtime" 指的是支持 HIP 代码执行的底层运行时环境。HIP 可以依赖于不同的运行时环境,具体取决于目标硬件平台:

  1. ROCclr (Radeon Open Compute common language runtime):

    • 在 AMD 平台上,HIP 使用 ROCclr 作为其运行时。ROCclr 是一个虚拟设备接口,它允许 HIP 运行时与不同的后端进行交互,包括 AMD 的 GPU。这使得 HIP 能够在 Linux 和 Windows 上运行,而无需对代码进行大量修改。
  2. CUDA:

    • 在 NVIDIA 平台上,HIP 可以利用 CUDA 作为其运行时。在这种情况下,HIP 充当 CUDA API 之上的一层薄封装,使得原本为 CUDA 编写的代码可以几乎不做修改地在 HIP 上运行。

当在非 AMD 平台上使用 HIP 时,HIP 运行时会检查 CUDA 是否可用。如果检测到 CUDA,HIP 会设置 HIP_PLATFORM 环境变量为 NVIDIA,并使用 CUDA 的路径来编译和运行 HIP 代码。这允许开发者在 NVIDIA GPU 上利用 HIP 编写的代码,而无需对代码进行平台特定的修改。

6. Compiler Options

HIPcc 是 AMD 提供的一个编译器驱动程序,它是一个用于 HIP 应用程序的便携式编译器接口。根据目标系统,HIPcc 会调用 nvcc(NVIDIA 的 CUDA 编译器)或者 HIP-Clang(基于 LLVM 的编译器),并将所有必需的包含文件和库选项传递给目标编译器。这意味着 HIPcc 能够根据运行它的平台自动选择合适的编译器,并且设置正确的编译选项。

Compiler Options Supported on AMD Platforms

  1. --amdgpu-target=:[已弃用] 此选项已被 --offload-arch= 替代。用于为目标 GPU 生成代码。支持的目标包括 gfx701, gfx801, gfx802, gfx803, gfx900, gfx906, gfx908, gfx1010, gfx1011, gfx1012, gfx1030, gfx1031。此选项可以在同一个命令行中多次出现,以生成支持多个目标的“胖二进制”(fat binary)。

  2. --fgpu-rdc:生成可重定位的设备代码,允许内核或设备函数调用不同翻译单元中的设备函数。

  3. -ggdb:等同于 -g 选项,并针对 GDB 进行调整。当使用 ROCm 的 GDB 调试 GPU 代码时,建议使用此选项。

  4. --gpu-max-threads-per-block=:生成代码以支持每个块指定数量的线程。

  5. -O:指定优化级别。

  6. -offload-arch=:指定 AMD GPU 目标。这个选项用于替换 --amdgpu-target=。更多信息可以在 Clang 文档中找到,特别是关于目标 ID 的部分。

  7. -save-temps:保存编译器生成的中间文件。

  8. -show:显示编译步骤。

Option for specifying GPU processor

在 AMD 的 HIP (Heterogeneous-compute Interface for Portability) 编程指南中,--offload-arch=X 选项用于指定目标 GPU 的处理器或架构。这个选项告诉 hipcc 编译器为目标 AMD GPU 架构生成代码。这种指定方式有助于确保您的 HIP 应用程序能够在特定的硬件上运行。

示例:

hipcc --offload-arch=gfx908 my_program.cpp
7. Linking Issues

在使用 HIP(异构计算接口以提高可移植性)进行编程时,hipcc 是推荐的编译器驱动程序,因为它能够自动处理与 HIP 相关的库链接,以及管理 GPU 对象。

  • hipcc 默认会在链接命令中添加 -lm 选项,这表示链接数学库(libm)。这个库包含了许多常用的数学函数,可能在您的应用程序中使用。
  • 如果您需要添加额外的链接选项或库,可以在 hipcc 命令中指定它们。hipcc 会将这些选项传递给底层编译器。
二、Linking Code with Other Compilers

CUDA 代码通常使用 nvcc(NVIDIA CUDA 编译器)来处理加速器代码(定义和启动内核,通常在 .cu 或 .cuh 文件中定义)。同时,它也使用标准编译器(如 g++)来编译应用程序的其余部分。nvcc 是一个预处理器,它使用标准主机编译器(如 gcc)来生成主机代码。使用这个工具编译的代码只能使用 nvcc 和主机编译器都支持的语言特性的交集。在某些情况下,您需要确保主机编译器的数据类型和对齐方式与设备编译器的完全相同。只有一些主机编译器是支持的——例如,最近的 nvcc 版本缺乏对 Clang 主机编译器的支持。

相比之下,HIP-Clang 使用相同的基于 Clang 的编译器生成设备代码和主机代码。代码使用与 gcc 相同的 API,这允许由不同的 gcc 兼容编译器生成的代码相互链接。例如,使用 HIP-Clang 编译的代码可以与使用“标准”编译器(如 gcc、ICC 和 Clang)编译的代码链接。需要确保所有编译器使用相同的标准 C++ 头文件和库格式。

1. libc++ and libstdc++

hipcc 默认链接到 libstdc++ 库,这样做是为了在 g++ 和 HIP 之间提供更好的兼容性。libstdc++ 是 GNU 编译器集合(GCC)的 C++ 标准库实现,它被许多编译器支持,包括 g++。

如果您向 hipcc 传递 --stdlib=libc++ 选项,hipcc 将使用 libc++ 库。通常,libc++ 提供了更广泛的 C++ 特性集,而 libstdc++ 被更多编译器支持,尤其是 g++。

当交叉链接 C++ 代码时,任何使用 C++ 标准库中的类型(包括 std::string、std::vector 和其他容器)的 C++ 函数都必须使用相同的标准库实现。这包括以下情况:

  • 在 HIP-Clang 中定义的函数或内核,从标准编译器调用。
  • 在标准编译器中定义的函数,从 HIP-Clang 调用。
  • 具有这些接口的应用程序应使用默认的 libstdc++ 链接。

如果您的应用程序完全用 hipcc 编译,并且从 libc++ 中受益于 libstdc++ 不支持的高级 C++ 特性,并且不需要与 nvcc 可移植性,您可以选择使用 libc++。

2. HIP Headers (hip_runtime.h, hip_runtime_api.h)

在 HIP (Heterogeneous-compute Interface for Portability) 编程中,hip_runtime.h 和 hip_runtime_api.h 是两个重要的头文件,它们定义了编译 HIP 程序所需的类型、函数和枚举:

  1. hip_runtime_api.h:

    • 这个头文件定义了所有 HIP 运行时 API(例如 hipMalloc)以及调用它们所需的类型。
    • 如果一个源文件仅调用 HIP API,但不定义或启动任何内核,它可以包含 hip_runtime_api.h。
    • hip_runtime_api.h 不使用任何自定义的 hc(HIP Compiler)语言特性,因此可以用标准的 C++ 编译器编译。
  2. hip_runtime.h:

    • 这个头文件被 hip_runtime_api.h 包含。它进一步提供了创建和启动内核所需的类型和定义。
    • 它可以用标准 C++ 编译器编译,但会暴露可用函数的一个子集。

与 CUDA 相比,这两个文件在 HIP 中的内容略有不同。在某些情况下,您可能需要将已经转换为 HIP 的代码修改为包含更丰富的 hip_runtime.h,而不是 hip_runtime_api.h。

使用建议:

  • 如果您的代码只调用 HIP API 而不涉及内核定义或启动,使用 hip_runtime_api.h。
  • 如果您的代码需要定义和启动内核,那么应该使用 hip_runtime.h,因为它提供了更全面的类型和定义支持。
// 使用 hip_runtime_api.h
#include <hip_runtime_api.h>

void allocateMemory() {
    float* devPtr;
    hipMalloc(&devPtr, sizeof(float) * 1024);
    // ...
}

// 使用 hip_runtime.h
#include <hip_runtime.h>

__global__ void myKernel(float* x, float* y) {
    // Kernel code
}

void launchKernel() {
    float* devPtrX, *devPtrY;
    hipMalloc(&devPtrX, sizeof(float) * 1024);
    hipMalloc(&devPtrY, sizeof(float) * 1024);
    
    hipLaunchKernel(myKernel, dim3(1, 1, 1), dim3(1024), 0, 0, devPtrX, devPtrY);
}

在第一个示例中,allocateMemory 函数仅调用 hipMalloc API,因此只包含 hip_runtime_api.h。 在第二个示例中,launchKernel 函数不仅调用 hipMalloc,还定义和启动了一个内核 myKernel,因此需要包含 hip_runtime.h。

3. Using a Standard C++ Compiler

在 HIP 编程环境中,hip_runtime_api.h 是一个关键的头文件,它包含了 HIP 运行时 API 的声明。这个头文件可以使用标准的 C 或 C++ 编译器(例如 gcc 或 ICC)来编译。为了正确编译包含 HIP 代码的文件,您需要确保编译器能够找到 HIP 的头文件,并且定义了正确的宏。

使用 hipconfig 获取编译选项

hipconfig 是一个工具,它提供了获取 HIP 编译和链接配置的命令行接口。您可以使用 hipconfig 来获取必要的编译器标志和包含路径。例如:

hipconfig --cxx_config -D__HIP_PLATFORM_AMD__ -I/home/user1/hip/include

这个命令会输出适合您环境的编译器标志和包含路径。

在 Makefile 中使用 hipconfig

您可以在 Makefile 中使用 hipconfig 来自动获取并设置编译器标志。以下是一个示例:

CPPFLAGS += $(shell $(HIP_PATH)/bin/hipconfig --cpp_config)

这行代码会将 hipconfig 返回的配置添加到 CPPFLAGS 变量中,这样在编译时就会包含正确的头文件路径和宏定义。

包含必要的 HIP 头文件

与 CUDA 不同,HIP 不会自动包含默认的头文件。因此,所有调用 HIP 运行时 API 或定义 HIP 内核的文件都必须显式包含相应的 HIP 头文件。如果编译过程中报告找不到必要的 API(例如,“错误:标识符 ‘hipSetDevice’ 未定义”),请确保文件包含了 hip_runtime.h(或在适当的情况下包含 hip_runtime_api.h)。

hipify-perl 脚本

hipify-perl 是一个用于将 CUDA 代码转换为 HIP 代码的脚本。它可以自动将 cuda_runtime.h 转换为 hip_runtime.h,并将 cuda_runtime_api.h 转换为 hip_runtime_api.h。但是,这个脚本可能会错过嵌套的头文件或宏定义,因此在使用后,您可能需要手动检查和调整代码。

cuda.h

在 HIP (Heterogeneous-compute Interface for Portability) 环境中,为了提高与 CUDA 代码的兼容性,HIP-Clang 提供了一个空的 cuda.h 文件。这是一个特殊的兼容性措施,用于处理那些包含了 cuda.h 但不实际使用其中任何函数的现有 CUDA 程序。

4. Choosing HIP File Extensions

在处理 HIP (Heterogeneous-compute Interface for Portability) 项目时,选择合适的文件扩展名可以帮助您区分不同类型的源代码文件,并确保构建系统正确地处理它们。以下是关于 HIP 文件扩展名选择的一些建议:

保留现有的 CUDA 文件扩展名

  • .cu 和 .cuh:这些是 CUDA 项目中常用的文件扩展名,分别用于表示源文件和头文件。如果您正在将现有的 CUDA 项目快速迁移到 HIP,保留这些扩展名可能更简单,因为它减少了需要更改目录中文件名和 #include 语句的工作量。

推荐新的 HIP 文件扩展名

  • .hip.cpp:对于源文件,推荐使用 .hip.cpp 扩展名。这表明该文件包含 HIP 代码,并且应该通过 hipcc 编译器进行编译。
  • .hip.h 或 .hip.hpp:对于头文件,推荐使用 .hip.h 或 .hip.hpp 扩展名。这有助于区分 HIP 专用的头文件,并为构建工具提供明确的指示,以便在适当的时候调用 hipcc。

如果您正在创建一个新的 HIP 项目,您的文件结构可能如下所示:

project/
│
├── src/
│   ├── main.hip.cpp
│   └── vector_add.hip.cpp
│
├── include/
│   ├── vector_add.hip.h
│   └── utility.hip.hpp
│
└── Makefile

在 Makefile 中,您可以添加规则来处理 .hip.cpp 和 .hip.h 文件:

HIPCC = hipcc

# 编译 HIP 源文件
%.o: %.hip.cpp
	$(HIPCC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

# 包含目录
INCLUDES += -Iinclude

# 默认目标
all: main

main: main.o vector_add.o
	$(HIPCC) $(CFLAGS) $^ -o $@

# 包含依赖
-include $(DEPENDENCIES)

clean:
	rm -f *.o main

通过这种方式,您可以确保构建系统能够正确地识别和编译 HIP 代码,同时保持项目的组织和可维护性。

AMD MI210 GPU 测试安装 AMD MI210 GPU是AMD的一款图形处理单元,用于高性能计算和GPU加速工作负载。 阅读详情

相关推荐

使用ROCm的HIP API向量加法程序

这个程序首先创建了三个大小为`numElements`的浮点数数组`h_A`、`h_B`和`h_C`,并将`h_A`和`h_B`的元素分别设置为连续的整数。HIP (Heterogeneous-compute Interface for Portability) 是一个用于简化在AMD GPU上编程的接口,它提供了类似于CUDA的编程模型,使得开发者可以更容易地将CUDA代码迁移到HIP上,以在AMD GPU上运行。在这个程序中,我们首先定义了一个名为`vectorAdd`的核函数,它将在GPU上执行。

数字人生 1777

hipcc 编译 amd gpu kernel 和 打包与解包的流程实验

编译的文件流:.hip kernel --(clang++)--> .o.o --(lld)--> .out.out --(clang-offload-bundler)--> .hipfb代码: 操作过程: 涉及到了三个命令:clang++ -o xxx.olld

eloudy的专栏 2675

告别连接难题:Windows 11下Multisim主数据库稳定运行终极配置指南

本文详细解析了Windows 11下Multisim 14.0主数据库连接失败的三大根源,并提供了四步终极解决方案,包括系统环境优化、软件权限配置、注册表修复和网络验证绕过技巧。通过实测数据对比,本方案显著提升了启动速度和稳定性,解决了电子仿真中的常见连接问题。

weixin_33738555的博客 436

AMD hipcc 生成各个gpu 微架构汇编语言代码的方法示例

为了简化逻辑,故假设 vector 的 size 与运行配置的thread个熟正好一样多,比如都是512之类的.

eloudy的专栏 1625

Google Cameraserver 看门狗CameraServiceWatchdog超时crash原理分析

本文分析了Android CameraServiceWatchdog机制的工作原理。该看门狗用于监控相机服务关键操作(如close、flush)的超时情况,通过定时器线程检测阻塞问题。文章详细讲解了Watchdog的初始化流程、使能方式、内部定时器机制(默认周期100ms,650次循环触发超时),并提供了configureStreams阶段的客制化实现方案。当检测到超时,Watchdog会触发abort生成tombstone日志,便于调试分析。

1132

车牌识别系统

随这图形图像技术的发展,现在的车牌识别技术准确率越来越高,识别速度越来越快。无论何种形式的车牌识别系统,它们都是由触发、图像采集、图像识别模块、辅助光源和通信模块组成的。车牌识别系统涉及光学、电器、电子控制、数字图像处理、计算视觉、人工智能等多项技术。触发模块负责在车辆到达合适位置时,给出触发信号,控制抓拍。辅助光源提供辅助照明,保证系统在不同的光照条件下都能拍摄到高质量的图像。图像预处理程序对抓拍的图像进行处理,去除噪声,并进行参数调整。然后通过车牌定位、字符识别,最后将识别结果输出。 牌照自动识别是一

FPGA/MATLAB学习教程/源码/项目合作开发 2万+

Transiting from CUDA to HIP(一)

设置。

weixin_44500921的博客 1812

某AI推荐系统项目管理复盘:架构师总结的6大方法论与调优策略

我是张三,某大厂资深AI架构师,主导过5个千万级用户的推荐系统项目(覆盖电商、内容、视频、音乐、外卖等场景)。我的公众号“AI架构师笔记”会分享更多AI项目管理和技术实战经验,欢迎关注。最后的话:推荐系统不是“一锤子买卖”,而是“持续优化的过程”。希望这篇文章能帮你少踩坑,多做对——毕竟,把复杂的事做成,才是架构师的核心能力。

2501_92132293的博客 362

Transiting from CUDA to HIP(三)

在 HIP (Heterogeneous-compute Interface for Portability) 中,为了提供一个统一的编程模型并简化开发过程,而不是提供两个独立的 API 集,HIP 通过引入新的模块(Modules)和上下文(Ctx)控制 API 来扩展其功能。例如,如果开发者在代码中混合使用了 HIP 运行时 API 和驱动 API,那么在某些情况下,HIP-Clang 可能会自动创建和销毁上下文,而开发者可能并不期望这种行为。你只需要选择一个设备,然后直接在这个设备上运行你的代码。

weixin_44500921的博客 2283

一文搞懂YOLO各版本差异:v5易用、v8多任务、v10低延迟,该怎么选?

YOLOv5的“易用”是为了降低入门门槛,适合新手启蒙和旧项目维护;YOLOv8的“多任务”是为了满足工业需求,成为目前的主流版本;YOLOv10的“低延迟”是为了适配边缘计算,代表未来的发展趋势。选型的核心不是“选最新的”,而是“选最适合自己场景的”。记住选型口诀,按场景对号入座,就能避开99%的坑。希望这篇文章能帮你彻底搞懂各版本差异,选对属于自己的YOLO版本!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1170

【考试大纲】中级多媒体应用设计师考试大纲

中级多媒体应用设计师考试大纲

邓邓子的博客 382

CUDA、HIP、OpenCL和oneAPI编程模型总结及比较

本文对近年来多核处理器、众核处理器以及并行编程模型的发展历程、研究现状和发展趋势进行概述。对比了各个编程模型的特点。硬件处理器从最初的单核到多核、众核再到现在为了满足不同应用和研究的异构体系CPU+GPU或CPU+AI加速卡等,处理器体系结构不断的发生着变化,同时从近年来不断出现的并行编程工具、人工智能专用优化技术来说,处理器走向专用化、简单化。功耗问题。

张小殊的博客 9930

Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

LocalPort”是PLC的端口,最终的设置如下图所示:(相关的设置都可以查看帮助文档)P#DB1.DBX0.0 BYTE28是以指针形式表示的DB1的DBX0.0开始(在使用的西门子Modbus tcp的程序块中设置的“MB_HOLD_REG”输出寄存器),其有28个字节(28个字节对应14个寄存器),4001是第一个寄存器,往后数14个即可。在上面的基础上,增加一个“DB1”的“组对象”,同时将“MW0”的组对象禁止(双击组对象,“Active”取消勾选),启动之后发现无法连接。

分享学习成长历程,Winter is coming! 1万+

Cuda __CUDA_ARCH__宏

__CUDA_ARCH__宏

Kelvin_Yan的专栏 2902

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

在 HIP cuda kernel重塞进一句汇编语言,运行成功,纪念一下;没找到资料介绍方法

操作系统:ubuntu 20.04。平台:ROCm 5.4.3。

eloudy的专栏 699

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HCIP(一)

1、Windows下查看端口号与进程号关系的命令 答:Window平台下可通过cmd命令查看端口占用、查看进程、结束进程; 打开电脑上面的一个终端,如cmd(开始-运行-cmd),键入 netstat -ano 命令,这时候就可以查看所有的端口占用情况;查看端口被某一进程占用可以使用netstat -ano|findstr "port" 命令,此命令可以找到占用进程的pid,然后使用 tasklist|findstr "pid" 找到进程名称,然后使用taskkill /f /t /im 进程名...

weixin_53248292的博客 537

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

AMD ROCm软件栈组件介绍

ROCm(Radeon Open Compute)开源软件栈。在NVIDIA GPU上,术语“CUDA”通常是指GPU编程编译器、API和运行时库,但ROCm不那么单一,通常根据其组件进行描述。图1显示了ROCm中涉及的主要组件堆栈。ROCm的顶部面向用户的组件通常是HIPAPI可移植性接口,它与CUDA几乎相同,主要的实际区别只是API函数的名称。HIP程序中的GPU内核使用LLVM编译器的AMD GPU后端进行编译,并使用ROCclr(ROCm公共语言运行时)运行时库运行。

wsq_zqfl的博客 4799

CUDA中常用关键字说明

函数执行空间说明符表示函数是在主机上执行还是在设备上执行,以及它是可从主机调用还是从设备调用。 执行空间说明符将函数声明为内核。 它的功能是:对 函数的任何调用都必须指定其执行配置,如执行配置中所述。对 函数的调用是异步的,这意味着它在设备完成执行之前返回。 执行空间说明符声明了一个函数: 执行空间说明符声明了一个函数: 和 执行空间说明符不能一起使用。但是, 和 执行空间说明符可以一起使用,在这种情况下,该函数是为主机和设备编译的。 Application Compatibility 中引入的

专注于人工智能领域的小何尚 1467

ROCm平台及HIP介绍

ROCm https://blog.youkuaiyun.com/JackyTintin/article/details/74637157 ROCm是AMD的一个软件平台,用来加速GPU计算。 对标Nvidia的CUDA平台。他是用在AMD显卡上的。 框架如下图: A卡上编程模型使用的是HIP或者OpenCL,而运行环境是ROCm N卡上,编程模型是CUDA,运行环境也是CUDA。 ROCm与CUDA对比 HIP HIP是一种编程模型,对标CUDA编程模型。 HIP 可以说是 CUDA API 的”山寨克隆“版。

Charles Ren's Tech Blog 1万+

关于编译CUDA时的ARCH参数

ARCH 代表着目标GPU的计算能力(Compute Capability),这是一个特定于NVIDIA GPU架构的指标,用于表明GPU支持的特性和指令集。另外,使用命令行工具如 nvidia-smi 或者在CUDA编程环境中使用相应的API也可以查询到GPU的计算能力。每个CUDA兼容的NVIDIA GPU都有一个特定的计算能力版本号,它决定了该GPU支持的CUDA特性和指令集。当编译CUDA程序时,指定正确的计算能力对于优化性能和确保程序能在特定的GPU上正确运行是非常重要的。

Vingnir的博客 2440

Cmake编译Caffe,如果改过Cuda_arch,make时依旧nvcc fatal : Unsupported gpu architecture ‘compute_20‘的解决办法

前提是,你的cuda版本是9.0以上,如果你已经把Cuda改成了如下参数,即删掉了20,依旧报错,可以尝试我的解决方法。 CUDA_ARCH := -gencode arch=compute_30,code=sm_30 \ -gencode arch=compute_35,code=sm_35 \ -gencode arch=compute_50,code=sm_50 \ -gencode arch=

tukechao的专栏 1583

实践:将cuda代码转化成hip代码,并编写为pytorch的extension

no-offload-arch=gfx1030 表示不对gfx1030进行编译,rocwmma不支持gfx1030,编译gfx1030会报错。将head_dim 修改为 64。这是因为之前将warp_size设置成64后,一个block的总线程数会超过1024。难点:fused-attention 使用了wmma,如何让这种调库的代码编写为pytorch的extension。并且让转化后的hip代码也能编写为pytorch的extension。可能会出现out of memory 的错误,不要紧张。

fileaccent的博客 2439

ROCm/HIP项目中的编译器工作流程详解

在异构计算领域,ROCm平台提供的HIP编译器工具链扮演着至关重要的角色。本文将深入解析HIP编译器的工作机制、常用选项以及编译流程,帮助开发者更好地理解和使用这套工具链。 ## HIP编译器简介 ROCm平台提供了`hipcc`编译器驱动,这是一个跨平台的工具,既支持AMD ROCm平台,也支持NVIDIA CUDA平台。`hipcc`的主要职责包括: - 设置HIP的默认库和包含路径 -

gitblog_00218的博客 690

【亲测免费】 HIPIFY 工具:自动将 CUDA 转换为 HIP 的指南

HIPIFY 工具:自动将 CUDA 转换为 HIP 的指南 1. 项目介绍 HIPIFY 是一组工具,旨在帮助开发者将基于 NVIDIA CUDA 的源代码自动化转换为跨平台的 HIP C++。该工具集包括 hipify-clang 和 hipify-perl,它们支持 CUDA 到 HIP 的源码级转换,便于在 AMD ROCm 环境中实现代码移植。ROCm(Radeon Open Compu...

gitblog_00960的博客 1698

从 Hello World 到向量加法,HIP 编程入门其实没那么难

本文详解 HIP 编程入门,从环境配置到向量加法实战。通过 hipcc 编译工具与 rocm-smi 监控,演示内存管理及 Grid/Block 维度计算,帮助开发者快速掌握 AMD GPU 高性能计算核心流程,轻松开启并行编程之旅。

2600_96323174的博客 148
上一篇: Transiting from CUDA to HIP(一)
下一篇: Transiting from CUDA to HIP(三)
青禾子的夏
博客等级 码龄8年 405粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值