Redian新闻
>
写code返回2个数较大的一个
avatar
w*s
2
rt
avatar
h*e
3
不错,学习了。 不过, 工程里用的多么,这种写法我是头一次见到。
avatar
y*u
4
max(a,b)

【在 w********s 的大作中提到】
: rt
avatar
h*e
5
成都哥你看看他给的open source 视频,据说上面的方法会比较快。因为不用branch.
你怎么觉得的阿。

【在 y**********u 的大作中提到】
: max(a,b)
avatar
m*2
6
至少在arm上面 (a>b?a:b) 比这个快。

【在 w********s 的大作中提到】
: rt
avatar
s*i
7
这种题很无聊。
avatar
h*e
8
展开说说呢,大学的时候就记得老师说i+++++++之类的题目很无聊,结果一个当时的本
科cs师兄,还和一个cs研究生因为这个++吵了一架,居然都到要见面约架的地步了~~

【在 s***i 的大作中提到】
: 这种题很无聊。
avatar
z*e
9
纯粹无聊,有这功夫不如去弄点程序,现在行情这么好
app成功一个,就发财了,泡沫来的时候抓紧冲浪
等泡沫退了之后再吵不迟



【在 h*******e 的大作中提到】
: 展开说说呢,大学的时候就记得老师说i+++++++之类的题目很无聊,结果一个当时的本
: 科cs师兄,还和一个cs研究生因为这个++吵了一架,居然都到要见面约架的地步了~~

avatar
h*e
10
。。。。app成功很容易么。。我看我们系的中国学生大牛在FLG的业余自己开公司做
app做了2年了 游戏加应用都没做出来什么呢,产品都有但是估计不怎么赚钱,后来全
职加入别人的公司做cofounder了。。新公司不是继续做app的。

【在 z****e 的大作中提到】
: 纯粹无聊,有这功夫不如去弄点程序,现在行情这么好
: app成功一个,就发财了,泡沫来的时候抓紧冲浪
: 等泡沫退了之后再吵不迟
:
:

avatar
r*k
11
这个算是奇技淫巧了
不过代码可读性太差了吧
而且效率不比a>b?a:b;
高啊

【在 w********s 的大作中提到】
: 没看过有人写得出来?
avatar
w*s
12
cpu是流水的,如果branch预测失败要排空的话,就是16个cycle

【在 r*******k 的大作中提到】
: 这个算是奇技淫巧了
: 不过代码可读性太差了吧
: 而且效率不比a>b?a:b;
: 高啊

avatar
r*k
13
这个不懂
你的意思是说,还是这个诡异的方法更快?
那应该写成library让大家用,不用每个人写出这种后人看不懂的东东
看了眼java的实现
不过java是跑在jvm上的,没啥可比性
/**
* Returns the greater of two {@code int} values. That is, the
* result is the argument closer to the value of
* {@link Integer#MAX_VALUE}. If the arguments have the same value,
* the result is that same value.
*
* @param a an argument.
* @param b another argument.
* @return the larger of {@code a} and {@code b}.
*/
public static int max(int a, int b) {
return (a >= b) ? a : b;
}

【在 w********s 的大作中提到】
: cpu是流水的,如果branch预测失败要排空的话,就是16个cycle
avatar
w*s
14
java一向慢的呀
http://gcc.gnu.org/ml/libstdc++/2003-11/msg00295.html

【在 r*******k 的大作中提到】
: 这个不懂
: 你的意思是说,还是这个诡异的方法更快?
: 那应该写成library让大家用,不用每个人写出这种后人看不懂的东东
: 看了眼java的实现
: 不过java是跑在jvm上的,没啥可比性
: /**
: * Returns the greater of two {@code int} values. That is, the
: * result is the argument closer to the value of
: * {@link Integer#MAX_VALUE}. If the arguments have the same value,
: * the result is that same value.

avatar
W*y
15
哈哈真的假的



【在 h*******e 的大作中提到】
: 展开说说呢,大学的时候就记得老师说i+++++++之类的题目很无聊,结果一个当时的本
: 科cs师兄,还和一个cs研究生因为这个++吵了一架,居然都到要见面约架的地步了~~

avatar
r*k
16
神奇啊,受教了
谢谢
楼主share一下你看的啥东西吧
不过这么底层的优化,
工作中碰到的机会太少了

【在 w********s 的大作中提到】
: java一向慢的呀
: http://gcc.gnu.org/ml/libstdc++/2003-11/msg00295.html

avatar
S*A
17
这些都是老掉牙的假设了。
现在的 CPU 有很多技巧,这种 ugly hack 已经完全没有现实意义了。
其中一个是,现在 CPU 有 conditional mov instruction。
a > b ? a : b 这种实现完全可以用没有branch 来实现的,
而且常见的 compiler 都支持了。
例如这个程序:
int d(int a, int b)
{
return a >= b? a : b;
}
$ gcc -O2 -c -S /tmp/d.c
$ cat d.s
.LFB0:
.cfi_startproc
cmpl %esi, %edi
movl %esi, %eax
cmovge %edi, %eax
ret
看到没有, gcc 自己就会用 cmov instruction。
所以 branch predict 那个理由在现在的机器就不成立。

【在 w********s 的大作中提到】
: cpu是流水的,如果branch预测失败要排空的话,就是16个cycle
avatar
S*A
18
看我上一篇,这个只能算丑化和慢化,
优化是算不上的。

【在 r*******k 的大作中提到】
: 神奇啊,受教了
: 谢谢
: 楼主share一下你看的啥东西吧
: 不过这么底层的优化,
: 工作中碰到的机会太少了

avatar
w*s
19
cmov也要6个cycle了呀,看多慢

【在 S*A 的大作中提到】
: 这些都是老掉牙的假设了。
: 现在的 CPU 有很多技巧,这种 ugly hack 已经完全没有现实意义了。
: 其中一个是,现在 CPU 有 conditional mov instruction。
: a > b ? a : b 这种实现完全可以用没有branch 来实现的,
: 而且常见的 compiler 都支持了。
: 例如这个程序:
: int d(int a, int b)
: {
: return a >= b? a : b;
: }

avatar
S*A
20
不知道不可怕,误导别人就不好了。
你的 6 cycle CMOV 是什么年代的机器啊?
要不要我来教你如何看 instruction cycle 啊?
http://www.intel.com/content/dam/www/public/us/en/documents/man
翻到 appendix C -27 页。
CMOVcc 是 2 cycle.
CMOVBE/NBE/NA 是 3 cycle。
对比一下两个实现:
return a >= b? a : b;
cmpl %esi, %edi
movl %esi, %eax
cmovge %edi, %eax
return b ^((a^b) & -(a < b));
xorl %eax, %eax
cmpl %esi, %edi
setl %al
xorl %esi, %edi
negl %eax
andl %edi, %eax
xorl %esi, %eax
就算 cmovge 是 3, 不是 1,差别是 2 ,
你的那个实现里面多了止不止 2 个instruction?
你的实现整整多了 4 个 instruction.
把代码写那么难懂,然后还要更慢,图什么啊,就是
为了 show off ??

【在 w********s 的大作中提到】
: cmov也要6个cycle了呀,看多慢
avatar
g*y
21
现在的游戏计算工具也不需要自己写了吧

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