在iPhone上以某种方式加速memcpy吗?

时间:2011-04-24 18:49:32

标签: iphone memcpy

前几天我写了一些代码,我注意到了复制 memcpy的RAM远比在for循环中复制它快得多。

我现在没有测量(也许我以后做了一些时间)但是我记得同样的RAM块,用于qas复制到 memcpy在300毫秒或更长时间内复制了20毫秒或更短时间。

有可能,memcpy硬件是acelerated吗?

5 个答案:

答案 0 :(得分:2)

好吧,我不能谈论Apple的编译器,但gcc绝对是treats memcpy as a builtin

答案 1 :(得分:2)

memcpy的内置实现往往会针对相关平台进行相当大的优化,因此它通常比天真的for循环更快。

一些优化包括一次尽可能多地复制(不是单个字节而是整个单词,或者如果有问题的处理器支持它,甚至更多),某种程度的循环展开等等。当然最好的过程优化取决于平台,因此通常最好坚持使用内置函数。

在大多数情况下,它是以比用户更有经验的人的方式编写的。

答案 2 :(得分:1)

有时mem-to-mem DMA在处理器中实现,是的,如果iPhone中存在这样的东西,那么memcpy()可能会利用它。即使它没有实现,我也不会对memcpy()似乎对你的逐个字符副本的15对1优势感到惊讶。

道德1:如果可能的话,总是更喜欢将memcpy()改为strcpy() 道德2:总是喜欢memmove()到memcpy();总是

答案 3 :(得分:1)

最新的iPhone在ARM芯片上有SIMD指令,允许同时进行4次计算。这包括移动内存。

此外,如果您创建高度优化的memcpy,通常会将循环展开到一定数量,并将其实现为duffs device

答案 4 :(得分:0)

看起来ARM CPU具有可以每次访问复制48位的指令。我敢打赌,你所看到的更大块的开销是你所看到的。

相关问题