Redian新闻
>
which class should take first? micro or macro?
avatar
which class should take first? micro or macro?# Economics - 经济
y*g
1
在贸易方面轮番出全的特朗普,最近又呼吁国会实施全面的移民改革,包括边界墙,并
威胁说,如果民主党拒绝支持他的提议,联邦政府就会被关闭。
如果民主党不给我们包括隔离墙在内的边境安全政策投票,就宁愿让政府关门。移民需
要转向择优制系统,美国需要伟大的人才进入。
特朗普政府的移民政策框架中,包括250亿美元用于修建边境围墙的信托基金。
今年早些时候,白宫发布了一项以择优评分为基础的移民提案,该提案以技能考量为基
础,限制目前占据合法移民多数名额的亲属移民,将难民绿卡名额减半,同时取消绿卡
抽签。但该提议在共和党内不温不火的支持下,在国会遇到困难。
与此同时,民主党在特朗普政府家庭分离政策的刺激下,已经将梦想移民者的合法化作
为对移民政策改革的目标。
avatar
d*c
2
建议吃火锅,麻辣的
avatar
o*r
3
旧的SBG900, 把无线加密从 WEP改成WPA,网路经常变慢。
当然不是一直慢。比如看个Youtube, 前几分钟还 可以,然后就突然卡拉, 声音也呻
吟了。于是所有的网络相关的都变慢, Fterm也是。
放着不用一段时间,变好了,然后又变慢了。 非常麻烦。
改成WPA的原因是一个手机在WEP下上不了无线。
怎么解决? 多谢!
avatar
r*s
4
【 以下文字转载自 robotics 讨论区 】
发信人: robotics (机器人技术), 信区: robotics
标 题: 嵌入式编程问题
发信站: BBS 未名空间站 (Sun Jul 20 16:56:13 2008), 转信
通常涉及到real-time部分,一方面要考虑代码的可维护性,
一方面要考虑到系统的哦执行时间,大家觉得怎么取舍?
比方说要读写100个地址,如果用循环,每次循环要多运算好多东西
for (i=0; i <100; i++)
read[i] = *(*****+i);
但是要是用
read[0] = *(******00);
read[1] = *(******01);
会让代码很长不好维护
一般我是用后者的,即使只读10个地址(对系统影响很小)。
各位有没有什么其他的观点?
每一个小地方节约几个CPU周期,整个系统就会提高很大的效率。
或者,硬件升级很快,不用把代码搞得这么冗长?
avatar
q*u
5
Hi there
I want to learn a little or micro and macro Economics, which one should I
take first?
thank you
avatar
z*g
6
换无线路由。WPA需要的计算量超过WEP,你的无线路由跟不上。
avatar
D*a
7
循环部分可以用asm写吧

【在 r******s 的大作中提到】
: 【 以下文字转载自 robotics 讨论区 】
: 发信人: robotics (机器人技术), 信区: robotics
: 标 题: 嵌入式编程问题
: 发信站: BBS 未名空间站 (Sun Jul 20 16:56:13 2008), 转信
: 通常涉及到real-time部分,一方面要考虑代码的可维护性,
: 一方面要考虑到系统的哦执行时间,大家觉得怎么取舍?
: 比方说要读写100个地址,如果用循环,每次循环要多运算好多东西
: for (i=0; i <100; i++)
: read[i] = *(*****+i);
: 但是要是用

avatar
a*n
8
micro

I

【在 q******u 的大作中提到】
: Hi there
: I want to learn a little or micro and macro Economics, which one should I
: take first?
: thank you

avatar
a*l
9
I don't think the latter one will be faster. Larger code segment might be
slower for execution.
Save a few cycles here and there does NOT necessarily mean your system will
提高很大的效率. You must understand where the bottleneck is.
Real-time system is more about scheduling than making code faster.

