共计 2548 个字符,预计需要花费 7 分钟才能阅读完成。
算力发展时间线
1997 年 IBM” 深蓝 ”(Deep Blue)战胜国际象棋冠军时,其算力仅为 11.38 GFLOPS(每秒十亿次浮点运算)。如今一块 NVIDIA RTX 4090 显卡的单精度算力达 82.6 TFLOPS(每秒万亿次运算),23 年间算力增长超过 7000 倍。关键里程碑:

- 1997 年 – IBM 深蓝:11.38 GFLOPS(专用象棋芯片)
- 2008 年 – NVIDIA 首款 CUDA 显卡:1 TFLOPS
- 2016 年 – Google TPUv1:92 TFLOPS(专为神经网络优化)
- 2022 年 – AMD MI250X:383 TFLOPS(混合精度计算)
架构原理对比
深蓝的 CPU 集群架构
- 32 节点 PowerPC 604e 芯片(120MHz 主频)
- 通过定制 VLSI 芯片实现象棋走子评估
- 暴力搜索算法依赖分支预测(branch prediction)
现代 AI 芯片三大流派
- GPU(Graphics Processing Unit):
- 数千个 CUDA 核心并行计算
-
典型案例:NVIDIA A100 的 6912 个 FP32 核心
-
TPU(Tensor Processing Unit):
- 脉动阵列(systolic array)加速矩阵乘法
-
Google TPUv4 的 128×128 矩阵运算单元
-
FPGA/ASIC:
- 比特流(bitstream)可编程逻辑
- 如 Xilinx Versal 的 AI 引擎阵列
实测算力差异
用 ResNet-50 推理任务对比:
| 设备类型 | 吞吐量(images/sec) | 能效(images/J) |
|---|---|---|
| IBM 深蓝 | 0.001(估算) | N/A |
| NVIDIA T4 | 456 | 3.2 |
| Google TPUv3 | 1280 | 4.8 |
(数据来源:MLPerf Inference Benchmark 2021)
CUDA 算力测试实战
import pycuda.autoinit
import pycuda.driver as drv
import numpy as np
# 初始化 CUDA 设备
drv.init()
device = drv.Device(0) # 获取第一个 GPU
ctx = device.make_context()
# 创建测试矩阵
matrix_size = 4096
a = np.random.randn(matrix_size, matrix_size).astype(np.float32)
b = np.random.randn(matrix_size, matrix_size).astype(np.float32)
# 分配 GPU 内存
a_gpu = drv.mem_alloc(a.nbytes)
b_gpu = drv.mem_alloc(b.nbytes)
drv.memcpy_htod(a_gpu, a)
drv.memcpy_htod(b_gpu, b)
# 创建结果缓冲区
result_gpu = drv.mem_alloc(a.nbytes)
result = np.empty_like(a)
# 编译 CUDA 核函数
kernel_code = """
__global__ void matrixMul(float *A, float *B, float *C, int N) {
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
float sum = 0.0f;
if (row < N && col < N) {for (int k = 0; k < N; ++k) {sum += A[row * N + k] * B[k * N + col];
}
C[row * N + col] = sum;
}
}
"""
module = drv.module_from_buffer(kernel_code.encode())
matrix_mul = module.get_function("matrixMul")
# 执行基准测试
import time
block_size = 16
grid_size = (matrix_size + block_size - 1) // block_size
start = time.time()
matrix_mul(
a_gpu, b_gpu, result_gpu,
np.int32(matrix_size),
block=(block_size, block_size, 1),
grid=(grid_size, grid_size)
)
drv.memcpy_dtoh(result, result_gpu)
elapsed = time.time() - start
# 计算 TFLOPS
tflops = 2 * matrix_size**3 / (elapsed * 1e12)
print(f"实测算力: {tflops:.2f} TFLOPS")
ctx.pop() # 释放 CUDA 上下文
代码关键点说明:
1. block=(16,16,1):每个线程块包含 256 个线程,优化内存访问局部性
2. grid_size 计算:确保覆盖整个矩阵维度
3. TFLOPS 公式:2N³/(时间×10¹²),N³次乘法 +N³次加法
避坑指南
精度选择陷阱
- FP32 vs FP16:RTX 3090 的 FP16 算力是 FP32 的 4 倍
- 混合精度训练需添加损失缩放(loss scaling)
内存带宽瓶颈识别
# 使用 NVIDIA-smi 监控
watch -n 0.1 nvidia-smi --query-gpu=utilization.gpu,utilization.memory --format=csv
当 GPU 利用率低但内存占用高时,可能存在带宽瓶颈
Benchmark 工具注意事项
- MLPerf 需指定 ”closed division” 模式
- 避免在 docker 容器内测试时的权限限制
- TensorFlow 的 XLA 编译会显著影响结果
开放思考题
- 当算法复杂度从 O(n²) 降至 O(nlogn) 时,算力需求如何变化?
- 在边缘计算场景下,1TOPS 算力与 1GB/ s 内存带宽哪个更关键?
- 量子计算机的 ” 量子体积 ” 指标能否与传统 FLOPS 直接对比?
演进趋势观察
2023 年发布的 Cerebras Wafer-Scale Engine- 2 已实现 2.6 ExaFLOPS(百亿亿次)算力,但需要关注:
– 稀疏计算(sparse computing)的实际利用率
– 数据搬运的能耗占比(现可达总功耗的 60%)
– 编译器对新型架构的优化空间
建议初学者从 NVIDIA 的 Nsight 工具套件入手,逐步建立完整的算力评估体系。
正文完
