optimization 相关问题

优化是改进方法或设计的行为。在编程中,优化通常采用提高算法速度或减少所需资源的形式。优化的另一个含义是机器学习中使用的数值优化算法。

这个C循环可以进一步优化吗?

我大声尖叫。 这确实让你想知道。 我不敢想象如果我选择“优先考虑尺寸而不是速度”会发生什么。 设置:Visual Studio 2010 最大速度 我大声尖叫。 这真的让你想知道。 我不敢想象如果我选择“优先考虑尺寸而不是速度”会发生什么。 设置:Visual Studio 2010 <Optimization>MaxSpeed</Optimization> <IntrinsicFunctions>true</IntrinsicFunctions> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> <FloatingPointModel>Precise</FloatingPointModel> 怎么样: for (i = 0; i < some_num; i++) { one += buf[i] * buf[i]; two += buf[i] * buf[off+i]; } 翻译成这样: 131: for (i = 0; i < some_num; i++) 132: { 133: one += buf[i] * buf[i]; 00404B40 movss xmm0,dword ptr [eax-4] 00404B45 movss xmm7,dword ptr [esp+18h] 00404B4B movss xmm2,dword ptr [eax] 00404B4F cvtps2pd xmm3,xmm2 00404B52 movss xmm4,dword ptr [eax+4] 00404B57 cvtps2pd xmm1,xmm0 00404B5A mulsd xmm3,xmm3 00404B5E movss xmm6,dword ptr [eax+8] 00404B63 mulsd xmm1,xmm1 00404B67 cvtps2pd xmm5,xmm4 00404B6A mulsd xmm5,xmm5 00404B6E cvtps2pd xmm7,xmm7 00404B71 addsd xmm1,xmm7 00404B75 cvtpd2ps xmm1,xmm1 00404B79 cvtss2sd xmm1,xmm1 00404B7D addsd xmm1,xmm3 00404B81 xorps xmm3,xmm3 00404B84 cvtpd2ps xmm1,xmm1 00404B88 cvtss2sd xmm1,xmm1 00404B8C addsd xmm1,xmm5 00404B90 cvtpd2ps xmm1,xmm1 00404B94 cvtss2sd xmm3,xmm1 134: two += buf[i] * buf[off+i]; 00404B98 cvtps2pd xmm0,xmm0 00404B9B cvtps2pd xmm2,xmm2 00404B9E cvtps2pd xmm1,xmm6 00404BA1 mulsd xmm1,xmm1 00404BA5 addsd xmm3,xmm1 00404BA9 xorps xmm1,xmm1 00404BAC cvtpd2ps xmm1,xmm3 00404BB0 cvtps2pd xmm5,xmm1 00404BB3 movss xmm1,dword ptr [eax+0Ch] 00404BB8 cvtps2pd xmm3,xmm1 00404BBB mulsd xmm3,xmm3 00404BBF addsd xmm5,xmm3 00404BC3 xorps xmm3,xmm3 00404BC6 cvtpd2ps xmm3,xmm5 00404BCA cvtps2pd xmm5,xmm3 00404BCD movss xmm3,dword ptr [eax+10h] 00404BD2 cvtps2pd xmm3,xmm3 00404BD5 mulsd xmm3,xmm3 00404BD9 addsd xmm5,xmm3 00404BDD xorps xmm3,xmm3 00404BE0 cvtpd2ps xmm3,xmm5 00404BE4 cvtps2pd xmm5,xmm3 00404BE7 movss xmm3,dword ptr [eax+14h] 00404BEC cvtps2pd xmm3,xmm3 00404BEF mulsd xmm3,xmm3 00404BF3 addsd xmm5,xmm3 00404BF7 xorps xmm3,xmm3 00404BFA cvtpd2ps xmm3,xmm5 00404BFE cvtps2pd xmm5,xmm3 00404C01 movss xmm3,dword ptr [eax+18h] 00404C06 cvtps2pd xmm3,xmm3 00404C09 mulsd xmm3,xmm3 00404C0D addsd xmm5,xmm3 00404C11 xorps xmm3,xmm3 00404C14 cvtpd2ps xmm3,xmm5 00404C18 movss dword ptr [esp+18h],xmm3 00404C1E movss xmm3,dword ptr [ecx-4] 00404C23 cvtps2pd xmm3,xmm3 00404C26 mulsd xmm3,xmm0 00404C2A movss xmm0,dword ptr [esp+10h] 00404C30 cvtps2pd xmm0,xmm0 00404C33 addsd xmm3,xmm0 00404C37 xorps xmm0,xmm0 00404C3A cvtpd2ps xmm0,xmm3 00404C3E movss xmm3,dword ptr [ecx] 00404C42 cvtps2pd xmm0,xmm0 00404C45 cvtps2pd xmm3,xmm3 00404C48 mulsd xmm2,xmm3 00404C4C addsd xmm0,xmm2 00404C50 movss xmm2,dword ptr [ecx+4] 00404C55 cvtpd2ps xmm0,xmm0 00404C59 cvtss2sd xmm0,xmm0 00404C5D cvtps2pd xmm2,xmm2 00404C60 cvtps2pd xmm3,xmm4 00404C63 mulsd xmm2,xmm3 00404C67 addsd xmm0,xmm2 00404C6B movss xmm2,dword ptr [ecx+8] 00404C70 cvtpd2ps xmm0,xmm0 00404C74 cvtss2sd xmm0,xmm0 00404C78 cvtps2pd xmm2,xmm2 00404C7B cvtps2pd xmm1,xmm1 00404C7E cvtps2pd xmm3,xmm6 00404C81 mulsd xmm2,xmm3 00404C85 addsd xmm0,xmm2 00404C89 movss xmm2,dword ptr [ecx+0Ch] 00404C8E cvtpd2ps xmm0,xmm0 00404C92 cvtss2sd xmm0,xmm0 00404C96 cvtps2pd xmm2,xmm2 00404C99 mulsd xmm2,xmm1 00404C9D addsd xmm0,xmm2 00404CA1 cvtpd2ps xmm0,xmm0 00404CA5 xorps xmm1,xmm1 00404CA8 cvtss2sd xmm1,xmm0 00404CAC movss xmm0,dword ptr [ecx+10h] 00404CB1 cvtps2pd xmm2,xmm0 00404CB4 movss xmm0,dword ptr [eax+10h] 00404CB9 cvtps2pd xmm0,xmm0 00404CBC mulsd xmm2,xmm0 00404CC0 addsd xmm1,xmm2 00404CC4 xorps xmm0,xmm0 00404CC7 cvtpd2ps xmm0,xmm1 00404CCB add eax,20h 00404CCE add ecx,20h 00404CD1 cvtps2pd xmm1,xmm0 00404CD4 movss xmm0,dword ptr [ecx-0Ch] 00404CD9 cvtps2pd xmm2,xmm0 00404CDC movss xmm0,dword ptr [eax-0Ch] 00404CE1 cvtps2pd xmm0,xmm0 00404CE4 mulsd xmm2,xmm0 00404CE8 addsd xmm1,xmm2 00404CEC xorps xmm0,xmm0 00404CEF cvtpd2ps xmm0,xmm1 00404CF3 xorps xmm1,xmm1 00404CF6 cvtps2pd xmm1,xmm0 00404CF9 movss xmm0,dword ptr [ecx-8] 00404CFE xorps xmm2,xmm2 00404D01 cvtps2pd xmm2,xmm0 00404D04 movss xmm0,dword ptr [eax-8] 00404D09 cvtps2pd xmm0,xmm0 00404D0C mulsd xmm2,xmm0 00404D10 addsd xmm1,xmm2 00404D14 xorps xmm0,xmm0 00404D17 cvtpd2ps xmm0,xmm1 00404D1B movss dword ptr [esp+10h],xmm0 00404D21 cmp eax,offset buf+84h (42D6A4h) 00404D26 jl gem+290h (404B40h) 135: } 答案是肯定的。 Visual Studio 目前不支持代码矢量化。如果您查看程序集,就会发现这些都是标量 SSE 指令。而且你的循环显然是可矢量化的。 您将必须使用矢量化编译器才能获得更好的结果。或者使用内在函数自行发出向量 SSE 指令。 http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/intref_cls/common/intref_bk_intro.htm 您可以尝试的另一件事是: 将浮点模式更改为“快速”而不是“精确”。编译器将中间体提升为双精度并将它们转换回来 - 这增加了很多开销。 看起来您在表达式中混合了单精度和双精度类型,这会导致大量不必要的转换。如果你解决这个问题,那么代码应该更小、更高效。 您也可以使用更好的编译器,例如英特尔的 ICC,它很可能能够矢量化此循环,正如 @Mysticial 已经建议的那样。 还有一点 - 我没有太仔细地研究代码,但看起来循环已经展开,所以实际上它可能比最初看起来更有效。 注意这一点: 00404CCB add eax,20h 00404CCE add ecx,20h 循环已展开,可一次处理 8 个 i 值。

