C ++:异步写入内存

时间:2013-11-21 15:21:24

标签: c++ performance computation asynchronous

我对C ++编程提出的问题很少。我想知道是否可以以异步方式(顺序代码)在内存中写入?但让我清楚我的问题。 我正在寻找算法的改进,似乎我的代码的瓶颈是在内存中写入。我想写在内存中,仍然继续计算。是否可以使用一个处理器?像使用ALU一样使用写入块?知道了,我没有在下一次计算中使用结果。它是用矢量结果写的。

感谢您花时间回复,或者阅读。

3 个答案:

答案 0 :(得分:0)

是和否。编译器将优化内存写入,以便处理器可以在写入内存块时执行操作。这是延迟隐藏的一种形式。这是“是”的答案。

“不”部分是,不幸的是从代码的角度来看,我们不能用一个线程来做这件事。

输入/输出是许多程序中的瓶颈,所以它只是你需要优化和处理的东西。

答案 1 :(得分:0)

这不是C ++或其他问题,它只是CPU支持的问题:如果底层硬件无法支持,C ++无法为您提供这样的工具。

x86指令提供没有这样的功能,但AFAIK是新的PPC版本。如果您想沿着硬件路线走下去,首先应该检查您当前使用的硬件:不同的x86 CPU的内存延迟差别很大。

答案 2 :(得分:0)

您可以优化内存写入。

  1. 压缩您编写的数据以节省内存带宽。
  2. 本地写入 - 一个连续的内存块,以更有效地使用处理器的写缓冲区。
  3. 从一个线程写出来以防止错误共享。
  4. 也许__builtin_prefetch可以在这里提供帮助,但我不确定。