问题描述
我用C语言编写了一个非常简单的程序来测试程序所在存储设备的读写速度。它可以是SSD,HDD或USB记忆棒。但是我得到的结果非常不一致,这很奇怪,因为该程序非常简单明了。
当我在USB 3.0棒上运行它时,它给出的值如270 mb / s [写入]和2100 mb / s [读取]。 对于HDD,它给出相似的值。 对于SSD,它提供类似的读取速度,写入速度约为300 mb / s。
这很奇怪,因为代码中没有任何复杂的东西,我也没有对其进行优化。报告的速度与这些设备的正常速度不匹配。不过,可能是我不太了解其工作原理。
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <math.h>
const unsigned int N = 25000000; /// Number of floats to be written
int main(){
double time0,time1,time2;
unsigned int i,size = N*sizeof(float); /// Size of the file to be written/read in bytes
FILE *pfin,*pfout;
float *array_write,*array_read,sum,delta_write,delta_read;
array_write = (float *) malloc(N*sizeof(float)); /// Array to be written to a file
array_read = (float *) malloc(N*sizeof(float)); /// Array to be read
for(i = 0; i < N; i++)
array_write[i] = i*1.f/N; /// Filling in array with some values
time0 = omp_get_wtime();
pfout = fopen("test.dat","wb");
fwrite(array_write,N*sizeof(float),1,pfout);
fclose(pfout);
time1 = omp_get_wtime();
pfin = fopen("test.dat","rb");
fread(array_read,pfin);
fclose(pfin);
time2 = omp_get_wtime();
sum = 0.f;
for(i = 0; i < N; i++)
sum += fabsf(array_read[i] - array_write[i]); /// Simple test to check whether it read properly or not
delta_write = time1 - time0;
delta_read = time2 - time1;
printf("delta1 = %f,delta2 = %f,size = %f Gb,diff = %f\n",delta_read,size/1000000000.f,sum);
printf("Speed: \n Write: %f [Mb/s]\n Read: %f [Mb/s]\n",size/1000000.f/delta_write,size/1000000.f/delta_read);
free(array_read);
free(array_write);
}
//// compile with gcc program.c -lgomp -lm -O0 -o program.x
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)