我在我的研究实验室里分析肌电数据。其中一个步骤是计算数据集(大小为~80000)的连续小波变换。因此,我使用Matlab和小波工具箱和"cwt“来绘制3D比例图。
计算需要很多时间,而且像3D旋转这样的交互(这对于查看数据的不同方面非常重要)几乎是不可能的。
资源监视器显示我的六核处理器中只有一个在工作。我使用并行计算进行其他计算,还没有找到任何解决方案,甚至没有发现类似的问题。
我可以做些什么来激活对绘图的多核支持?
发布于 2012-07-10 22:31:02
我将冒险一个有经验的猜测和丰满的答案,你的问题是不,有什么我可以做的,以激活多核支持的情节?
Matlab当然可以使用多核来进行计算。它的许多内部函数已经是多线程的,并且将使用任何可用的核心,而程序员(或用户)不必采取任何特殊措施。对于您自己的计算,您可以使用并行计算工具箱。
但是,除非你有一些非常特殊的图形硬件(如果你有,为什么你不提呢?)您的显示器向您展示了当您与3D绘图交互时只使用一个处理器的原因--在屏幕和计算机硬件之间的某个地方存在一个瓶颈,通过该瓶颈,所有这些核心的输出都被压缩到一个比特流和字节流中进行表示。
你的经验与Matlab可视化例程的瓶颈是一致的,我认为可以从你提供的证据中得出结论,Mathworks没有多线程例程来计算当你旋转它时图中每个元素的新屏幕位置,或者任何其他继续将分析结果转换为图片的处理。如果他们真的将这些例程并行化,那将会转移瓶颈,但不会消除它。
要消除瓶颈,必须有一种方法让不同的Matlab线程分别处理屏幕的不同部分;我没有看到任何证据表明Matlab具有这种能力。Google会为你找到大量关于并行渲染的参考,但我没有看到Matlab目前实现了这方面的任何迹象。
为了回应你的评论,很遗憾,我不能对我的数据进行重采样,你应该注意,Matlab的可视化例程正在对你的数据进行重采样,除非你只可视化样本数量小于可用像素数的数据集。如果你想象一个有80000个样本的时间序列,在一个水平方向为2000像素的显示器上,必须给出一些东西。
如果你自己负责重采样,你可能会获得更好的图形性能和更好的理解。
发布于 2012-07-10 22:38:29
Matlab的绘图性能相当差,它更关注可定制性而不是性能。使用MEX运行一些原生C++代码来用OpenGL绘制数据可能要快得多。
https://stackoverflow.com/questions/11397687
复制相似问题