【在 r******s 的大作中提到】
: 【 以下文字转载自 robotics 讨论区 】
: 发信人: robotics (机器人技术), 信区: robotics
: 标 题: 嵌入式编程问题
: 发信站: BBS 未名空间站 (Sun Jul 20 16:56:13 2008), 转信
: 通常涉及到real-time部分,一方面要考虑代码的可维护性,
: 一方面要考虑到系统的哦执行时间,大家觉得怎么取舍?
: 比方说要读写100个地址,如果用循环,每次循环要多运算好多东西
: for (i=0; i <100; i++)
: read[i] = *(*****+i);
: 但是要是用

avatar
i*e
10
micro
avatar
r*s
11
schedule当然很重要,我是说应该保持一个什么样的嵌入式编程习惯
每个小地方都注意还是切实去寻找大大提高性能的地方,例如硬件更新或者你说的
schedule
就像生活中:是从小处节俭还是找更多的赚钱路子。

will

【在 a****l 的大作中提到】
: I don't think the latter one will be faster. Larger code segment might be
: slower for execution.
: Save a few cycles here and there does NOT necessarily mean your system will
: 提高很大的效率. You must understand where the bottleneck is.
: Real-time system is more about scheduling than making code faster.

avatar
q*u
12
thank you
avatar
r*s
13
可是我的asm不是利索,找时间再翻翻书,找找例子

【在 D*******a 的大作中提到】
: 循环部分可以用asm写吧
avatar
O*d
14
google "loop unrolling"

【在 r******s 的大作中提到】
: 可是我的asm不是利索,找时间再翻翻书,找找例子
avatar
h*e
15
最重要的习惯是保持头脑清醒,知道自己应该干什么。
比如不知道循环会不会成为瓶颈,就做展开之类的末端优化,就是不清醒的表现。

【在 r******s 的大作中提到】
: schedule当然很重要,我是说应该保持一个什么样的嵌入式编程习惯
: 每个小地方都注意还是切实去寻找大大提高性能的地方,例如硬件更新或者你说的
: schedule
: 就像生活中:是从小处节俭还是找更多的赚钱路子。
:
: will

avatar
e*e
16
最好是搞清楚你使用的complier的特性。
ASM的效率是最高的,不过麻烦,可以用C/C++高级语言来做测试,
编一些测试代码,对照来调试,看看翻译的ASM是否高效,选择出适合你这个平台的编
程习惯。
如果使用时间足够长,你可以用C/C++编制出近乎ASM效率的程序。
要提高效率,必须在每一个细节处做改进,最后你才能获得足够的余量实现所谓“不可
能”完成的任务。
real-time system的效率还是非常重要的。。。
avatar
l*r
17
1. figure out where your memory is located and use DM.
2. figure out how big is your I$ and do loop unrolling.
avatar
m*a
18
至少要++i比i++快点。
avatar
r*s
19
;)多谢指教

【在 h*******e 的大作中提到】
: 最重要的习惯是保持头脑清醒,知道自己应该干什么。
: 比如不知道循环会不会成为瓶颈,就做展开之类的末端优化,就是不清醒的表现。

avatar
r*s
20
以前别人也是这样教我的,不过是我对细节地方钻研的不够透彻

【在 e******e 的大作中提到】
: 最好是搞清楚你使用的complier的特性。
: ASM的效率是最高的,不过麻烦,可以用C/C++高级语言来做测试,
: 编一些测试代码,对照来调试,看看翻译的ASM是否高效,选择出适合你这个平台的编
: 程习惯。
: 如果使用时间足够长,你可以用C/C++编制出近乎ASM效率的程序。
: 要提高效率,必须在每一个细节处做改进,最后你才能获得足够的余量实现所谓“不可
: 能”完成的任务。
: real-time system的效率还是非常重要的。。。

avatar
b*a
21
compiler的优化有时间好像也会有问题。
我以前用analog的 visual DSP在他自己的DSP上跑大规模的模拟程序,算法的核心就是
矩阵的LU变换。这个东西得C语言的算法已经很成熟了,但是在DSP上如果不做优化的话
,基本上不能用,速度太慢了。但是如果用comipler的优化选项打开,选择优化到最少
的运行时间,编译好的程序跑出来的结果总是不对,一个4x4的矩阵的LU分解都算不对
,不知道为什么。
后来就是自己手工写asm码,loop unrolling加上DSP支持的SIMD,速度差不多提高了20
多倍。

