求指教,CUDA 多重循环嵌套的实现

AndyJee007 2015-03-03 05:53:41
各位大神,由于项目需要,初学CUDA,不知道应该如何实现多重循环嵌套相关的代码
问题代码如下:
循环变量K以及J在循环内部都是变化的,这样感觉无法并行化,希望大家能够指点一下。
(这是实现哈达玛变换的例子,如果有更好的实现方案,也可以提供一下,谢谢!)

void __fwhtrans(FLOAT* dev_ext,FLOAT* dev_out,int n,int p){
int M,J,K;
FLOAT *temp;
int L=1;
for(int nStage=2;nStage<=p;++nStage){
M=pow(2.0,L);
J=0;
K=0;
while(K<n-1){
for(int j=J;j<J+M-1;j=j+2){
dev_out[K]=dev_ext[j]+dev_ext[j+M];
dev_out[K+1]=dev_ext[j]+dev_ext[j+M];
dev_out[K+2]=dev_ext[j+1]-dev_ext[j+1+M];
dev_out[K+3]=dev_ext[j+1]-dev_ext[j+1+M];
K=K+4;
}
J=J+2*M;
}
temp=dev_ext;
dev_ext=dev_out;
dev_out=temp;
L=L+1;
}
}
...全文
793 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小数123 2015-03-20
  • 打赏
  • 举报
回复
从其他方面去考虑吧,你要处理的数据或者算法的某一个纬度可以并行就好,如果没有,那么不适合用并行
li563868273 2015-03-04
  • 打赏
  • 举报
回复
看了一下以我自己的观点 很难并行 以我目前的水平只能想到 dev_out[K]=dev_ext[j]+dev_ext[j+M]; dev_out[K+1]=dev_ext[j]+dev_ext[j+M]; dev_out[K+2]=dev_ext[j+1]-dev_ext[j+1+M]; dev_out[K+3]=dev_ext[j+1]-dev_ext[j+1+M]; 把这里的K变成 K+threadID.x 设置4个线程 基本其他都没有并行的地方了

353

社区成员

发帖
与我相关
我的任务
社区描述
CUDA高性能计算讨论
社区管理员
  • CUDA高性能计算讨论社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