【发布时间】:2015-08-27 12:00:17
【问题描述】:
我有一个用例,其中 x86 CPU 必须将 64 字节的数据写入 PCIe 从设备,其内存已被 mmapp'ed 到用户空间。截至目前,我使用 memcpy 来做到这一点,但事实证明它非常慢。我们可以使用像 _mm_stream_si128 这样的英特尔 SSE 内在函数来加速它吗?或使用 DMA 以外的任何其他机制。
目标是将所有 64 字节打包到一个 TLP 中,并在 PCI 总线上发送以减少开销。
【问题讨论】:
-
您确定您的
memcpy()实现尚未使用 SSE 指令吗? -
memcpy 来自标准 glibc,所以我有点怀疑是否使用 SSE 指令。
-
慢有多慢?有或没有 SSE 以几个周期的顺序复制数据。
-
@AnilAbraham:通过在调试器中运行代码并进入
memcpy()或通过反汇编 C 库文件来检查。您会发现memcpy()通常针对您的平台进行了很好的优化,因为它被频繁使用,所以应该如此。