往期技术文章勘误
Posted ncdxlxk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了往期技术文章勘误相关的知识,希望对你有一定的参考价值。
最近在整理一个材料,借用了我在往期推送的一些技术文章中的内容。回头看文章中的细节,发现还是存在一些当时理解不充分,或者是笔误的地方。由于微信推送出去的文章已经不便于更改(除非重新推送),因此就特起一篇勘误文章,把目前发现的错误订正下,希望没有给大家带来困扰。
错误位置:描述“restrict”关键字的部分。
原文:“restrict”关键字也不能随便乱加,我们需要了解C6000的片上内存组成,只有当两个指针所指的内存在不同的block里时,restrict才是合法的。
解析:正如“restrict”的作用所言,用它声明过的指针变量,能够保证不会同其它指针变量指向同一个数据体。这与指针指向的数据体是否在同一个block存储区无关,也不需要考虑具体的片上内存组成形式。比如:
short *restrict a;
short *b;
short x[100];
short y[100];
这里可以确认程序不会出现a=x;b=x;的情况。而a=x;b=y是合法的,即使数组x和y在同一个block中对齐到了同一个bank。
勘误:删除该句。
错误位置:代码片段3
原文:
void array_sum(short *a, short *sum, length)
{
unsigned int i;
short sum_temp1 = 0;
short sum_temp2 = 0;
for(i=0; i<length-1 ; i+=2)
{
sum_temp1 = sum_temp1 + a[i];
sum_temp2 = sum_temp2 + a[i+1];
}
for(; i<length; i++)
{
sum_temp1 = sum_temp1 + a[i];
}
*sum = sum_temp1 + sum_temp1;
}
解析:最后一条语句中的一个sum_temp1应更改为sum_temp2。
勘误:
void array_sum(short *a, short *sum, length)
{
unsigned int i;
short sum_temp1 = 0;
short sum_temp2 = 0;
for(i=0; i<length-1 ; i+=2)
{
sum_temp1 = sum_temp1 + a[i];
sum_temp2 = sum_temp2 + a[i+1];
}
for(; i<length; i++)
{
sum_temp1 = sum_temp1 + a[i];
}
*sum = sum_temp1 + sum_temp2;
}
错误位置:4.1节 确认性能瓶颈,其中讲到Amdahl定律可以用公式表达为: Told/Tnew = 1/[(1-a) + a/b]。
原文:设原程序执行时间为Told,其某部分代码所需执行时间占该时间的比例为a,而该部分性能提升的比例为b。
解析:最后一小句中b表示为待优化部分代码性能提升的比例有误,很容易会发现这里公式推导不通,b正确的含义是待优化部分代码性能提升的倍数。
勘误:设原程序执行时间为Told,其某部分代码所需执行时间占该时间的比例为a,而该部分性能提升的倍数为b。
·END·
想进一步跟踪本博客动态,欢迎关注我的个人微信订阅号:信号君
信号君:寻求简单之道
技术成长 | 读书笔记 | 认知升级
扫描二维码关注信号君
以上是关于往期技术文章勘误的主要内容,如果未能解决你的问题,请参考以下文章
《RocketMQ技术内幕:RocketMQ架构设计与实现原理》书籍勘误表
《RocketMQ技术原理:RocketMQ架构设计与实现原理》第二版书籍勘误
《RocketMQ技术原理:RocketMQ架构设计与实现原理》第二版书籍勘误