1

我有几个关于 C++ 编程的问题。我想知道是否可以以异步方式(顺序代码)写入内存?但是让我清楚我的问题。我正在寻找一种算法的改进,我的代码的瓶颈似乎是在内存中写入。我想写入内存并继续计算。一个处理器可以做到这一点吗?喜欢使用 ALU 的同时使用写块吗?知道,我不会在下一次计算中使用结果。它写在矢量结果中。

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

4

3 回答 3

0

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

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

输入/输出是很多很多程序的瓶颈,所以它只是你必须优化和处理的事情。

于 2013-11-21T15:25:24.240 回答
0

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

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

于 2013-11-21T15:27:04.460 回答
0

您可以优化内存写入。

  1. 压缩您写入的数据以节省内存带宽。
  2. 本地写入 - 写入一个连续的内存块,以更有效地使用处理器的写入缓冲区。
  3. 从一个线程写入以防止虚假共享。
  4. 也许__builtin_prefetch可以在这里提供帮助,但我不确定。
于 2013-11-22T10:08:22.673 回答