【在 e******e 的大作中提到】
: 最好是搞清楚你使用的complier的特性。
: ASM的效率是最高的,不过麻烦,可以用C/C++高级语言来做测试,
: 编一些测试代码,对照来调试,看看翻译的ASM是否高效,选择出适合你这个平台的编
: 程习惯。
: 如果使用时间足够长,你可以用C/C++编制出近乎ASM效率的程序。
: 要提高效率,必须在每一个细节处做改进,最后你才能获得足够的余量实现所谓“不可
: 能”完成的任务。
: real-time system的效率还是非常重要的。。。

avatar
e*e
22
不同开发平台的complier特性是不同的,特别是嵌入式系统,每个厂商水平不一,风格
不同,规则也不同。尽管基本的编译原理相同,但是细节处理上却非常不同。
要想开发好一个实时嵌入式系统,必须做到两点:第一,对你所使用的语言了解;第二
,对你所使用的平台的深入理解。
对照着你的高级语言代码,仔细研究编译后的list code,甚至是binary code,是成为
高手不可或缺的重要步骤。
avatar
r*s
23
牛,不过我还没法看懂list code和binary code

【在 e******e 的大作中提到】
: 不同开发平台的complier特性是不同的,特别是嵌入式系统,每个厂商水平不一,风格
: 不同,规则也不同。尽管基本的编译原理相同,但是细节处理上却非常不同。
: 要想开发好一个实时嵌入式系统,必须做到两点:第一,对你所使用的语言了解;第二
: ,对你所使用的平台的深入理解。
: 对照着你的高级语言代码,仔细研究编译后的list code,甚至是binary code,是成为
: 高手不可或缺的重要步骤。

avatar
r*s
24
都是高手啊

20

【在 b******a 的大作中提到】
: compiler的优化有时间好像也会有问题。
: 我以前用analog的 visual DSP在他自己的DSP上跑大规模的模拟程序,算法的核心就是
: 矩阵的LU变换。这个东西得C语言的算法已经很成熟了,但是在DSP上如果不做优化的话
: ,基本上不能用,速度太慢了。但是如果用comipler的优化选项打开,选择优化到最少
: 的运行时间,编译好的程序跑出来的结果总是不对,一个4x4的矩阵的LU分解都算不对
: ,不知道为什么。
: 后来就是自己手工写asm码,loop unrolling加上DSP支持的SIMD,速度差不多提高了20
: 多倍。

avatar
k*f
25
嵌入式的cpu一般比较简单的,手写汇编还是可以的。
我曾经在intel cpu上手写过汇编,调用mmx,sse指令加速一个算法,
mmd,比直接用c编译出来差不少的

20

【在 b******a 的大作中提到】
: compiler的优化有时间好像也会有问题。
: 我以前用analog的 visual DSP在他自己的DSP上跑大规模的模拟程序,算法的核心就是
: 矩阵的LU变换。这个东西得C语言的算法已经很成熟了,但是在DSP上如果不做优化的话
: ,基本上不能用,速度太慢了。但是如果用comipler的优化选项打开,选择优化到最少
: 的运行时间,编译好的程序跑出来的结果总是不对,一个4x4的矩阵的LU分解都算不对
: ,不知道为什么。
: 后来就是自己手工写asm码,loop unrolling加上DSP支持的SIMD,速度差不多提高了20
: 多倍。

avatar
e*e
26
最简单的方法:利用debug单步调试,观察cpu每个寄存器,在你程序运行时的变化情况
,看多了,你就有感觉了。
你玩过游戏,改过什么经验,物品,money等等,不是也是要研究binary code吗?一回
事。
对照着你使用的dsp/mcu的asm指令表去研究研究,对于你要关注的部分代码看明白就ok
,不一定要全部研究,也不一定要你自己去写。只是要建立高级语言如c/c++到目标代
码的一种影射。也就是说写出的c语言,脑子里就能反映出cpu寄存器怎么run的,
binary code是怎么分配,整个程序从头到尾怎么跑得。当然这个需要时间和经验的积
累。
avatar
r*s
27
改游戏是很久以前了,玩仙剑的时候,你写的真好,非常感谢
我现在用的是real-time PC + DSP,写的程序目前感觉还没出现什么大问题
可能是现在实现的功能和算法简单的缘故吧,什么时候也用你的方法试一试

