博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARTS训练第三周
阅读量:5990 次
发布时间:2019-06-20

本文共 2170 字,大约阅读时间需要 7 分钟。

算法部分

这周的算法完成的是largest container,开始用的是暴力枚举比较出最大值,后来改成了两个首尾两个cursor依次收缩。大致上复杂度就变成了线性。不过我在收缩首尾时设了一个循环,这样只有新值比原值更大时才投入计算容积,不然就一直收缩。不过我看比我更快的算法时,它不做比较直接收缩。直观上看似乎计算量不小,但是性能上其实更好,毕竟内部套一个循环实际要多很多测试和跳转,对于程序是不必要的开销。

int maxArea(int* height, int heightSize){    int cur_l=0,cur_r=heightSize-1;    int ht_l = height[cur_l], ht_r = height[cur_r];    int vol=0;    int maxVol = 0;    int move;    int h;        while(cur_l < cur_r)    {        move = ht_l < ht_r? LEFT: RIGHT;        h = MIN(ht_l,ht_r);        vol = (cur_r-cur_l)* h ;        maxVol = vol > maxVol? vol:maxVol;                if(move == LEFT)        {            do            {                cur_l++;                if ((ht_l=height[cur_l])>h)                {                    break;                }            }while(cur_l < cur_r);        } else         {             do            {                cur_r--;                if ((ht_r=height[cur_r])>h)                {                    break;                }            }while(cur_l < cur_r);        }            }    return maxVol;}复制代码

Review部分

这周倒是没有看新的部分,而是继续把CSAPP的第三章习题做完了。涉及反汇编时反推编译器是如何优化代码,以及我们怎样写程序能够使编译器编译时少用一个寄存器这个还是蛮有意思的。比如3.66和3.67反推结构体声明和原始C程序。下面附上3.67的答案(我自己在x86上测试正确)。

// CSAPP2ed 3.67void proc(union ele *up){    up->e2.next->e1.x = *(up->e2.next->e1.p) - up->e2.y;}复制代码

Tip部分

在完成CSAPP课后练习时因为需要生成超过BUFSIZE的字符串文本而且不能换行,又复习了一下shell的用法:

echo -n {0001..2048} >> test_file复制代码

使用-n 是为了不换行,不然结果就会是

000100020003...2048复制代码

使用 >> 是为了追加到原文本中,而不是全部重写。不过用来生成测试文本用>重写一遍也没问题的。

Summary部分(计算机体系结构)

Feature size的定义为x轴或y轴上晶体管的最小尺寸。

晶体管在芯片上的尺寸线性下降,因此晶体管的密度平方阶上升。

晶体管性能的提升就稍微复杂了一点。feature size的下降意味着水平和垂直方向尺寸均在下降。垂直方向的下降意味着电压也需要下降至适配的情况。近似来看,性能的变化与feature size呈线性关系。

晶体管性能的线性提升和数目的平方阶提升既是机遇又是挑战。这一变化促进了多核处理器的转变。以及SIMD(单一指令多数据)的推广。

不过尽管晶体管密度变大了,单位长度的电阻和电容也变差了。

23页提到了微处理器的电量消耗与时钟频率,电压,电容等的关系。时钟频率越慢的处理器,单位时间耗电量更小(但不代表完成固定任务消耗的能量少)。因此25页谈到了现代处理器有几个省电的方式,其中之一就是关闭时钟(如无需浮点计算时关闭浮点单元的时钟);动态调节时钟(比如移动设备的睡眠模式,由于此时无任务需要处理,使用低频时钟,耗电量变低);主存和磁盘也据此情况设计得更为省电;为了省电,可以关闭某些核,同时使另一些核具有超过硬件规定的时钟频率做短时间的运算处理。

考虑到晶体管数目的变多会自然带来能耗的增加,而且也会增加leakage(漏电)。考察性能的度量方式不再是每平方毫米上的性能表现,而是基于每瓦或每焦耳完成的任务量(会在第4和5章继续讨论)。

======

CSAPP要继续看第四章了,也是会要说到指令集结构等关乎硬件方面的东西,感觉稍稍有些硬。计算机体系结构一书也是蛮硬的。希望能继续啃下去。

转载地址:http://giilx.baihongyu.com/

你可能感兴趣的文章
关于去掉Li标签前面的小圆点和距离/显示下划线
查看>>
Bag-of-words模型入门介绍文章
查看>>
演讲稿丨梁家恩 物联网智能交互与服务
查看>>
《HTML5与CSS3实战指南》——第1章 HTML5和CSS3简介1.1 什么是HTML5
查看>>
《Unity 5.x游戏开发实战》一2.9 构建
查看>>
《UCD火花集2:有效的互联网产品设计 交互/信息设计 用户研究讨论》一第1章 设计的数据和分析1.1 看不懂数据...
查看>>
《Ansible权威指南》一2.3 Ansible命令用法详解
查看>>
Python基础(一)变量,用户交互,if else , while ,for,三目运算
查看>>
《jQuery UI 开发指南》——2.2 格式化内容
查看>>
《C++语言基础》实践参考——max带来的冲突
查看>>
MySQL · myrocks · myrocks之事务处理
查看>>
【阿里云资讯】云计算再下一城 阿里云携手中国化工集团
查看>>
正则表达式全部符号解释
查看>>
从简单Sql探索优化之道
查看>>
交通灯管理系统
查看>>
Android的logcat日志工具使用详解
查看>>
阿里金融云视频直播分享会-云中沙箱直播实验限时免费
查看>>
hibernate链接数据库链接池c3p0配置
查看>>
Docker 引领企业软件供应链创新升级
查看>>
HTML5理论实践与练习(一)
查看>>