社区
C语言
帖子详情
一道内存和cpu时间的题(简单而复杂)
mooncmy
2011-03-17 11:45:57
char a1,a2,a3,a4;
char b1,b2,b3,b4;
char c1,c2,c3,c4;
要实现:
将a1与b1的求和存到c1,
将a2与b2的求和存到c2,
将a3与b3的求和存到c3,
将a4与b4的求和存到c4,
请问用什么数据结构和算法,使用的cpu时间最少?使用的内存最少?
...全文
167
23
打赏
收藏
一道内存和cpu时间的题(简单而复杂)
char a1,a2,a3,a4; char b1,b2,b3,b4; char c1,c2,c3,c4; 要实现: 将a1与b1的求和存到c1, 将a2与b2的求和存到c2, 将a3与b3的求和存到c3, 将a4与b4的求和存到c4, 请问用什么数据结构和算法,使用的cpu时间最少?使用的内存最少?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bluewanderer
2011-03-17
打赏
举报
回复
其实SIMD折腾内存的代价不比分开加小...
赵4老师
2011-03-17
打赏
举报
回复
搜“SIMD”
bluewanderer
2011-03-17
打赏
举报
回复
你想把4立方米的水灌在小于4立方米的容器中还不洒么?
mooncmy
2011-03-17
打赏
举报
回复
[Quote=引用 6 楼 bokutake 的回复:]
我想的办法是用一个struct或者4元素数组,然后强制转换为unsigned int指针做加法。因为计算机内部是用的补码,只要不超出范围的话,应该是能加上的。
[/Quote]
数组肯定是不行的,你都想到了,可能会溢出
结构是数组也是一样的
mooncmy
2011-03-17
打赏
举报
回复
其实问题就两个
一是用什么数据结构来保存计算的结果;
二是用什么算法;
mooncmy
2011-03-17
打赏
举报
回复
[Quote=引用 5 楼 chenjiawei007 的回复:]
要求很高啊,
算法决定CPU的效率,不敢多说,
内存上,
可以自己开辟数据吗?不知道5字节内存算不算多。
实现大致是这样,
char* buf = char[5];
a1+b1 --> char[0];
a2+b2 --> char[1];
a3+b3 --> char[2];
a4+b4 --> char[3];
char[4],当做算数暂放用。
……
[/Quote]
5个字节太多了,你还不如定义4个char来保存结果,
不过4个字节一般都能想到,肯定不对了
ForestDB
2011-03-17
打赏
举报
回复
c1 = a1 + b1;
c2 = a2 + b2;
c3 = a3 + b3;
c4 = a4 + b4;
个人觉得这样就够了,其他的事就交给编译器吧。
辰岡墨竹
2011-03-17
打赏
举报
回复
不过要控制符号什么的、溢出什么的,而且又保证效率,最好还是用汇编使用Pentium的MMX指令集,比如PADDSB指令能一次做64位压缩的8个有符号数的加法,还能保证符号正确。
lhy
2011-03-17
打赏
举报
回复
怎么写都用不了多少时间。
辰岡墨竹
2011-03-17
打赏
举报
回复
我想的办法是用一个struct或者4元素数组,然后强制转换为unsigned int指针做加法。因为计算机内部是用的补码,只要不超出范围的话,应该是能加上的。
chenjiawei007
2011-03-17
打赏
举报
回复
要求很高啊,
算法决定CPU的效率,不敢多说,
内存上,
可以自己开辟数据吗?不知道5字节内存算不算多。
实现大致是这样,
char* buf = char[5];
a1+b1 --> char[0];
a2+b2 --> char[1];
a3+b3 --> char[2];
a4+b4 --> char[3];
char[4],当做算数暂放用。
其实LZ的问题难处在于,如果内存多些,可以执行语句少,CPU时间也就少,
但是内存少了,执行语句就会多,
期间的均衡又没有标准,所以也没标准答案吧。
mooncmy
2011-03-17
打赏
举报
回复
当然是用c写了,都说是char了
is2120
2011-03-17
打赏
举报
回复
数组加循环
这需要啥算法呀,cpu处理个+加法够快了吧
bdmh
2011-03-17
打赏
举报
回复
直接写汇编
LinuxBirdMan
2011-03-17
打赏
举报
回复
用汇编吧。。。
yy198619
2011-03-17
打赏
举报
回复
有没有完整的程序可以参考参考啊
dooX8086
2011-03-17
打赏
举报
回复
4个char 的内存顺序排列方式..可当作 int
因为是 char 不是 unsigned char 所不用考虑进位情况.
*(unsigned int *)&c4 =*(unsigned int *)&b4 + *(unsigned int *)&a4;
// 不过要保证 char 的赋值 -128~127
xali
2011-03-17
打赏
举报
回复
抱歉!最后应该 *c=*a+*b;
xali
2011-03-17
打赏
举报
回复
最好想个办法让4个char类型的值看成一个32位整型值,一次加法完成,不过这里不能有进位的情况。
能不能 int* a=&a1,b=&b1,c=&c1; c=a+b; //完成?
masmaster
2011-03-17
打赏
举报
回复
[Quote=引用 9 楼 forestdb 的回复:]
c1 = a1 + b1;
c2 = a2 + b2;
c3 = a3 + b3;
c4 = a4 + b4;
个人觉得这样就够了,其他的事就交给编译器吧。
[/Quote]
两个加数过大怎么办?
加载更多回复(3)
Linux性能基础:
CPU
、
内存
、磁盘等概述
影响
CPU
性能的指标主要分为:主频、
CPU
位数、
CPU
缓存指令集、
CPU
核心数和IPC。①
CPU
主频
CPU
主频是指
CPU
内核工作的时钟频率,单位Hz。它直接的决定了
CPU
的性能,也可以通过超频来提高
CPU
主频来获得更高性能。主频越大,运算越快。例如
CPU
在一个时钟周期内运算一条指令,2GHz运行一条指令需要10ns,那么1GHz需要20ns,运算速度慢了一倍。因为2GHz的时钟周期比1GHz的时钟周期占用的
时间
减少了一半,速度自然就快了一倍。主频不代表
CPU
整体速度。
CPU
是如何读写
内存
的?
cpu
内存
Hadoop性能调优、YARN的
内存
和
CPU
配置
转 Hadoop性能调优、YARN的
内存
和
CPU
配置 2018年06月12日 21:01:54 toto1297488504 阅读数:2417 ...
CPU
是如何读写
内存
的?
现在你还认为
CPU
读写
内存
非常
简单
吗?这一过程涉及到的硬件以及硬件逻辑包括:L1 cache、L2 cache、L3 cache、多核缓存一致性协议、MMU、
内存
、磁盘;软件主要包括操作系统。
字节终面:
CPU
是如何读写
内存
的?
现在你还认为
CPU
读写
内存
非常
简单
吗?这一过程涉及到的硬件以及硬件逻辑包括:L1 cache、L2 cache、L3 cache、多核缓存一致性协议、MMU、
内存
、磁盘;软件主要包括操作系统。这一看似
简单
的操作涉及几乎所有计算机系统中的核心组件,需要软件以及硬件密切配合才能完成。这个过程给程序员的启示是:1),现代计算机系统是非常
复杂
的;2),你需要写出对cache友好的程序。......
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章