gre*_*ian 3 c performance buffer memory-management
我想这是一个性能计算问题.我正在用C语言编写一个程序,它产生大量的输出,远远超过通常可以整体存储在RAM中的程序.我打算简单地将输出写入stdout; 所以它可能只是进入屏幕,或者可能被重定向到文件中.我的问题是如何为将存储在RAM中的数据选择最佳缓冲区大小?
输出数据本身并不是特别重要,所以我们只是说它产生了一个庞大的随机整数列表.
我打算有两个线程:一个产生数据并将其写入缓冲区,另一个将该缓冲区写入stdout.这样,我可以开始生成下一个输出缓冲区,同时仍然写入前一个缓冲区stdout.
需要明确的是,我的问题不是如何使用功能,如malloc()和pthread_create()等我的问题是纯粹的关于如何选择一个号码最佳缓冲区大小字节(512,1024,1048576),这将提供最佳性能?
理想情况下,我想找到一种方法,我可以动态地选择最佳缓冲区大小,以便我的程序可以适应当时运行的任何硬件.我试图寻找这个问题的答案,虽然我发现了一些关于缓冲区大小的线程,但我找不到与此问题特别相关的任何内容.因此,我只是想把它作为一个问题发布,希望我能得到一些不同的观点,并提出比我自己更好的东西.
混合设计和优化是一个很大的浪费时间.这被认为是最重要的规范错误之一.它可能会损坏您的设计,而不是实际优化.
让您的程序正常工作,如果有性能问题的迹象,那么对其进行分析并考虑分析真正导致问题的部分.
我认为这特别适用于复杂的架构优化,如多线程应用程序.对单个图像进行多线程处理是您从未真正想要做的事情:它不可能进行测试,容易出现不可重现的错误,在不同的执行环境中会有不同的失败,还有其他问题.但是,对于某些程序,功能需要多线程并行执行,或者是获得必要性能的一种方法.它得到了广泛的支持,实际上它有时是一种必要的邪恶.
如果没有确凿的证据证明像你这样的程序需要它,那么这不是你想要的初始设计.
几乎任何其他并行方法(消息传递?)将更容易实现和调试,无论如何,你在操作系统的I/O系统中获得了很多.
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |