Redian新闻
>
c++的一个诡异问题,高手请进
avatar
c++的一个诡异问题,高手请进# Programming - 葵花宝典
M*H
1
妈妈6月29号乘坐从北京到EWR的UA88航班。
请问有没有行程一致的,一路上可以聊天解闷, 照应照应.
谢谢!
avatar
u*u
2
宝宝才10个多月,今天带去检查眼睛,大夫说孩子有近视了,只能看清1米远。虽然不
是高度近视,可是宝宝还那么小,以后怎么办啊?我和宝宝爸爸都是近视,看来遗传给
宝宝了。求妈妈们给点建议。多谢了!!现在感觉好痛苦。
最近一直因为孩子眼睛的事情抑郁大哭,被网上的内容吓倒了,很小就戴眼镜的长大都
可以上2000度了,而且现在眼睛手术都有风险。请大家多给点建议和安慰。比如美国有
没有穴位按摩治疗眼睛之类的。多谢!
avatar
k*9
3
背景:
我的J1自始至终没有办waiver。我目前是F1,五月份毕业。
情况叙述:
我用J2入学读书,中间回了国,签了F1入境。后两学期 full time 的F1身份。现
在准备申请OPT。
问题:
1. 请问,我没有waiver记录,是否影响我目前申请OPT?
2. 请问,OPT 转 H1B时,是否必须waiver掉我从前的J2历史才行?
一直没当回事,以为回国转F1后,就自动waiver了。
请知情人指教,谢谢。
avatar
B*n
4
去年圣诞买的bareroot开花了。
Pink Jasmine
四季盛开的lavender
Pooppy
橘子花开
柠檬
樱桃
菜地发芽了
avatar
f*g
5
1.Chase 力作 continental onepass信用卡 首笔消费就送30000miles(无金额限制)+
$50免费bonus 最新优惠 信用卡首选
http://blog.sina.com.cn/bankbonus
最近申请chase家的这个信用卡会弹出一个页面,写着Before you go…We hope you
will reconsider 难不成他们家最近被人拿太多这个免费机票了 不用对它客气,
赶紧点击Return&Apply, 拿到落袋为安。
http://blog.sina.com.cn/bankbonus
2. Free $100 + Extra $60 Cashback Bonus from Discover More® Card 最适合
中美间使用的多彩卡片Discover信用卡 11/15-12/31双倍holiday bonus
http://blog.sina.com.cn/bankbonus
。。。。都有详尽的每个步骤申请和使用兑换积分的细节和相应链接,请收藏转发
http://blog.sina.com.cn/bankbonus
avatar
N*K
6
编译器 vs2013 release模式
Tempfunction 计算一个数然后输出 N 控制计算复杂度
我用function pointer :TempfunctionPtr = &Tempfunction
然后比较 直接调用函数Tempfunction 和 通过指针间接调用函数
结果很诡异
N=1000 , Tempfunction_time=1, TempfunctionPtr_time=2;
N=2000 , Tempfunction_time=2, TempfunctionPtr_time=6;
N=4000 , Tempfunction_time=4, TempfunctionPtr_time=11;
N=8000 , Tempfunction_time=8, TempfunctionPtr_time=21;
TempfunctionPtr_time - Tempfunction_time 应该是常数
N并不改变 函数调用的次数
=================
#include
#include
void Tempfunction(double& a, int N)
{
a = 0;
for (double i = 0; i < N; ++i)
{
a += i;
}
}
int main()
{
int N = 1000; // from 1000 to 8000
double Value = 0;
auto t0 = std::time(0);
for (int i = 0; i < 1000000; ++i)
{
Tempfunction(Value, N);
}
auto t1 = std::time(0);
auto Tempfunction_time = t1-t0;
std::cout << "Tempfunction_time = " << Tempfunction_time << '\n';
auto TempfunctionPtr = &Tempfunction;
Value = 0;
t0 = std::time(0);
for (int i = 0; i < 1000000; ++i)
{
(*TempfunctionPtr)(Value, N);
}
t1 = std::time(0);
auto TempfunctionPtr_time = t1-t0;
std::cout << "TempfunctionPtr_time = " << TempfunctionPtr_time << '\n';
std::system("pause");
}
avatar
u*u
7
宝宝才10个多月,今天带去检查眼睛,大夫说孩子有近视了,只能看清1米远。虽然不
是高度近视,可是宝宝还那么小,以后怎么办啊?我和宝宝爸爸都是近视,看来遗传给
宝宝了。求妈妈们给点建议。多谢了!!现在感觉好痛苦。
最近一直因为孩子眼睛的事情抑郁大哭,被网上的内容吓倒了,很小就戴眼镜的长大都
可以上2000度了,而且现在眼睛手术都有风险。请大家多给点建议和安慰。比如美国有
没有穴位按摩治疗眼睛之类的。多谢!
avatar
r*y
8
j1也没waiver吗?你是j2不能自己单独Waiver吧,得跟你lg/lp一起,我觉得啊

