水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
下页
|
尾页
|
1/4
|
转到
主题:最佳memcpy实现
楼主
|
octavo
|
2020-07-29 08:17:01
|
只看此ID
--
修改:octavo FROM 162.156.156.*
FROM 72.143.229.*
1楼
|
hgoldfish
|
2020-07-29 10:25:05
|
只看此ID
这个不可能是最佳实现。。在现代处理器上面,单字节访问非常慢。
你发的这种实现无非是朴素实现的简单推广:
1. 没考虑内存地址对齐
2. 至少用个戴夫设备吧。
3. 用 simd 指令集一次复制 32 字节才是王道啊。
edit: 有内存地址对齐。
【 在 octavo (octavo) 的大作中提到: 】
: [upload=1][/upload]
--
修改:hgoldfish FROM 112.47.122.*
FROM 112.47.122.*
2楼
|
octavo
|
2020-07-29 10:55:21
|
只看此ID
我也这么想,但又觉得编译器会把simd给优化进去
这是c++标准委员会进化委员会的chair说的(chair居然是敏感词,深井冰)
要不我问他两句?
【 在 hgoldfish 的大作中提到: 】
: 这个不可能是最佳实现。。在现代处理器上面,单字节访问非常慢。
: 你发的这种实现无非是朴素实现的简单推广:
: 1. 没考虑内存地址对齐
: ...................
--
FROM 162.156.156.*
3楼
|
z16166
|
2020-07-29 11:07:29
|
只看此ID
可以看编译器intrinsic memcpy的asm code,比这个优化多点
--
修改:z16166 FROM 114.241.228.*
FROM 114.241.228.*
4楼
|
octavo
|
2020-07-29 11:31:02
|
只看此ID
没错,llvm直接把这替换成调用intrinsic memcpy
【 在 z16166 的大作中提到: 】
: 可以看编译器intrinsic memcpy的asm code,比这个优化多点
--
FROM 162.156.156.*
5楼
|
ylh1969
|
2020-07-29 16:57:41
|
只看此ID
【 在 octavo 的大作中提到: 】
: [upload=1][/upload]
见过一个比你这个好的,后来找不到了。
嵌入汇编语言的。
考虑各种字节对齐。
分别采用:
movsb,
movsw
movsd
movsq
指令。
--
FROM 221.221.50.*
6楼
|
here080
|
2020-07-30 02:35:55
|
只看此ID
这个为啥需要自己实现?你是写编译器的?
【 在 octavo (octavo) 的大作中提到: 】
: 标 题: 最佳memcpy实现
: 发信站: 水木社区 (Wed Jul 29 08:17:01 2020), 站内
:
:
: [upload=1][/upload]
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net
·[FROM: 72.143.229.*]
:
--
FROM 76.126.252.*
7楼
|
leslin
|
2020-07-30 09:32:53
|
只看此ID
【 在 here080 的大作中提到: 】
: 这个为啥需要自己实现?你是写编译器的?
:
写编译器的不做这个
写运行库的才需要
--
FROM 111.206.145.*
8楼
|
lwp
|
2020-07-30 11:29:34
|
只看此ID
这玩意难道不是直接用汇编实现的?
--
FROM 117.136.81.*
9楼
|
wushu
|
2020-07-30 12:08:58
|
只看此ID
这实现已经相当好了,版上绝大部分人应该是写不出来的,不知道上面说不好的仔细看过没。跟汇编比除了没法用SSE,该做的优化都做到了。
1. 4字节拷贝。没按8字节优化可能是追求代码简洁。
2. dest的4字节对齐。
3. 主循环内4条指令超标量同时拷贝32字节,一般处理器也够了。
4. 纯C,可移植性好,而且写的简洁美观。
ps,我面试时coding基本必问memset或memcpy,十几年目前没遇到过能考虑到超过三条的人。
【 在 octavo 的大作中提到: 】
: [upload=1][/upload]
--
FROM 106.39.149.*
下页
|
尾页
|
1/4
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版