在 200 Gbit/s 下来自 pcg32 的随机数 - Tony Finch

主要观点:

  • PCG 随机数生成器的一个巧妙之处是使用指令级并行,但其 ILP 有限约 3 条指令,整体速度受 CPU 运行序列速率限制。
  • 通过线性代数和 AVX512 技术,可在单核心上以 200 Gbit/s 的速度从单个 pcg32 实例生成随机数,比正常 pcg32 快 4 倍多。
  • PCG 从底层线性同余生成器获得的“可寻性”特征,其跳过公式可用于蒙特卡罗模拟的重现性,且可预计算跳过乘数。
  • 可通过调整并行度来探索跳过想法的效果,基准测试表明不同编译器和指令集在不同并行度下的性能有所差异。

关键信息:

  • PCG 状态更新可与输出排列并行。
  • 跳过公式可提前计算乘数以展开 PCG 数据依赖链。
  • 有标量和向量两种计算 pcg32 的变体函数,用于测试并行度效果。
  • 不同编译器(如 clang、gcc)和指令集(如 AVX2、AVX512)在不同并行度下的性能表现不同。

重要细节:

  • PCG 论文中提到 Forrest Brown 的论文解释了跳过特征的用途。
  • 跳过公式中状态计算可使用 NEON 或 AVX 向量指令并行进行。
  • 基准测试代码包含对乘数的证明。
  • 不同平台(如 Macbook Pro M1 Pro、AMD Ryzen 9 7950X)上各种函数变体的性能数据。例如在 Macbook Pro M1 Pro 上,x8并行度下可达 10.40 字节/纳秒,在 AMD Ryzen 9 7950X 上,x8并行度下可达 15.27 字节/纳秒,最后在特定条件下可达到 200 Gbit/s 的速度。
阅读 8
0 条评论