我编写了一种特殊的图像处理算法,它大量使用了imwrite和imread。下面的示例将同时运行在八次Matlab会话上,在一台支持超线程的6核i7机器上。(每个会话的文件名都不同。)
tic;
for i=1:1000
%a processing operation will be put here%
imwrite(imgarray,temp,'Quality',100);
imgarray=imread(temp);
end
toc;我考虑在示例代码中修改temp=[ramdrive_loc temp];,有两个目的:
所创建的图像文件大小约为1MB。硬盘驱动器形成为RAID0与2x7.2k鱼子酱黑人。该机器是一台Windows机器,其中分区被格式化为NTFS。
以上toc的输出为(不处理图像):
没有的 Ramdisk: 104.330466秒。
与 Ramdisk: 106.100880秒。
有什么原因使我不能获得任何速度?将ramdisk的文件系统更改为FAT32有帮助吗?
注意:还有其他关于ramdisk和硬盘比较的问题;但是这个问题主要是关于imread、imwrite和Matlab /O。
另外: ram磁盘是通过SoftPerfect提供的免费软件来设置的。它有3gb的空间,这足以完成任务(在Matlab会话期间,最多需要生成和编写10 be )。
发布于 2014-05-19 04:18:42
文件缓存。很可能,Windows的文件缓存已经在加速您的I/O活动,因此RAM磁盘不会给您带来额外的加速。当您写出文件时,它被写入文件缓存,然后异步刷新到磁盘,因此Matlab代码不必等待物理磁盘写入完成。当您立即将相同的文件读入内存时,很有可能它仍然存在于文件缓存中,因此它是从内存中提供的,而不是引发物理磁盘读取。
如果这是您的实际代码,您将一遍又一遍地重写同一个文件,这意味着所有的活动都可能发生在磁盘缓存中,因此您不会碰到底层存储机制的瓶颈。
重写您的测试代码,这样它看起来更像您的实际工作负载:在每次传递时编写不同的文件,如果这是您在实践中要做的事情,包括图像处理代码,并且实际上并行运行多个进程。将其放入Matlab分析器中,或添加更细粒度的tic/toc调用,以查看您在I/O中实际花费了多少时间(例如imread和imwrite,以及它们中正在执行文件I/O的部分)。如果在I/O之外执行非平凡的处理,则可能看不到RAM磁盘中的显著加速,因为文件缓存将有时间在其他处理过程中执行实际的物理I/O。
而且,由于您说最多有10 MB被一遍又一遍地写入,这足够小到可以轻松地容纳文件缓存中,而您的实际物理I/O吞吐量非常小:如果您编写一个文件,然后在文件缓存将其刷新到磁盘之前用新数据覆盖它的内容,操作系统就不必一直将第一组数据刷新到磁盘。由于缓存,您的I/O可能已经主要发生在内存中,因此切换到RAM磁盘不会有帮助,因为物理I/O不是瓶颈。
现代操作系统会进行大量的缓存,因为它们知道会发生这样的情况。RAM磁盘不一定会带来很大的加速。对于这种行为,Matlab或imread/imwrite没有任何特定的内容;其他像RAMdisk slower than disk?这样的内存磁盘问题仍然相关。
https://stackoverflow.com/questions/23716337
复制相似问题