每一个 host thread 绑定一个 device

__host__​cudaError_t cudaSetDevice ( int device ) 绑定线程的 device

memory 相关

managed memory

在 host 和 device 上使用相同指针(virtual memory)访问。基于 page fault 机制

2025-02-10T08:23:13.png

使用 cudaMallocManaged 分配

当 GPU 访问 managed memory 出现 page fault 时,发生以下事件:

  1. Allocate new pages on the GPU;
  2. Unmap old pages on the CPU;
  3. Copy data from the CPU to the GPU;
  4. Map new pages on the GPU;
  5. Free old CPU pages.

使用 __host__​cudaError_t cudaMemPrefetchAsync ( const void* devPtr, size_t count, int dstDevice, cudaStream_t stream = 0 ) 将 managed memory prefetch 到 CPU 或 GPU

pinned host memory

分配的 host memory 默认是 pageable 的

GPU 无法直接访问 pageable 的 host memory,因此在拷贝 pageable host memory 时会先拷贝到 pinned memory,再拷贝到 device

可以使用 cudaMallocHost 直接分配 pinned host memory

2025-02-10T08:40:15.png

有服务器 A,以及服务器 B
服务器 B 在端口 80 运行web服务,现在要将该服务映射到服务器 A 端口 8888

通过 ssh local port forwarding (正向转发)

在服务器 A 上:

ssh -L 8888:localhost:80 [user on B]@[ip of B]

通过 reverse SSH tunneling (反向转发)

在服务器 B 上:

ssh -R 8888:localhost:80 [user on A]@[ip of A]

AMD Instinct 系列 GPU 对标 NVIDIA 科学计算 GPU
AMD Radeon 系列 GPU 对标 NVIDIA 桌面游戏卡

AMD Instinct™ MI325X

release date : 10/10/2024,目前最新
架构:CDNA3
内存:256GB HBM3E, 带宽:6TB/s
peak FP32 : 163.4 TFLOPs
peak FP64 : 81.7 TFLOPs

AMD Instinct™ MI250X

Frontier 中使用
release date : 11/08/2021
架构:CDNA2
内存:128GB HBM2e,带宽:3.2TB/s
peak FP32 : 47.9 TFLOPs
peak FP64 : 47.9 TFLOPs

AMD Instinct™ MI60

ORISE 中使用
release date : 11/18/2018
架构:Vega20
内存:32GB HBM2,带宽:1.2TB/s
peak FP32 : 14.7 TFLOPs
peak FP64 : 7.4 TFLOPs
peak FP16 : 29.5 TFLOPs

与之对比:

NVIDIA A100 GPU

release date : 5/14/2020
内存:80GB HBM2e,带宽:1935GB/s
peak FP32 : 19.5 TFLOPs
peak FP64 : 9.7 TFLOPs

ASSERT_* : fatal 错误,退出当前程序
EXPECT_* : nonfatal 错误,发生时不退出当前程序

test fixture

对于多个测试使用相同数据设置
继承 testing::Test, 以 protected: 开始。
使用 默认构造函数 或 SetUp() override 函数 为测试初始化
使用 析构函数 或 TearDown() 结束
在 fixture 中使用 TEST_F() 而非 TEST() 定义测试

不同 test 之间不会复用 fixture


::testing::StaticAssertTypeEq<T1, T2>(); assert 两个类型相同,不同时发生编译错误