2012-09-30 44 views
0

我是一个新手,OpenCL的,但我有很好的成功有很多的,我在网上找到的例子。我的应用程序是非常基本的生物信息学,所以我很关心很长的字符串“ACTCGAAAGGTA ....”,可能长达1-3MB。一个简单的计算就是计算A,T,C,G元素的数量,这看起来非常适合OpenCL。所以,如果我开始与经典的“两个向量”例如发现hereOpenCL - 大字符串和内存性能?

__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 < NUM检查,所以我得到了工作项目“知道”无论是范围还是没有这个概念。 OpenCLs工作是否为我管理?是否存在需要明确管理将全局数据分成块的条件?也许如果他们超过一定的规模? (可能是我的硬件限制规定?)

我想我之前浪费了大量的时间:)

TL让我根本OpenCL的概念正确; DR:我曾经有分裂“大”的字符串的输入数据?还是OpenCL为我做了这些魔术?

回答

2

您可以访问这些阵列就像在纯C代码,有没有必要明确任何需要以任何方式分割输入数组。如果您通过全局线程ID访问数组,它将成为全局工作池中的唯一索引,它将为您处理分区。

事情要小心的是确保你不看你过去的数组的末尾,因为你可能要垫最后的工作组,但你似乎明白那部分就好了。