【问题标题】:data transferred in calling a user defined function调用用户定义函数时传输的数据
【发布时间】:2013-06-07 23:56:21
【问题描述】:

我需要分析一个大的源代码。代码包含几个函数调用。 根据函数调用之间的计算和通信,我需要找出源代码整体执行的最佳配置方案。

据我所知,

调用函数时传递的数据(如果它在不同的机器、服务器等上)=输入数据大小+输出数据大小

为了获取输入数据大小和输出数据大小,我认为我应该重写所有函数以具有可变数量的输入和变量输出。

[varargout] samplefunction(varargin) {

FOR i=0:nargin
 inputdata=inputdata+sizeof(varargin(i));



% Do stuff here


}

有没有办法直接在 Matlab 中计算单元数组的大小(varargin/varargout)?

或者您是否可以建议另一种方法来测量函数调用之间的通信数据?

【问题讨论】:

  • 这个想法是使用 whos(var) 访问 matlab 工作区,但问题是,我在函数体中没有实际的变量名。有什么建议吗?

标签: matlab input user-defined-functions output variadic-functions


【解决方案1】:

调用cellfun() with string inputs 会非常快:

sizes = [cellfun('size',varargin,1); cellfun('size',varargin,2)];

lenghts = cellfun('length',varargin);

numels  = cellfun('prodofsize',varargin);

【讨论】:

  • sizes = [cellfun('size',varargin)] 我可以用它来一次获得大小的总和吗?或在循环中使用 size+= [cellfun('size',varargin,i)] ?我会试试的,很快就会通知你。除了关注输入和输出之外,您还有其他想法来衡量函数调用之间的通信程度
  • 或任何不坚持我根据可变数量的输入和输出重写所有函数的方法?
  • 第一行中的 sizes 给出了维度 :( 我需要以位或字节为单位的数据大小 :)
  • 那你需要使用s = whos
  • 是的.. 但在函数体中,我没有实际变量的名称.. 我唯一拥有的是正式变量。 .因此无法通过变量名从函数体访问 matlab 工作区,甚至可能无法访问具有函数定义的文件..任何建议?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多