OpenCL - 大字符串和内存性能?

时间:2012-09-30 16:28:10

标签: opencl bioinformatics

我是一名OpenCL新手,但我在网上找到的许多例子都取得了很好的成功。我的应用程序是非常基本的生物信息学,所以我关注很长的“ACTCGAAAGGTA ......”字符串,可能长达1-3MB。一个简单的计算是计算A,T,C,G元素的数量,这似乎非常适合OpenCL。因此,如果我从规范的“添加两个向量”示例开始here

__kernel void vector_add_gpu (__global const float* src_a,
                     __global const float* src_b,
                     __global float* res,
               const int num)
{
   const int idx = get_global_id(0);
   if (idx < num)
      res[idx] = src_a[idx] + src_b[idx];
}

我的问题是,我是否需要以任何方式关注自己在工作组或工作单位之间拆分原始字符串?我理解检查idx&lt; num,所以我得到了工作项“知道”它是否在范围内的概念。 OpenCLs的工作是为我管理这个吗?我是否需要明确管理将全局数据拆分为块?也许如果它们超过一定的尺寸? (可能是由我的硬件限制决定的?)

我希望在浪费大量时间之前让我的基本OpenCL概念正确:)

TL; DR:我是否必须拆分“大”输入数据字符串?或者OpenCL为我做了那么多魔术吗?

1 个答案:

答案 0 :(得分:2)

您可以像在纯C代码中一样访问这些数组,不一定需要以任何方式对输入数组进行分区。如果您通过全局线程ID访问该数组,它将成为全局工作池中的唯一索引,这种索引将为您处理分区。

要小心的是确保你没有读过数组的末尾,因为你可能需要填写最后的工作组,但你似乎理解那部分就好了。