如果我尝试在我目前的数字与旋转摄像头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:
您可以自己尝试下载我的一个数字.
我们得到了一个12核的MacPro来进行蒙特卡罗计算.它的Intel Xeon处理器启用了超线程(HT),因此实际上应该有24个进程并行运行以充分利用它们.但是,我们的计算效率比12x100%高出24x50%更高效,因此我们尝试Processor在系统首选项中通过窗格关闭超线程以获得更高的性能.人们也可以关闭HT
hwprefs -v cpu_ht=false
Run Code Online (Sandbox Code Playgroud)
然后我们进行了一些测试,这是我们得到的:
似乎超线程只是降低了我们计算的性能,并且没有办法避免它.我们用于计算的程序是用Fortran编写的,并使用gfortran.有没有办法让这个硬件更高效?
更新:我们的蒙特卡罗计算(MCC)通常是分步进行的,以避免数据丢失和由于其他原因(并不总是可以避免这些步骤).在我们的例子中,每一步都包含许多具有可变持续时间的模拟.由于每个步骤在多个并行任务之间分割,因此它们也具有可变持续时间.基本上,所有更快的任务都必须等到最慢完成.这一事实迫使我们采取更大的步骤,由于平均而导致时间偏差减少,因此处理器不会浪费时间等待.这是我们拥有12*2.66 GHz而不是24*1.33 GHz的动机.如果可以关闭HT,那么通过从24个任务w/HT切换到12个没有HT的任务,我们可以获得大约+ 10%的性能.但是,测试表明我们松了20%.
对于测试,我使用了相当大的步骤,但通常步骤较短,因此效率变得更高.
还有一个原因 - 我们的一些计算需要3-5 GB的内存,因此您可能会看到我们有12个快速任务的经济性.我们正在努力实现共享内存,但它将成为一个冗长的术语项目.因此,我们需要了解如何尽可能快地制作现有的硬件/软件.
我通过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?
是否可以重载subsref并subsasgn允许非整数类型的索引值?
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)
在这样的类中,可以为用户操作实现各种类型的键(不仅仅是一个!!)和便利方法.此外,还可以重新定义subsref和subsasgn使用花括号和多个索引.太好了!