回答 3 投票 0

程序员在编写Python代码时是否需要手动实现循环展开等优化?

我最近在学习一些 HPC 主题,并了解到现代 C/C++ 编译器能够检测有权优化的位置,并使用相应的技术(例如 SIMD)进行优化...

回答 1 投票 0

在打砖块游戏中如何跟踪和检测所有障碍物何时被摧毁?

在我的打砖块游戏中,我需要一种方法来跟踪所有障碍物。一旦所有障碍物都被摧毁,我想显示一个“关卡完成”面板。最好最有效的方法是什么

回答 1 投票 0

java jit循环展开政策?

JIT的循环展开政策是什么?或者,如果没有简单的答案,那么我可以在循环中检查循环展开的何时/何时检查? gnode child = null; ...

回答 2 投票 0

如果我在明确的情况下使用指针,编译器可以内联虚拟函数吗?

我已经读过内联虚拟函数真的是无意义的吗?但我仍然有一些疑问,并没有找到答案。 他们说,如果情况明确,编译器应该内联 v...

回答 2 投票 0

使用约束进行优化,不同的包给出截然不同的结果

这是我在使用约束优化中可用的原始帖子的后续内容 数据 Rand_Data = data.frame(x = c( 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 1...

回答 1 投票 0

复制数组时的 gcc 优化

我需要分析一个执行大量数组副本的应用程序,所以我最终分析了这个非常简单的函数: typedef 无符号字符 UChar; void copy_mem(UChar *src, UChar *dst, unsigne...

回答 5 投票 0

热点JIT优化与“反优化”:如何强制FASTEST?

我有一个正在尝试优化的大型应用程序。 为此,我通过在循环中运行数百万次来对其小元素进行分析/基准测试,并检查它们的处理时间。

回答 2 投票 0

使用约束进行优化

我有以下数据 Rand_Data = data.frame(x = c( 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.、12.、13.、14.、15.、16.、17.、18.、19.、20.、21.、 ...

回答 1 投票 0

Scipy 最小化与调节

我有一个包含 3 个变量的函数,我想优化它。不幸的是,这些变量具有不同的数量级,这意味着该问题是非常病态的。我正在处理这个问题

回答 1 投票 0

我应该使用尽可能最小的类型吗?

很久以前,我记得读过,你应该始终使用尽可能小的类型来存储数据,但几乎我读过的每一段代码都没有这样做。他们经常使用 32 位整数...

回答 3 投票 0

C++ 编译器可以内联函数指针吗?

假设我有一个函数functionProxy,它接受一个通用参数函数并调用它的operator(): 模板< typename Function > void functionProxy( 函数 function ) { 功能...

回答 4 投票 0

编译器使用哪些真正的规则集来决定是否内联函数?

我们有一个用于在通用实用程序库中发出错误信号的宏,如下所示: #define OurMacro( 条件 ) \ 如果(条件){\ } 别的 { \

回答 3 投票 0

如何声明一个变量不被优化(放入寄存器)以便在 C++ 中进行调试?

我正在用 C++/Qt 开发一个简单的应用程序,我有以下声明: QGridLayout *布局=新的QGridLayout; 我正在使用 gdb 调试应用程序。我设置了一个断点,它可以工作...

回答 3 投票 0

Delphi 如何编译我的代码

Delphi编译器将如何编译以下代码; 使用a_big_unit; 过程 TForm1.Button1Click(发件人: TObject); 变量 acompont : T_a_big_component ; 开始 if (true = false ) then // o...

回答 5 投票 0

skfolio如何设置各种参数

我已经开始使用 skfolio,使用 skfolio.datasets (sp500) 中给出的投资组合。我的想法是使用 sp500 作为我的宇宙来运行一个由同等权重的股票组成的投资组合。为此,我执行以下操作:

回答 1 投票 0

为什么 PyCharm 在使用 Pyomo 的 .fix() 方法时给我一个警告?

我使用 Pyomo 来模拟优化问题,并有一个索引决策变量,我必须将具有特定索引的变量固定为一个值。在一个最小的例子中,它看起来像这样: 导入 pyomo。

回答 1 投票 0

CVar 投资组合优化 - 使用 Rglpk_solve_LP 与 LSopt 的不同结果

使用 Rglpk_solve_LP 与 LSopt 优化 CVaR 投资组合会产生不同的结果。从绝对值来看,Rglpk_solve_LP 的 CVaR 比 LSopt 的 CVaR 更大(即更负)。我是...

回答 1 投票 0

使用 2D 输入数组中的字典高效填充 numpy 数组

我有以下函数,它创建大量描述多维数据集的字典条目: def fill_dict_cubes( 长度:np.ndarray, 宽度:np.ndarray, 高度:np.ndarray, ) -> np。

回答 1 投票 0

是吗,myval =(某些条件)? someVal :myval 得到优化,不会设置该值,以防它为 false

CPath = (CPath == null) ?请求路径:CPath; 首先,我希望 CLR 让我做? Request.Path 不要打扰我创建: 但我想问它会优化它吗?或者仍然

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.