【在 k********9 的大作中提到】
: 背景:
: 我的J1自始至终没有办waiver。我目前是F1,五月份毕业。
: 情况叙述:
: 我用J2入学读书,中间回了国,签了F1入境。后两学期 full time 的F1身份。现
: 在准备申请OPT。
: 问题:
: 1. 请问,我没有waiver记录,是否影响我目前申请OPT?
: 2. 请问,OPT 转 H1B时,是否必须waiver掉我从前的J2历史才行?
: 一直没当回事,以为回国转F1后,就自动waiver了。
: 请知情人指教,谢谢。

avatar
T*4
9
不错
avatar
n*t
10
高手没空,蓝翔技校试着回答:
间接调用开销稍大,不过貌似不该差那么多

【在 N******K 的大作中提到】
: 编译器 vs2013 release模式
: Tempfunction 计算一个数然后输出 N 控制计算复杂度
: 我用function pointer :TempfunctionPtr = &Tempfunction
: 然后比较 直接调用函数Tempfunction 和 通过指针间接调用函数
: 结果很诡异
: N=1000 , Tempfunction_time=1, TempfunctionPtr_time=2;
: N=2000 , Tempfunction_time=2, TempfunctionPtr_time=6;
: N=4000 , Tempfunction_time=4, TempfunctionPtr_time=11;
: N=8000 , Tempfunction_time=8, TempfunctionPtr_time=21;
: TempfunctionPtr_time - Tempfunction_time 应该是常数

avatar
z*g
11
endmyopia.org

【在 u*****u 的大作中提到】
: 宝宝才10个多月,今天带去检查眼睛,大夫说孩子有近视了,只能看清1米远。虽然不
: 是高度近视,可是宝宝还那么小,以后怎么办啊?我和宝宝爸爸都是近视,看来遗传给
: 宝宝了。求妈妈们给点建议。多谢了!!现在感觉好痛苦。
: 最近一直因为孩子眼睛的事情抑郁大哭,被网上的内容吓倒了,很小就戴眼镜的长大都
: 可以上2000度了,而且现在眼睛手术都有风险。请大家多给点建议和安慰。比如美国有
: 没有穴位按摩治疗眼睛之类的。多谢!

avatar
r*y
12
你到底j1还是2啊 晕了

【在 k********9 的大作中提到】
: 背景:
: 我的J1自始至终没有办waiver。我目前是F1,五月份毕业。
: 情况叙述:
: 我用J2入学读书,中间回了国,签了F1入境。后两学期 full time 的F1身份。现
: 在准备申请OPT。
: 问题:
: 1. 请问,我没有waiver记录,是否影响我目前申请OPT?
: 2. 请问,OPT 转 H1B时,是否必须waiver掉我从前的J2历史才行?
: 一直没当回事,以为回国转F1后,就自动waiver了。
: 请知情人指教,谢谢。

