用户
 找回密码
 立即注册
回帖奖励 10 CUDA币 回复本帖可获得 10 CUDA币奖励! 每人限 2 次
metorm 该用户已被删除
发表于 2015-6-28 22:15:50
67131
  1. Pv = 0; Nv = 0;
复制代码
  1. v1 = l(li);
  2. v2 = l(li+1);
  3. if((v1>0) && (v2>0))
  4.     Pv = Pv + 1;
  5. elseif((v1<0) && (v2<0))
  6.     Nv = Nv +1;
  7. elseif((v1>0) && (v2<0))
  8.     r = v1/(v1-v2);
  9.     Pv = Pv + r;
  10.     Nv = Nv + 1 - r;
  11. elseif((v1<0) && (v2>0))
  12.     r = v2/(v2-v1);
  13.     Pv = Pv + r;
  14.     Nv = Nv + 1 - r;
  15. end
复制代码



这是一段MATLAB代码,目的是计算v1到v2这段数轴上,正数区间与负数区间的长度之比,然后累加到两个数据中。假设 v1 v2 都是正数,显然该段数轴全是正数,则只对 Pv 累加即可,全是负数则只对 NV 累加,再不然则分情况处理。
但是一共要用 4 个if,12次布尔运算,总是感觉写在CUDA里面太浪费了,感觉上是有更好的写法,但是想不出来。数学渣渣,求各位帮助提供个计算方案。
PS:   v1 v2 在大部分情况下同号,负数的情况居多。
使用道具 举报 回复
发表于 2016-12-30 22:33:50

回帖奖励 +10 CUDA币

判断式语句其实不适合GPU计算,建议在MATLAB中使用向量化计算,应该能提高计算效率
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册