2012-09-30 43 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訪問數組,它將成爲全局工作池中的唯一索引,它將爲您處理分區。

事情要小心的是確保你不看你過去的數組的末尾,因爲你可能要墊最後的工作組,但你似乎明白那部分就好了。