avatar
f*e
13
小园花乱飞,迢递送斜晖。

【在 B****n 的大作中提到】
: 去年圣诞买的bareroot开花了。
: Pink Jasmine
: 四季盛开的lavender
: Pooppy
: 橘子花开
: 柠檬
: 樱桃
: 菜地发芽了

avatar
n*t
14
你可以 O0 试试看

【在 N******K 的大作中提到】
: 编译器 vs2013 release模式
: Tempfunction 计算一个数然后输出 N 控制计算复杂度
: 我用function pointer :TempfunctionPtr = &Tempfunction
: 然后比较 直接调用函数Tempfunction 和 通过指针间接调用函数
: 结果很诡异
: N=1000 , Tempfunction_time=1, TempfunctionPtr_time=2;
: N=2000 , Tempfunction_time=2, TempfunctionPtr_time=6;
: N=4000 , Tempfunction_time=4, TempfunctionPtr_time=11;
: N=8000 , Tempfunction_time=8, TempfunctionPtr_time=21;
: TempfunctionPtr_time - Tempfunction_time 应该是常数

avatar
k*9
15
我和我的J1(lp)一起来的美国,那是我是J2身份。然后,我我申请了学校,用J2身份
读了了书。1年前,我回国,转签成F1,继续回来读书。现在快毕业了。
目前,我的LP还是J1 身份,但她一直没有waiver过。
我的问题是:
1. 因为,我以前的J2身份没有waiver过,我现在以F1身份申请OPT,是否可以?
2. 假设我符合申请OPT,以后再转H1B时,时候还是要waiver以前的J2历史先?
avatar
a*a
16
赞!
avatar
N*K
17
开销应该是常数 和函数具体内容(N)无关
太诡异了

【在 n*****t 的大作中提到】
: 高手没空,蓝翔技校试着回答:
: 间接调用开销稍大,不过貌似不该差那么多

avatar
r*y
18
1 不清楚 既然f1成 opt应该也无妨
2 让你lp赶紧Waiver啊 除非你们想回国 你要是不薄厚 肯定得先Waiver 薄厚可以j1那
也无所谓了

【在 k********9 的大作中提到】
: 我和我的J1(lp)一起来的美国,那是我是J2身份。然后,我我申请了学校,用J2身份
: 读了了书。1年前,我回国,转签成F1,继续回来读书。现在快毕业了。
: 目前,我的LP还是J1 身份,但她一直没有waiver过。
: 我的问题是:
: 1. 因为,我以前的J2身份没有waiver过,我现在以F1身份申请OPT,是否可以?
: 2. 假设我符合申请OPT,以后再转H1B时,时候还是要waiver以前的J2历史先?

avatar
n*2
19
茉莉還是漂亮哈~
avatar
n*t
20
神马系统?运行时间长了,被中断次数多了?N 放大 100 倍看看?

【在 N******K 的大作中提到】
: 开销应该是常数 和函数具体内容(N)无关
: 太诡异了

avatar
k*9
21
谢谢楼上快速的回答。
并期待更多回答。
另外,我打算明天去国际生办公室问问。
avatar
y*l
22
色彩真漂亮,纯赞叹
avatar
a*e
23
编译器的问题。用 clang++ 试了一下,两个时间是一样的。
如果用 clang++ -O2 的化,还需要打印 Value 的值,否则整个计算被忽略掉了。
avatar
s*u
24
Get instructions from local USCIS officer through Infopass, see top 3 post.

【在 k********9 的大作中提到】
: 背景:
: 我的J1自始至终没有办waiver。我目前是F1,五月份毕业。
: 情况叙述:
: 我用J2入学读书,中间回了国,签了F1入境。后两学期 full time 的F1身份。现
: 在准备申请OPT。
: 问题:
: 1. 请问,我没有waiver记录,是否影响我目前申请OPT?
: 2. 请问,OPT 转 H1B时,是否必须waiver掉我从前的J2历史才行?
: 一直没当回事,以为回国转F1后,就自动waiver了。
: 请知情人指教,谢谢。

