IProc(基于Cortex-A9的CPU)上的RAM读取速度

时间:2020-03-20 08:59:46

标签: arm ram cortex-a

亲爱的

我制作了一个简单的基准程序来测试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;
}

}

0 个答案:

没有答案