作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始学习 OpenCL。我试图了解将函数/算法移动到 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];
}
最佳答案
如果您有足够大的矩阵集打算对其执行线性代数运算,或者您基本上对每个元素执行相同的运算,我会将其视为一个简单的例子。矩阵乘法、加法、fft、卷积等。你会看到一点加速,而无需做太多工作。现在,如果您想看到 100 倍的加速,那么您需要深入研究内存管理并了解一些幕后发生的事情。
对于入门,我建议从 pycuda 开始,因为它上手相当简单,因为它提供了非常高的抽象级别,并且可以让您非常快速地入门。查看伊利诺伊大学使用 cuda 进行并行计算的类(class) http://courses.ece.illinois.edu/ece498/al/当你准备好进一步潜水时。
关于opencl - 可以从在 GPU 上计算而受益的最微不足道的函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443402/
我是一名优秀的程序员,十分优秀!