【发布时间】:2013-07-30 07:17:29
【问题描述】:
我已经看到类似问题的其他答案,“快速 memcpy”,以及其他人的建议,“找出一种不复制的方法”......我有一个有点像这样的程序现在我正在尝试优化...它有多个线程在 1024 字节块上执行 memcpy,还使用 agner fog 的 asmlib 来压缩性能,但受到内存速度的限制。
您能否举例说明在某些情况下如何复制它可以比memcpy 更快?
【问题讨论】:
-
好吧,你为什么需要复制它?它从何而来,又将走向何方?
-
/* memcpy(dest, source, size); */
-
这显然取决于您在做什么,特别是您要复制的内容和原因,所以请更加具体。也就是说,在最近的机器上,我希望 1 KiB 的副本几乎与读取 1 KiB 的速度一样快(写入每个字只需要几个周期的缓存,而回写负责主内存当您不注意时 - 因此延迟不是问题,带宽也足够)。
-
如果您有指向原始内存的指针,您可以避免复制。当然,那时你不能随意修改。
-
这看起来有点像XY problem,你有一个你想使用的解决方案,你问我们如何使用它,但你没有告诉我们你为什么要使用那个解决方案或导致您选择解决方案的实际问题。甚至可能有更好的解决方案,但我们无法告诉您,因为我们不知道您为什么要这样做。
标签: c performance memory optimization memcpy