【发布时间】:2019-12-16 03:23:39
【问题描述】:
我编写了一个程序来将二维数组读写到 NVME SSD(三星 970EVO plus)中。
我将程序设计为像 as 一样读取 N*M
#pragma omp parallel for
for(int i=0;i<N;i++)
fstream.read(...) // read M bytes
但是,此代码显示的性能(KB/s)低于 SSD 规格(
我认为如果大小 M 大于块大小(可能是 4KB)并且是 2 的倍数,那么该代码将显示 GB/s 性能。
然而,事实并非如此。我想我错过了什么。
是否有一些 c++ 代码可以最大限度地提高 SSD 上的 I/O 性能?
【问题讨论】:
-
GB/s 规格有点无关紧要,因为它受到所有中间硬件(例如主板,如果使用板载 SATA)的吞吐量以及您的 PC 实际消耗读取数据的速度的限制。例如。我的似乎最大速度约为 350 MB/s
-
这不是一个真正的 C++ 问题,它会归结为操作系统和硬件设施
-
您正在阅读多少数据? KB/s 对于读取少量数据是很正常的(也许不是 ssd?)。我认为让程序并行也无济于事。如果我不得不猜测 SSD 一次只能传输一个请求。
-
@BradyDean M 为 4MB,N 几乎为 1024
-
要获得 GB,您需要读取大型顺序文件。您正在阅读的文件是一百 MB 或更大。平行阅读也不会帮助你,也不会奏效。
标签: c++ io operating-system solid-state-drive