Fra*_*ter 1 cuda opencl gpu-programming
我为两个矩阵的元素乘法构建了一个内核,但至少在我的配置中,当每个矩阵大于2GB时,我的OpenCL内核只会更快.所以我想知道,如果是因为我的天真内核(见下文)或者因为元素操作的本质,这意味着元素操作不会因使用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];
}
"""
Run Code Online (Sandbox Code Playgroud)
ps我读了一些专家认为,CUDA与OpenCL有太大的不同,无法在同一个问题中回答这两个问题,可以自由地从标题和标签中删除它.
那种操作有N个FLOP,但3N内存事务,所以它将完全限制内存带宽.没有数据重用的余地,因此加速参考CPU版本的上限是GPU与CPU带宽的比率.这个数字很少超过10倍,并且可以通过将数据移入和移出GPU内存的成本迅速侵蚀.一般来说,这种操作最好与其他O(N)操作"融合"以提高性能.您通常不会在单个内核中计算Hadamard产品,而是在一个内核中作为一系列O(N)操作的一部分进行计算.所以,不,这不是加速的好选择,即使内核是最佳的.
而你的内核肯定不是.你为每个FLOP做3个IOP,这是一个巨大的惩罚.你肯定可以做些改进的事情,但是什么事情将完全取决于它将在哪种硬件上运行.
归档时间: |
|
查看次数: |
1809 次 |
最近记录: |