我是一名 OpenCL 新手,但我在网上找到的许多示例都取得了很好的成功。我的应用程序是非常基本的生物信息学,所以我关心很长的“ACTCGAAAGGTA....”字符串,可能有 1-3MB 长。一个简单的计算是计算 A、T、C、G 元素的数量,这似乎非常适合 OpenCL。因此,如果我从此处找到的规范“添加两个向量”示例开始
__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 的检查,所以我得到了工作项“知道”它是否在范围内的概念。为我管理这个是 OpenCL 的工作吗?是否存在我需要明确管理将全局数据拆分为块的情况?也许如果它们超过一定大小?(可能是由我的硬件限制决定的?)
在浪费大量时间之前,我想弄清我的基本 OpenCL 概念 :)
TL;DR:我是否必须拆分“大”输入数据字符串?还是 OpenCL 为我做了所有这些魔法?