麻烦请问一个GPU优化的问题?
想请教各位大神一个GPU优化的问题(CUDA完全没经验啊...)。
这个问题是这样的。首先是大量hash(大约50次左右),每个hash得出value是一个有序
倒排表(里面存储的是一个一个的数字,长度大约只有10左右)。然后需要将这几百个倒
排表合并成一个有序表、去重(这个长数组应该shared memory放不下)。这整个流程要
执行很多次。
现在的问题是,我是该;
1.让每个线程执行自个执行整个流程,然后开很多个线程并行执行。
2.让一个block里的所有协作排序,然后再协作去重。
我知道cuda本身的提供的库排序很快,但是感觉这个问题本身可以合并得来;而且如果
采用第二种方法的话,可以隐藏一些内存读取(因为hash这个过程本身有少量的分支,
一个block里的hash没法安排,大约能隐藏60%的内存读取);而且可以充分利用每一个
线程(第一种的话每个block可能不一定能凑够32)。
——————————————分隔线--------------------------------
还有就是cuda官方的那个reduction的例子。求和可以理解,但是感觉求最大和最小值,
有分支啊,这样不是不符合尽量避免分支的原则了么,为什么依然速度有提升?