小编And*_*kau的帖子

如何在MATLAB中平滑旋转3D绘图?

如果我尝试在我目前的数字与旋转摄像头plot3使用

while true; camorbit(0.9,-0.1); drawnow; end
Run Code Online (Sandbox Code Playgroud)

然后即使在8核MacPro上,旋转也会定期挂起一段时间(例子).

我可以顺利吗?

EDIT1:

虽然我的原始问题还没有解决方案,但我已经成功制作了一部具有getframe功能的更好的电影.但它不允许记录徒手旋转,并且在MATLAB2010b for Mac中非常错误.

%# fix wrong figure position in MATLAB2010b for Mac - depends on your layout
correctedPosition = get(gcf,'Position') + [21 -125 0 0];

fps = 60; sec = 10;

vidObj = VideoWriter('newfile.avi');
vidObj.Quality = 100;
vidObj.FrameRate = fps;

open(vidObj);
for i=1:fps*sec
  camorbit(0.9,-0.1);
  writeVideo(vidObj,getframe(gcf, correctedPosition));
end
close(vidObj);
Run Code Online (Sandbox Code Playgroud)

EDIT2:

我在MATLAB Central创建了一个类似的线程.

EDIT3:

您可以自己尝试下载我的一个数字.

matlab plot smooth rotation

8
推荐指数
1
解决办法
2万
查看次数

在6核Intel Xeon中关闭超线程

我们得到了一个12核的MacPro来进行蒙特卡罗计算.它的Intel Xeon处理器启用了超线程(HT),因此实际上应该有24个进程并行运行以充分利用它们.但是,我们的计算效率比12x100%高出24x50%更高效,因此我们尝试Processor在系统首选项中通过窗格关闭超线程以获得更高的性能.人们也可以关闭HT

hwprefs -v cpu_ht=false
Run Code Online (Sandbox Code Playgroud)

然后我们进行了一些测试,这是我们得到的:

  1. 12个并行任务同时运行w /或没有HT让我们失望.
  2. 如果HT关闭,24个并行任务松散20%(不是我们想象的-50%)
  3. 当HT打开时,从24个任务切换到12个任务会使效率降低20%(同样令人惊讶)
  4. 当HT关闭时,从24切换到12不会改变任何东西.

似乎超线程只是降低了我们计算的性能,并且没有办法避免它.我们用于计算的程序是用Fortran编写的,并使用gfortran.有没有办法让这个硬件更高效?


更新:我们的蒙特卡罗计算(MCC)通常是分步进行的,以避免数据丢失和由于其他原因(并不总是可以避免这些步骤).在我们的例子中,每一步都包含许多具有可变持续时间的模拟.由于每个步骤在多个并行任务之间分割,因此它们也具有可变持续时间.基本上,所有更快的任务都必须等到最慢完成.这一事实迫使我们采取更大的步骤,由于平均而导致时间偏差减少,因此处理器不会浪费时间等待.这是我们拥有12*2.66 GHz而不是24*1.33 GHz的动机.如果可以关闭HT,那么通过从24个任务w/HT切换到12个没有HT的任务,我们可以获得大约+ 10%的性能.但是,测试表明我们松了20%.

对于测试,我使用了相当大的步骤,但通常步骤较短,因此效率变得更高.

还有一个原因 - 我们的一些计算需要3-5 GB的内存,因此您可能会看到我们有12个快速任务的经济性.我们正在努力实现共享内存,但它将成为一个冗长的术语项目.因此,我们需要了解如何尽可能快地制作现有的硬件/软件.

macos fortran intel gfortran hyperthreading

6
推荐指数
1
解决办法
6307
查看次数

如何使用Gnuplot创建多页PDF文件?

我通过ruby-gnuplot在Mac上用Gnuplot制作了十几个情节.如果我重新运行我的ruby脚本,那么打开窗口的数量会增加一倍.如果我可以在预览中打开的PDF中输出所有这些图,那么每次重新运行后文件都会自动更新,我不需要打扰关闭众多窗口.

目前我只能通过每个PDF文件一个图来实现这一点:

Gnuplot.open do |gp|
  Gnuplot::Plot.new(gp) do |plot|
    plot.arbitrary_lines << "set terminal pdf \n set output 'figures.pdf'"
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

如何使用Gnuplot的所有数据制作单个PDF?

ruby pdf gnuplot multipage

6
推荐指数
1
解决办法
6613
查看次数

在MATLAB中重载运算符以模拟散列数组

是否可以重载subsrefsubsasgn允许非整数类型的索引值?

h = Hash; #% a custom hash class to manage my data
h(100) = 'data'; #% integer is fine, if index > 0

h{'string'} #% but this fails
??? Cell contents reference from a
non-cell array object.
Run Code Online (Sandbox Code Playgroud)

可以用某种方式破解它吗?


确切的解决方案:

有几个烦恼containers.Map,可以通过创建一个继承它的自定义类来解决:

classdef Hash < containers.Map
  # fun
end
Run Code Online (Sandbox Code Playgroud)

在这样的类中,可以为用户操作实现各种类型的键(不仅仅是一个!!)和便利方法.此外,还可以重新定义subsrefsubsasgn使用花括号和多个索引.太好了!

indexing hash matlab operator-overloading

1
推荐指数
1
解决办法
687
查看次数