我已经看到了类似这样的问题的其他答案,“快速 memcpy”,以及其他人的建议,“找出一种不复制的方法”......我现在有一个有点像这样的程序,我正在尝试优化...... .它有多个线程在 1024 字节块上执行 memcpy,还使用 agner fog 的 asmlib 来压缩性能,但受到内存速度的限制。
你能举例说明如何不复制它可以比memcpy
某些情况下更快吗?
我已经看到了类似这样的问题的其他答案,“快速 memcpy”,以及其他人的建议,“找出一种不复制的方法”......我现在有一个有点像这样的程序,我正在尝试优化...... .它有多个线程在 1024 字节块上执行 memcpy,还使用 agner fog 的 asmlib 来压缩性能,但受到内存速度的限制。
你能举例说明如何不复制它可以比memcpy
某些情况下更快吗?
没有看到任何代码,这很难明确回答。听起来您正在将两个 512 字节数据的扇区读入一个 1024 字节的缓冲区,但您希望将额外的 64 字节附加到数据的末尾。
分配一个 1088 字节的缓冲区,将您的读取定向到缓冲区的偏移量 0 和偏移量 512,然后使用从偏移量 1024 开始的 64 字节数据更新缓冲区。
如果您希望另一个线程在没有 memcpy 的情况下拥有此数据,则将指针传递给 1088 缓冲区的开头。
希望这接近您的应用程序正在执行的操作。
如果您有进程在多处理器环境中处理内存,则可以检查 NUMA 架构。
我不知道 NUMA 是否会影响胎面。如果不是,我可以建议您检查您正在使用的 cpu 架构是如何工作的。