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,提供访问此指令的库是最好的选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |