我是靠谱客的博主 传统糖豆,最近开发中收集的这篇文章主要介绍matlab函数形参可以是文件位置吗_MATLAB代码提速技巧之In-place Optimizations,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

d637dcb6c4d45833bcf16ce047ad6c2a.png
function main
x = rand(1e8, 1);

% 普通函数, 输入实参与输出实参相同
tic;
x = notInplace(x);
toc;
% 时间已过 0.254771 秒。


% 普通函数, 输入实参与输出实参不同
tic;
y = notInplace(x);
toc;
% 时间已过 0.201775 秒。


% in-place函数, 输入实参与输出实参相同
tic;
x = inplace(x);
toc;
% 时间已过 0.098609 秒。


% in-place函数, 输入实参与输出实参不同
tic;
y = inplace(x);
toc;
end
% 时间已过 0.255816 秒。


% 普通函数的定义是输入形参与输出形参不同
function y = notInplace(x)
y = 1.2*x;
end

% in-place函数的定义是输入形参与输出形参相同
function x = inplace(x)
x = 1.2*x;
end

根据输出形参与输入形参是否相同, 输出实参与输入实参是否相同, 总共2*2=4个示例.

发现, 只有输出形参与输入形参相同, 并且输出实参与输入实参相同(第三个示例), 才能加速.

原理是, 其他三个情况下, 函数计算完以后, 必须将输出变量拷贝出来, 而第三个示例不需要拷贝出来, 加速的部分其实就是节省下的拷贝时间.

当然, 这种优化只有在函数的计算时间很短, 同时数据量较大时, 才适用, 否则, 节省的拷贝时间占比很小, 可以忽略不计.

有兴趣的读者可以自己动手验证一下这句话, 比如将数据量从1e8, 改成1, 或者将运算从简单的乘法运算改为比较复杂的正弦运算.

多谢 @MEZhang 的提醒,我感觉inplace优化需要加上第三个必要条件: 函数内部中输入变量的维度(形状)不发生变化。因为如果发生变化,就要建立新的变量代替原先的,这样的话,退出函数时,还是得拷贝变量出去。

--------------2018年12月28日----------------------------

MATLAB的in-place操作是属于比较冷门的, 官方并没有正式公布这个优化技巧.

相反, Julia的in-place随处可见.

很多函数同时包含有了copy版与in-place版(函数名末尾加感叹号(!)的函数).

可以看出来, Julia是为了高性能而生的语言.

创作不易, 请大家"素质三连": 点赞, 收藏, 分享.

最后

以上就是传统糖豆为你收集整理的matlab函数形参可以是文件位置吗_MATLAB代码提速技巧之In-place Optimizations的全部内容,希望文章能够帮你解决matlab函数形参可以是文件位置吗_MATLAB代码提速技巧之In-place Optimizations所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部