avatar
y*8
25
充满诗情画意,超赞!
avatar
n*t
26
艾玛,这编译器胆子够大的 LOL

【在 a*****e 的大作中提到】
: 编译器的问题。用 clang++ 试了一下,两个时间是一样的。
: 如果用 clang++ -O2 的化,还需要打印 Value 的值,否则整个计算被忽略掉了。

avatar
i*t
27
搞不懂为啥j2也要受限2年,人家来探亲不小心就被弄j2,还不让单独豁免。估计2019
表格制作人为了方便于是背面都弄成了一样。
avatar
w*r
28
boston is in ca? lol
avatar
a*e
29
其实这个没什么,只要能够确定(1)循环必然终止(2)无副作用(3)无返回值,那么这段
代码属于 dead code。常见的编译器都有这么一个 pass,功能差不多。

【在 n*****t 的大作中提到】
: 艾玛,这编译器胆子够大的 LOL
avatar
s*u
30
J2 is dependent of J1, also it is subject to 212(e) according to Law.

2019

【在 i*****t 的大作中提到】
: 搞不懂为啥j2也要受限2年,人家来探亲不小心就被弄j2,还不让单独豁免。估计2019
: 表格制作人为了方便于是背面都弄成了一样。

avatar
l*a
31
哎,看得我也想种柠檬了。真好
avatar
a*n
32
用volatile double就一样了。第一种情况可能优化的时候用了register,因为a的地址
在编译的时候就知道了吧。
avatar
i*t
33
看来美国法律也是讲究株连九族的,包括不懂事的小孩也统统要跟J1牵连,例如J2小孩
18岁,然后在美国转F1读书,最后毕业找H1,还得豁免
这个株连从最初的赴美签证填表就已经表现出来,那时需要填父母和家属,不明白一个
签证管家属什么事情?

【在 s**u 的大作中提到】
: J2 is dependent of J1, also it is subject to 212(e) according to Law.
:
: 2019

avatar
i*e
34
您老在 MA 还是 CA
avatar
w*e
35
this is because in release mode, the first function call is in-lined, and
the second one to call the function pointer is not in-lined by vs compiler.

【在 N******K 的大作中提到】
: 编译器 vs2013 release模式
: Tempfunction 计算一个数然后输出 N 控制计算复杂度
: 我用function pointer :TempfunctionPtr = &Tempfunction
: 然后比较 直接调用函数Tempfunction 和 通过指针间接调用函数
: 结果很诡异
: N=1000 , Tempfunction_time=1, TempfunctionPtr_time=2;
: N=2000 , Tempfunction_time=2, TempfunctionPtr_time=6;
: N=4000 , Tempfunction_time=4, TempfunctionPtr_time=11;
: N=8000 , Tempfunction_time=8, TempfunctionPtr_time=21;
: TempfunctionPtr_time - Tempfunction_time 应该是常数

avatar
k*9
36
去问过了学校国际办,OPT 可以无障碍申请。但是要H1B,得把J2的历史豁免掉。
谢谢各位回答。
avatar
B*n
37
CA ya

