作者Coyote (新生活即将开始)
看板CSSE
标题Re: [问题] 随便Java写的程式在core duo一定比单核 …
时间Sat Jul 7 13:13:58 2007
※ 引述《leicheong (睡魔)》之铭言:
: ※ 引述《byshen (sby)》之铭言:
: : 是有可能会比较快,有不少 paper 有在研究 multi-core 环境下的 JVM,
: : 例如在没用到的 core 执行一个 helper thread 去做 data prefetching
: : 来降低 cache miss rate,
: 这是真的.
: : 或者想办法把一个 loop 拆成好几个 threads 去执行,
: : 例如一个 for i = 1 to N 的 loop,可以变成 N 个 threads 这样。
: 这个不可以啊...
: 例如:
: String temp = "";
: for (i=1;i<=N;i++)
: {
: temp += "*";
: System.out.println(temp);
: }
: 这个分拆在不同CPU跑的话结果就可能不一样了. 可是要跨CPU做state sync.
: 的话, 那不是跑得更慢吗?
提供个no side effect特性做opt的例子
int sum = 0;
for(i=1; i<=N; i++) {
sum += func(i);
}
如果这是在functional lang.
很好做最佳化
每一个func都可以带入一个不同的i 分给不同的cpu去跑 最後在加到sum就好
因为functional lang. 的func一定是no side effect的
它的compiler或vm 可以不费啥功夫就做这个决定
(当然啦 func lang. 多半是没loop的 只是写个例子 表达我的意思)
但是在c里 这就很难说
compiler要去确定呼叫的这个func会不会有side effect
如果没有 那也可以如上例般去做opt
所以这样functional lang. 就比较强嘛?
其实没有
如果是个知道这个特性的programmer
用C一样也可以做到啊
在设计时就让func没有side effect
可以利用openMP放一些hint给compiler
一样有做到多cpu的最佳化
在我的感觉里
要比performance 程式语言比较像是个辅助工具
因为特性不同 所以有的可以辅助比较多
让你可以照着它的规定做 就可以达到能做opt的程式出现
所以 强者还是强者啦 只要是用他精通的语言 是不会输的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.42.162
1F:推 revivalworld:若是 func 里面有 static 变数呢...? 07/07 15:20
2F:推 Coyote:那就是side effect 这是c的compiler比较难做这种opt的原因 07/07 15:29
3F:→ Coyote:static和global变数都很可能有side effect 07/07 15:31
4F:→ Coyote:在func. lang.里就 没这两种东西 func是1 to 1 mapping 07/07 15:32
5F:推 ephesians:其实你举的例子若不是FL,也没秀出side effect... 07/07 23:47
6F:推 Coyote:你怎麽知道C func里有没有static or global varible? 07/08 01:58
7F:→ Coyote:我都没提供func的内容了 你怎麽看的出来的? 07/08 01:59
8F:推 ephesians:所以才说没有秀;你不能写个符号就要人想像一切 07/08 10:02
9F:推 Coyote:这就是FL的优势啊 不用知道内容就可以最决定 c就不行啦 07/08 12:32
10F:→ Coyote:我想这点我上面的描述应该很清楚了 07/08 12:33
11F:推 ephesians:但请注意我所提的是指non-FL 07/08 17:03
12F:→ ephesians:没秀就没秀,承认就好了,不必口头解释那麽多 07/08 17:05
13F:推 godfat:我不觉得那需要写出来,答案很明确吧 07/08 17:16
14F:推 Coyote:我是故意不写的啊 有人有看出来 有人看不出来 XD 07/08 18:58