首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imread & Imwrite不能在Ramdisk上实现预期的收益

Imread & Imwrite不能在Ramdisk上实现预期的收益
EN

Stack Overflow用户
提问于 2014-05-17 21:40:05
回答 1查看 480关注 0票数 0

我编写了一种特殊的图像处理算法,它大量使用了imwriteimread。下面的示例将同时运行在八次Matlab会话上,在一台支持超线程的6核i7机器上。(每个会话的文件名都不同。)

代码语言:javascript
复制
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和硬盘比较的问题;但是这个问题主要是关于imreadimwrite和Matlab /O。

另外: ram磁盘是通过SoftPerfect提供的免费软件来设置的。它有3gb的空间,这足以完成任务(在Matlab会话期间,最多需要生成和编写10 be )。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-19 04:18:42

文件缓存。很可能,Windows的文件缓存已经在加速您的I/O活动,因此RAM磁盘不会给您带来额外的加速。当您写出文件时,它被写入文件缓存,然后异步刷新到磁盘,因此Matlab代码不必等待物理磁盘写入完成。当您立即将相同的文件读入内存时,很有可能它仍然存在于文件缓存中,因此它是从内存中提供的,而不是引发物理磁盘读取。

如果这是您的实际代码,您将一遍又一遍地重写同一个文件,这意味着所有的活动都可能发生在磁盘缓存中,因此您不会碰到底层存储机制的瓶颈。

重写您的测试代码,这样它看起来更像您的实际工作负载:在每次传递时编写不同的文件,如果这是您在实践中要做的事情,包括图像处理代码,并且实际上并行运行多个进程。将其放入Matlab分析器中,或添加更细粒度的tic/toc调用,以查看您在I/O中实际花费了多少时间(例如imreadimwrite,以及它们中正在执行文件I/O的部分)。如果在I/O之外执行非平凡的处理,则可能看不到RAM磁盘中的显著加速,因为文件缓存将有时间在其他处理过程中执行实际的物理I/O。

而且,由于您说最多有10 MB被一遍又一遍地写入,这足够小到可以轻松地容纳文件缓存中,而您的实际物理I/O吞吐量非常小:如果您编写一个文件,然后在文件缓存将其刷新到磁盘之前用新数据覆盖它的内容,操作系统就不必一直将第一组数据刷新到磁盘。由于缓存,您的I/O可能已经主要发生在内存中,因此切换到RAM磁盘不会有帮助,因为物理I/O不是瓶颈。

现代操作系统会进行大量的缓存,因为它们知道会发生这样的情况。RAM磁盘不一定会带来很大的加速。对于这种行为,Matlab或imread/imwrite没有任何特定的内容;其他像RAMdisk slower than disk?这样的内存磁盘问题仍然相关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23716337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档