【在 i*******e 的大作中提到】
: 您老在 MA 还是 CA
avatar
d*u
38
The difference is from inline optimization of the compiler.
When the function is inlined, the compiler has more information and
opportunities to optimize the code. At inlining, the compiler can emit
different code for the inner most loop body a+=i; .
On my VS2013, a+=i is as follows in Tempfunction():
movsd xmm0, QWORD PTR [eax] // load a
addsd xmm0, xmm1 // a += i
addsd xmm1, xmm2 // i += 1
movsd QWORD PTR [eax], xmm0 // save a
comisd xmm3, xmm1 // cmp N, i
ja SHORT [email protected]
While in main(), when inlined, a+=i is like:
movapd xmm0, xmm1 // temp = i
addsd xmm1, xmm3 // i += 1
addsd xmm2, xmm0 // a += temp
comisd xmm4, xmm1 // cmp N, i
ja SHORT [email protected]
You can see that the difference is that in Tempfunction() has to load and
save "a" for every iteration. In main() after inlining the compiler knows
that "a" is not used otherwise, so it is free to use a register for all
iterations, and only save to memory when the loop is done.
The execution time of non-inline code is 1000000*(N*T1+T2), the inline code
1000000*(N*T3+T4).
If T1==T3, the difference will be 1000000*(T2-T4), which does not depend on
N. This assumes the only difference is from the function call overhead. This
is obviously not true according to your timing data.
The actual difference has two parts: 1000000*N*(T1-T3) + 1000000*(T2-T4).
Given your timing data, it seems that T1~=2.5e-9, T2~=1e-6, T3~=1e-9, T4~=0.
The load/save part is a big deal; it roughly accounts for 1.5e-9, making non
-inlined version 150% slower for the inner loop body.
PS: If the function chooses to use a pass-by-value "a" then returns "a", the
loop body will not have the load/save overhead.
PS2: The code should use int i=0 as the loop variable in Tempfunction() in
this example. Using double i prevents the compiler from using loop unrolling
, because double is not exact to represent arbitrary integer and the
compiler has to be faithful to this choice that the code writer decides to
take. Now if you use int i, VS2013 tries hard to unroll the loop and creates
very complex assembly code that also handles corner cases for N that is not
a multiple of chosen loop unrolling factor.
avatar
B*n
39
吃了包子不好意思,今天加拍了几张:)

【在 B****n 的大作中提到】
: 去年圣诞买的bareroot开花了。
: Pink Jasmine
: 四季盛开的lavender
: Pooppy
: 橘子花开
: 柠檬
: 樱桃
: 菜地发芽了

avatar
N*K
40
多谢 这个解释详细
关于:
PS: If the function chooses to use a pass-by-value "a" then returns "a", the
loop body will not have the load/save overhead.
我测试过 如果这样的话 两种调用方式的时间是一样的

【在 d*****u 的大作中提到】
: The difference is from inline optimization of the compiler.
: When the function is inlined, the compiler has more information and
: opportunities to optimize the code. At inlining, the compiler can emit
: different code for the inner most loop body a+=i; .
: On my VS2013, a+=i is as follows in Tempfunction():
: movsd xmm0, QWORD PTR [eax] // load a
: addsd xmm0, xmm1 // a += i
: addsd xmm1, xmm2 // i += 1
: movsd QWORD PTR [eax], xmm0 // save a
: comisd xmm3, xmm1 // cmp N, i

avatar
N*K
41
修改为如下
void Tempfunction(double& a, int N)
{
a = 0;
double b = 0;
for (double i = 0; i < N; ++i)
{
b += i;
//a += i;
}
a = b;
}
结果
N=1000 , Tempfunction_time=1, TempfunctionPtr_time=1;
N=2000 , Tempfunction_time=2, TempfunctionPtr_time=2;
N=4000 , Tempfunction_time=4, TempfunctionPtr_time=4;
N=8000 , Tempfunction_time=8, TempfunctionPtr_time=8;

【在 N******K 的大作中提到】
: 编译器 vs2013 release模式
: Tempfunction 计算一个数然后输出 N 控制计算复杂度
: 我用function pointer :TempfunctionPtr = &Tempfunction
: 然后比较 直接调用函数Tempfunction 和 通过指针间接调用函数
: 结果很诡异
: N=1000 , Tempfunction_time=1, TempfunctionPtr_time=2;
: N=2000 , Tempfunction_time=2, TempfunctionPtr_time=6;
: N=4000 , Tempfunction_time=4, TempfunctionPtr_time=11;
: N=8000 , Tempfunction_time=8, TempfunctionPtr_time=21;
: TempfunctionPtr_time - Tempfunction_time 应该是常数

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