2010-03-14 81 views
8

我刚刚开始学习OpenCL。我试图感受当将函数/算法移动到GPU时性能提升的预期。什么是最适合在GPU上计算的微不足道的功能?

在大多数教程中给出的最基本的内核是内核,它需要两个数字阵列,并在对应的索引求和值,并将它们添加到第三阵列,像这样:我假设

__kernel void 
add(__global float *a, 
    __global float *b, 
    __global float *answer) 
{ 
    int gid = get_global_id(0); 
    answer[gid] = a[gid] + b[gid]; 
} 

__kernel void 
sub(__global float* n, 
    __global float* answer) 
{ 
    int gid = get_global_id(0); 
    answer[gid] = n[gid] - 2; 
} 

__kernel void 
ranksort(__global const float *a, 
     __global float *answer) 
{ 
    int gid = get_global_id(0); 
    int gSize = get_global_size(0); 
    int x = 0; 
    for(int i = 0; i < gSize; i++){ 
    if(a[gid] > a[i]) x++; 
    } 
    answer[x] = a[gid]; 
} 

你永远无法证明在GPU上计算这个值时,内存传输将会超出计算这个CPU的时间的幅度(我可能是错误的,因此这个问题)。

什么我不知道是什么将是最简单的例子,在那里你会使用的OpenCL内核,而不是CPU的期望时,显著加速?

回答

6

如果有足够大的矩阵组打算上执行线性代数运算,或者你基本上每个元素执行相同的操作,我会认为这是一个简单的例子。矩阵乘法,加法,fft,卷积等,你会看到一些加速而不做太多工作。现在如果你想看到100倍的加速,那么你需要深入研究内存管理,并了解幕后发生的一些事情。

入门,我建议用pycuda开始,因为它是非常简单上手,因为它提供了一个抽象非常高的水平,将让你非常迅速蹿英寸当你准备好进一步潜水时,可以使用伊利诺伊大学的cuda http://courses.ece.illinois.edu/ece498/al/查看关于并行计算的课程。

+0

链接已损坏。 – user 2013-06-26 04:25:12

3

取决于琐碎的定义。在我看来,它将是矩阵矩阵产品,因为它具有计算与内存的比例。显示相似比率的算法可能受益于在GPU上竞争。

+0

矩阵乘法是远离普通的应用,而不是一个最好的例子可以从GPU计算中受益的应用程序。 – Eric 2010-03-19 08:12:52

2

虽然内核显然是很琐碎也可以是一个有用的例子,它是完全绑定的内存,因为每个元素有两个读和一个写,只有一个算术运算。有一些指令可以计算地址等,但与存取内存的成本相比,所有这些都几乎没有任何影响。

假设数据已经在GPU上,可以从GPU的非常高的带宽中受益的内存,即使这个简单的内核。当然,GPU依靠你有足够的线程来隐藏内存延迟,所以你的本地工作组大小应该相当大(比如256或512),你的全局工作组大小应该非常大(例如数百成千上万),这是有效的,但这就是关键所在!

0

什么是“最微不足道的”,是见仁见智,但我要说的是计算Mandelbrot集的图像是使用GPU一个非常简单的应用程序。每个点都完全独立于每个点,因此您可以为每个点启动一个线程并获得巨大的加速。迭代的公式本身是一个简单的二次函数。我用它作为示例,可以在我的博客here上找到一个教程,只需计算这些数字,甚至不需要使图像变得更简单。几乎任何令人尴尬的并行(见维基百科条目)问题是一个很好的开始。

1

我知道这个问题是相当古老的,但是......我发现Mandelbrot集的计算对于GPU来说是非常理想的。你有一个复杂的输入向量(float2)和一个标量输出(int),每个输入向量平均有几百个操作。

它可以作为一个很好的示例应用程序,因为它...

  • 有一个2维输入数据集(计算的图像)
  • 你能解释的波阵面,为什么二维处理在某些情况下有利
  • 演示矢量数据类型
  • 产生图象,即通过人眼(调试)迅速核查
  • 可以很容易地扩展:颜色映射(__const蚂蚁),float4处理而不是float2(优化),产生int4(R,G,B,A)输出向量(优化)。还原步骤(RGBA)=>(RGB)
  • 需要数学知识是可接受的(简单的公式)

问候, 斯蒂芬

相关问题