嵌入式开发者社区

标题: 写多个文件的两种方式,速度相差4倍!! [打印本页]

作者: lushidegreen    时间: 2016-4-14 13:50
标题: 写多个文件的两种方式,速度相差4倍!!
用以下两种方式,分别向3个文件写入80M字节。方式1:循环向3个文件写8k字节数据,直到写满80M字节。
        i = 10240;
        while (i--) {
                res = f_write(&pfile, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
                res = f_write(&pfile2, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
                res = f_write(&pfile3, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }
方式2:每次写8k字节,写完80M字节到1个文件,再写另一个文件。
        i = 10240;
        while (i--) {
                res = f_write(&pfile, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }
        i = 10240;
        while (i--) {
                res = f_write(&pfile2, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }
        i = 10240;
        while (i--) {
                res = f_write(&pfile3, &buf_temp, 8192, &fwrite_cnt);
                if (FR_OK != res)  break;
        }



方式1耗时约4分55秒,即295秒,方式2耗时约60秒。耗时比例约为5:1。

我所做项目是多通道录音设备,当前采用的是方式1写各个通道的数据到不同文件,由于写入速度限制,无法达到要求的最高采样率。
请问怎么才能解决这个矛盾?

作者: 希望缄默    时间: 2016-4-15 18:08
这个优化起来恐怕难度比较大 也需要比较成时间~
作者: 希望缄默    时间: 2016-4-15 18:08
建议你考虑使用 OMAPL138
数据读写的任务交给 ARM 释放 DSP 资源 这样可以提高性能
作者: lushidegreen    时间: 2016-4-15 18:35
希望缄默 发表于 2016-4-15 18:08
建议你考虑使用 OMAPL138
数据读写的任务交给 ARM 释放 DSP 资源 这样可以提高性能 ...

嗯,这个可以考虑。
但是我们这边没人会OMAP138的ARM端开发。

我现在打算改变程序结构,每个文件的写操作用一个任务来管理。
目前测试了,使用3个任务各写1个80M字节的文件,结构类似于方式1,但是写入的时间缩短为120秒左右。
作者: 希望缄默    时间: 2016-4-15 22:05
呃..... 我觉得也可以 先缓存在 DDR2 等系统空闲了 在统一写 不过这个也跟具体需求有关
作者: lushidegreen    时间: 2016-4-19 11:32
希望缄默 发表于 2016-4-15 22:05
呃..... 我觉得也可以 先缓存在 DDR2 等系统空闲了 在统一写 不过这个也跟具体需求有关 ...

嗯,环形缓冲队列是必须的。

我现在用5个任务分别写5个文件,当提高f_write单次写入的数据块大小时,可以明显提高文件写入速度。
比如,我做的项目是录音设备,f_write单次写入8k数据时,写入速度跟不上数据产生的速度;改为单次写入32k时,就可以解决这个问题了。

不知道你有没有这样的经验呢?




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4