ok

【在 e******e 的大作中提到】
: 最简单的方法:利用debug单步调试,观察cpu每个寄存器,在你程序运行时的变化情况
: ,看多了,你就有感觉了。
: 你玩过游戏,改过什么经验,物品,money等等,不是也是要研究binary code吗?一回
: 事。
: 对照着你使用的dsp/mcu的asm指令表去研究研究,对于你要关注的部分代码看明白就ok
: ,不一定要全部研究,也不一定要你自己去写。只是要建立高级语言如c/c++到目标代
: 码的一种影射。也就是说写出的c语言,脑子里就能反映出cpu寄存器怎么run的,
: binary code是怎么分配,整个程序从头到尾怎么跑得。当然这个需要时间和经验的积
: 累。

avatar
r*s
28
不错!

【在 k****f 的大作中提到】
: 嵌入式的cpu一般比较简单的,手写汇编还是可以的。
: 我曾经在intel cpu上手写过汇编,调用mmx,sse指令加速一个算法,
: mmd,比直接用c编译出来差不少的
:
: 20

avatar
p*s
29
听着真是很强。。。。
我不会用汇编, 所以现在写个SDIO的driver, 要提高效率经常用的笨办法,就是
拿示波器去看底下的包是怎么收发的。

【在 e******e 的大作中提到】
: 最简单的方法:利用debug单步调试,观察cpu每个寄存器,在你程序运行时的变化情况
: ,看多了,你就有感觉了。
: 你玩过游戏,改过什么经验,物品,money等等,不是也是要研究binary code吗?一回
: 事。
: 对照着你使用的dsp/mcu的asm指令表去研究研究,对于你要关注的部分代码看明白就ok
: ,不一定要全部研究,也不一定要你自己去写。只是要建立高级语言如c/c++到目标代
: 码的一种影射。也就是说写出的c语言,脑子里就能反映出cpu寄存器怎么run的,
: binary code是怎么分配,整个程序从头到尾怎么跑得。当然这个需要时间和经验的积
: 累。

avatar
d*l
30
有时是不是也要考虑流水线和循环操作中前后数据的相关性啊.
人工去考虑和安排操作和指令来配合pipeline应当比compiler自己去优化更好吧。
avatar
b*a
31
this needs more time, experience and knowledge of CPU hardware.
As I know, a optimised ASM FIR algorithm can eliminate almost all the stalls.
This is many many times faster than written in C.

【在 d*****l 的大作中提到】
: 有时是不是也要考虑流水线和循环操作中前后数据的相关性啊.
: 人工去考虑和安排操作和指令来配合pipeline应当比compiler自己去优化更好吧。

avatar
e*e
32
ASM的本质就是数字信号0,1,单个语句或者很小功能实现ASM确实比C好那么一点点,
但是考虑的系统的设计复杂度,可读性,可靠性,可维护性等等,C和ASM 的混合编程
就显得非常有优势。
某些C代码经过complier翻译后,效率会低很多,可以使用嵌入asm代码的方式来进行改
善。
经过优化的C+ASM混合编程方式,完全可以到达任何优化的ASM的效率。对于稍大一些的
系统,比如代码超过1w行,你很难去将这样规模的ASM代码优化的很好。据说的东西,
都不靠铺,得自己做了才知道深浅。
通常的做法使用C语言来做整体框架设计,在某些部分用嵌入ASM的方法处理。
这样程序总体上可以可以享受到高级语言的设计方便的好处,同时又可以保持高效率。
avatar
G*n
33
memcpy会不会快一点

【在 r******s 的大作中提到】
: 不错!
avatar
x*u
34
在程序里面到处优化是大忌,找出哪里真正该优化,比怎么优化程序重要100倍。

【在 r******s 的大作中提到】
: 不错!
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。