CUDA实现平衡树求前缀和

来源:互联网 发布:qsv格式转换软件 编辑:程序博客网 时间:2024/05/21 03:26

应实验要求,使用CUDA实现平衡树的前缀求和算法,很可惜只是做了一个简单的版本,没有时间做更多的优化,在此记录下来以后在进行深入优化。

平衡树求前缀和的思想是使用逻辑上的树形结构,先一次遍历所有叶子节点实现相邻的两个节点相加,层层上播直到根节点。然后从根节点在执行一次向下的播送过程,最后所有的前缀和都是存放在叶子节点中。

8叶子节点前缀和示意图

为了简单起见使用一维数组保存所有的叶子节点和相应的中间节点,然后使用一些小标小技术让其满足逻辑上的树形结构。

插入串行代码:

int GetJump(int n,int step){int i;int sum = 0;if(step == 0)return 0;for(i = 1;i <= step;i *= 2)sum += n / i;return sum;}void PrefixST(int *input,int n){int h,k,a,b;int broadcastA,broadcastB;int step = 1;/*   Up Sum*/for(h = n / 2;h > 0;h /= 2){for(k = 0;k < h;k++){a = 2 * k + GetJump(n,step / 2);b = 2 * k + 1 + GetJump(n,step / 2);input[GetJump(n,step) + k] = input[a] + input[b];}step *= 2;}/*   Down Broadcast*///printf("step : %d",step);step /= 2;for(h = 1;h < n;h *= 2){for(k = 0;k < h;k++){if(k == 0){broadcastA = input[k + GetJump(n,step)];a = 2 * k + 1 + GetJump(n,step / 2);input[a] = broadcastA;}else {broadcastA = input[k + GetJump(n,step)];broadcastB = input[k + GetJump(n,step) - 1];a = 2 * k + GetJump(n,step / 2);b = 2 * k + 1 + GetJump(n,step / 2);input[a] += broadcastB;input[b] = broadcastA;}}step /= 2;}}

然后依据这个串行代码做一些小小的改进就能得到CUDA的代码,其中把循环遍历改为线程的tid就行。这里使用最简单的1 blocks,n 列threads的方式,为了与一维数组进行很好的关联,便于操作线程。

插入并行代码:

 

使用CUDA的自带计时器:发现时间效果很差,并行的算出来还没得串行的好,看来还有很大的优化空间...

float time;cudaEvent_t start,stop;cudaEventCreate(&start);cudaEventCreate(&stop);cudaEventRecord(start,0);/*Function runs*/cudaEventRecord(stop,0);cudaEventSynchronize(stop);cudaEventElapsedTime(&time,start,stop);


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅蓝3s被锁了怎么办 小米5x的4g网速慢怎么办 红米一体机与后盖有裂缝怎么办? 红米4x喇叭坏了怎么办 红米4x电池坏了怎么办 小米电视4a开不了机怎么办 小米x4手机下面三个键失灵怎么办 红米4a一直重启怎么办 红米4a手机一直关机重启怎么办 红米5A手机4G信号差怎么办 红米4x手机黑屏打不开怎么办 红米手机前置摄像头用不了怎么办 红米4a手机电池不耐用怎么办 红米6全网通联通网络不好怎么办 红米手机死机了怎么办不可拆卸电池 厦华电视指示灯亮但打不开机怎么办 oppo一体机的开机键坏了怎么办 小米手机长时间没用开不了机怎么办 红米2a充电坏了怎么办? 红米手机恢复出厂设置失败怎么办 红米关机强行恢复出厂失败怎么办 红米2a太卡了怎么办 红米2a上网好卡怎么办 红米1内部存储空间坏了怎么办 红米3s开关机键失灵怎么办 红米3s下面三个键失灵怎么办 红米3s手机掉水怎么办 红米手机用久了卡怎么办 红米4x手机不支持计步怎么办 红米4x手机耗电快怎么办 红米4a一体机手机死机怎么办 红米4x打王者卡怎么办 红米5 4g信号不稳定怎么办 红米3x玩游戏卡顿怎么办 红米3开不了机了怎么办 苹果手机装了sim卡没反应怎么办 小米手机打电话的图标没了怎么办 租房时和房东没签协议装修怎么办 三星安卓手机忘记锁屏密码怎么办 刷机了支付宝的余额宝钱没了怎么办 手机刷机支付宝里面的钱怎么办