2013-11-21 39 views
1

我几乎没有关于C++编程的问题。我想知道是否有可能以异步方式(顺序代码)在内存中写入?但让我明确我的问题。 我正在寻找一种算法的改进,似乎我的代码的瓶颈写入内存。我想写在内存中,仍然继续计算。一个处理器可以这样做吗?就像使用ALU并使用写入块一样?知道,我没有在下一次计算中使用结果。它被写入向量结果。C++:异步写内存

谢谢您花时间回复,无论是阅读。

+0

您的瓶颈不写入内存。它要么以错误的方式加载内存页面,要么只是一个长时间的同步循环,只需花费时间就可以遍历整个范围。 –

+0

您是否尝试过使用叉子? – JoeC

+0

如果您对现代处理器在低级别上的实际操作感兴趣,我建议您选择Hennesey和Patterson等计算机体系结构教科书。现代处理器已经非常“无序”了。 –

回答

0

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

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

输入/输出是许多程序中的瓶颈,所以它只是您必须优化和处理的问题。

+0

我已经使用绕过缓存内在函数来优化写入内存过程,但它就像我觉得我可以做更多的事情。但也许这只是纯粹的幻想。无论如何感谢您的回答 – user3018144

+0

@ user3018144:不客气。如果您想粘贴您的代码或算法,我们可能会提供更多帮助。此外,代码审查http://codereview.stackexchange.com/上的人员活着进行代码优化,因此您可能还想在其中发布代码。 – AndyG

+0

感谢您的建议,我会将其发布到网站上。 – user3018144

0

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

x86指令提供了没有这样的设施,但AFAIK较新的PPC版本。如果你想遵循硬件路线,你应该首先检查你当前使用的硬件:内存延迟与不同的x86 CPU差别很大。

+0

我想知道是否有可能在C++下做这样的事情。但好的,谢谢你的回答。 – user3018144

0

您可以优化内存写入。

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