【发布时间】:2012-01-17 00:19:06
【问题描述】:
我有一个 C 应用程序(VStudio 2010,win7 64 位)在具有双至强芯片的机器上运行,这意味着 12 个物理内核和 24 个逻辑内核,以及 192 gig 的内存。 编辑:操作系统是 win7(即 Windows 7、64 位)。
该应用程序有 24 个线程(每个线程都有自己的逻辑核心)来执行计算并填充大型 C 结构的不同部分。当所有线程都完成时(并且线程都完全平衡,因此它们同时完成),该结构大约为 60 GB。
(我可以控制硬件设置,因此我将使用 6 个运行 RAID 0 的 2tb 驱动器,这意味着写入的物理限制大约是平均顺序写入速度的 6 倍,或大约 2 gig/秒。 )
将其写入磁盘的最有效方法是什么?显然,I/O 时间将使计算时间相形见绌。从我对这个主题的研究来看,似乎 write() (而不是 fwrite() )是要走的路。但是在设置缓冲区大小等方面,我还可以在软件方面做哪些其他优化。mmap 会更有效吗?
【问题讨论】:
-
请添加您要使用哪种语言编写的标签。这有助于其他人轻松找到此问题。
-
计算需要多长时间?
-
我看到了一个
mmap标签。这适用于您的系统吗? -
就写吧。它将通过内存到内存的复制快速复制到文件系统缓存中。在您的程序退出很久之后,它将被写入磁盘。你有足够的内存。
-
我关于 mmap 的错误;我没有意识到如果使用visual c(我是,不是c++),这是不可用的。计算大约需要 0.5 秒。