gpt4 book ai didi

cuda - OpenCL (Cuda) 中的逐元素运算

转载 作者:行者123 更新时间:2023-12-05 08:35:15 24 4
gpt4 key购买 nike

我为两个矩阵的逐元素乘法构建了一个内核,但至少在我的配置下,我的 OpenCL 内核只有在每个矩阵大于 2GB 时才会更快。所以我想知道,这是因为我的内核(见下文)还是因为元素运算的性质,这意味着元素运算不会从使用 GPU 中获益。

感谢您的意见!

内核:

KERNEL_CODE = """
// elementwise multiplication: C = A .* B.
__kernel void matrixMul(
__global float* C,
__global float* A,
__global float* B,
int width, int height)
{
// ID
int x = get_global_id(0);
int y = get_global_id(1);

// Multiplying
C[y * height + x ] = A[y * height + x] * B[y * height + x];
}
"""

附注我读到一些专家认为,CUDA 与 OpenCL 差异太大,无法在同一个问题中同时回答这两个问题,可以随意将其从标题和标签中删除。

最佳答案

这种操作有 N 个 FLOP,但有 3N 个内存事务,因此它将完全受内存带宽限制。没有数据重用的余地,因此引用 CPU 版本的加速上限是 GPU 与 CPU 带宽的比率。这个数字很少超过 10 倍,并且会很快被将数据移入和移出 GPU 内存的成本所侵 eclipse 。一般来说,这种操作最好与其他 O(N) 操作“融合”以提高性能。您通常永远不会只在单个内核中计算 Hadamard 乘积,您会将其作为一个内核中一系列 O(N) 操作的一部分来执行。所以,不,这不是加速的理想选择,即使内核是最优的。

而您的内核肯定不是。您为每个 FLOP 执行 3 个 IOP,这是一个巨大的惩罚。你当然可以做一些事情来改善这一点,但是什么事情将完全取决于它将运行在什么样的硬件上。

关于cuda - OpenCL (Cuda) 中的逐元素运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6045473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com