垫子乘以多大才能更有效地使用 gpu

问题描述

所以我一直在搞 OpenCL 内核,我试图更好地理解 GPU 加速,我很想知道人们如何找到使用 GPU 计算效率更高的点加速代替传统cpu计算

解决方法

对于 GPU 并行化何时更好,没有一刀切的明确阈值,因为它取决于硬件。从 CPU 到 GPU 并返回的数据传输会导致几毫秒的延迟,并且需要大量数据才能在全 PCIe 带宽下高效运行。然而,由于矩阵乘法的计算时间与 N^2 成比例,GPU 的性能优势将很快克服额外的延迟。根据经验:

3x3 矩阵 -> 使用 CPU

10x10 -> 可能 CPU 更快

100x100 -> 可能 GPU 更快

1000x1000 -> 绝对是 GPU

1000000x1000000 -> 使用 GPU,使用 CPU 可能需要几天时间

有些情况下,在 GPU 上执行 3x3 矩阵是有意义的:如果您有数百万个并行的 3x3 矩阵乘法要计算。在这种情况下,您不会对矩阵元素进行并行化,而是对每个 GPU 线程按顺序执行一次 3x3 乘法。

最后要说的是,在 GPU 上,您应该对大型矩阵乘法使用缓存平铺优化。通过在本地内存(L2 缓存)中加载矩阵块,这使它的速度提高了 10 倍,因此它不必从全局内存 (VRAM) 中多次访问矩阵元素。