加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何快速找到向量和的最大元素?

发布时间:2020-12-16 10:15:51 所属栏目:百科 来源:网络整理
导读:我在程序的最内部循环中有以下代码 struct V { float val [200]; // 0 = val[i] = 1};V a[600];V b[250];V c[250];V d[350];V e[350];// ... init values in a,b,c,d,e ...int findmax(int ai,int bi,int ci,int di,int ei) { float best_val = 0.0; int bes
我在程序的最内部循环中有以下代码

struct V {
  float val [200]; // 0 <= val[i] <= 1
};

V a[600];
V b[250];
V c[250];
V d[350];
V e[350];

// ... init values in a,b,c,d,e ...

int findmax(int ai,int bi,int ci,int di,int ei) {
  float best_val = 0.0;
  int best_ii = -1;

  for (int ii = 0; ii < 200; ii++) {
    float act_val =
      a[ai].val[ii] +
      b[bi].val[ii] +
      c[ci].val[ii] +
      d[ci].val[ii] +
      e[ci].val[ii];

    if (act_val > best_val) {
      best_val = act_val;
      best_ii = ii;
    }
  }

  return best_ii;
}

我不关心它是否会是一些聪明的算法(但这将是最有趣的)或一些C技巧或内在函数或汇编程序.但我需要使findmax功能更有效.

非常感谢提前.

编辑:
分支似乎是最慢的操作(错误预测?).

解决方法

好吧,我认为没有明显的算法优化空间.理论上只能计算五个向量的总和,直到很明显无法达到最大值,但这会增加很多开销,只能求和五个数.您可以尝试使用多个线程并为线程分配范围,但是当您只有200个非常短的工作项时,您必须考虑线程创建开销.

因此,我倾向于说在x86上使用Assembler和MMX或SSE指令,或者可能是(机器特定的)C,提供访问此指令的库是最好的选择.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读