垫子乘多大才能更有效地使用 gpu
How big would a mat multiply be for it to be more effecient to use th 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)中多次访问矩阵元素。
所以我一直在研究 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)中多次访问矩阵元素。