亲爱的
我制作了一个简单的基准程序来测试IProc(单核Cortex-A9)上的RAM速度,尤其是读取速度。 我尝试了两种不同的方法来读取4MB大小的区域并测量时间成本:
1。 malloc(4 * 1024 * 1024)
2。 mmap(通过/ dev / mem)
这两种方法的结果是: 1.〜2200Mb /秒 2.〜300Mb / s
我的问题是: 为什么这两个测试的时间成本不同? 我知道的是,时间成本应该相似,因为程序访问的大小是相同的。 但是我的结果与我的想法不同。
谢谢, 阿尔维斯。
{
int
main(int argc, char* argv[])
{
struct timeval start, end;
uint32_t* ptr;
volatile uint32_t* iter;
register uint32_t val = 0xabcdefef;
int i, fd, sizeOfPtr = 1 * 1024 * 1024;
unsigned char * map_base;
fd = open("/dev/mem", O_RDWR);
if (fd == -1)
{
return (-1);
}
map_base = mmap(NULL, sizeOfPtr * 4, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x7a000000);
if (map_base == 0)
{
printf("NULL pointer!\n");
}
else
{
printf("Successfull!\n");
}
ptr = map_base;
iter = ptr;
gettimeofday(&start, NULL);
for(i = 0; i < sizeOfPtr; i++)
{
val = *(iter + i);
}
gettimeofday(&end, NULL);
munmap(map_base, sizeOfPtr * 4);
close(fd);
printf("there is %d usecs passed read\n", (end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec));
printf("%ld\n", CLOCKS_PER_SEC);
ptr = malloc(sizeof(uint32_t) * sizeOfPtr);
iter = ptr;
gettimeofday(&start, NULL);
for(i = 0; i < sizeOfPtr; i++)
{
val = *(iter + i);
}
gettimeofday(&end, NULL);
if(ptr != NULL)
free(ptr);
printf("there is %d usecs passed read\n", (end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec));
printf("%ld\n", CLOCKS_PER_SEC);
return 0;
}
}