我正在研究实验室分析肌电图数据。其中一个步骤是计算数据集的连续小波变换(大小约为80000)。因此,我使用Matlab与小波工具箱和“cwt”来绘制3D尺度图。
计算需要花费大量时间,任何像3D旋转这样的交互(这对于查看数据的不同方面非常重要)几乎是不可能的。
资源监视器显示我的六核处理器中只有一个正在运行。我使用并行计算进行其他计算,但没有找到任何解决方案,甚至没有类似的问题。
我可以做些什么来激活对图的多核支持?
答案 0 :(得分:1)
我会冒一个有根据的猜测并且对你的问题否的答案充满希望我能做些什么来激活多重支持图?
Matlab当然可以使用多个内核进行计算。它的许多内在功能已经是多线程的,并且将使用任何可用的内核,而程序员(或用户)不必采取任何特殊措施。对于您自己的计算,您可以使用并行计算工具箱。
但是,除非你有一些非常特殊的图形硬件(如果你为什么没有提到它?),你的显示器会显示为什么当你与3D图形交互时只使用一个处理器 - 介于两者之间屏幕和计算机的硬件存在瓶颈,通过这个瓶颈,所有这些核心的输出被挤压成一个比特和字节流以供呈现。
您的经验与Matlab可视化例程的瓶颈一致,我认为从您提供的证据中得出结论是安全的,Mathworks没有多线程计算每个元素的新屏幕位置的例程。旋转时的绘图,或者将分析结果转换为图片的任何其他处理。如果他们确实将这些例程并行化,那将会改变瓶颈但不会将其删除。
要消除瓶颈,您必须让不同的Matlab线程分别处理屏幕的不同部分;我没有看到Matlab具备这种能力的证据。谷歌会发现你对并行渲染的大量引用,但我没有看到Matlab目前实现此任何方面的迹象。
我只是添加,为了回应你的评论,你写的我不能重新采样我的数据你应该注意Matlab的可视化例程重新采样你的数据用于演示除非你是仅可视化数据样本数小于可用像素数的数据集。如果您在水平方为2000像素的显示器上显示80000个样本的时间序列,则必须提供一些内容。
如果你自己负责重新取样,你可能会获得更好的图形性能和更好的理解。
答案 1 :(得分:1)
Matlab绘图性能非常糟糕,它更注重可定制性而非性能。使用MEX运行一些本机C ++代码以使用OpenGL绘制数据可能要快得多。