由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Computation版 - 请教大家c++ array
相关主题
icc complier is expensive yar~~真得很想听听别人的意见。。。
Fortran code optimization咨询下linux/window系统下c++ 及CS与就业关系 谢谢
Fortran 和 C的区别? (转载)计算复数和实数的cpu时间问题
谁能推荐一个c++ optimization的librarypls help a list of global optimization
[Job Opening] 3D Engine Developer - Game Physics and Low Level OptimizationRe: pls help a list of optimization methods
matlab改成C++,还用了号称史上最快的fftw,结果慢了一倍老板这个Idea可行么?
help: optimization with stochastic programming (转载)Introduction to Global Optimization
Job Opening in SynopsysStatistical Global Optimization Algorithms
相关话题的讨论汇总
话题: 200话题: fortran话题: array话题: double话题: 2000
进入Computation版参与讨论
1 (共1页)
x*****u
发帖数: 3419
1
大家都用什么啊。自带的array太差,大一点就crash。特别是多维的,跟fortran没法比
啊。
请教大家都用些什么?盼复!
h***o
发帖数: 539
2
are you sure the crash is due to c++'s array?

【在 x*****u 的大作中提到】
: 大家都用什么啊。自带的array太差,大一点就crash。特别是多维的,跟fortran没法比
: 啊。
: 请教大家都用些什么?盼复!

a**i
发帖数: 419
3
从c++语言标准和fortran语言标准上来说,没有一个会crash。而且c++能提供的
数组功能比fortran要灵活得多,只是比较难以掌握,用得不好很容易出错。
如果你编程上没有错误,那就是你用的编译软件太差。但通常情况下,后者的可
能性比较小。用c++的人不知比fortran多多少,如果软件有问题,早就给人试出
来了。

【在 x*****u 的大作中提到】
: 大家都用什么啊。自带的array太差,大一点就crash。特别是多维的,跟fortran没法比
: 啊。
: 请教大家都用些什么?盼复!

Ag
发帖数: 481
4
you memory allocation must have problems.

【在 x*****u 的大作中提到】
: 大家都用什么啊。自带的array太差,大一点就crash。特别是多维的,跟fortran没法比
: 啊。
: 请教大家都用些什么?盼复!

x*****u
发帖数: 3419
5
这个,愿闻其详。谢谢先。
我是这样试的:
构造200×200的数组,如double A[200][200],当然有很多数组同时,程序运行下来,告
诉有SegmentationFault。这个很容易试,比如
int main()
{
double A[2000][2000];
for(int i=0; i<200; i++)
for(int j=0; j<200; j++){
A[

【在 Ag 的大作中提到】
: you memory allocation must have problems.
a******s
发帖数: 232
6
哈哈,fortran rocks!:)
用fortran写就没这个问题!

【在 x*****u 的大作中提到】
: 这个,愿闻其详。谢谢先。
: 我是这样试的:
: 构造200×200的数组,如double A[200][200],当然有很多数组同时,程序运行下来,告
: 诉有SegmentationFault。这个很容易试,比如
: int main()
: {
: double A[2000][2000];
: for(int i=0; i<200; i++)
: for(int j=0; j<200; j++){
: A[

x*****u
发帖数: 3419
7
能否详解一二?
比如,c++的数组功能,如何灵活得多呢?又怎样容易出错?谢谢!
纯粹搞计算的话,还是首推fortran,跟使用人数关系不大吧?当然是我一点愚陋的想法


法比

【在 a**i 的大作中提到】
: 从c++语言标准和fortran语言标准上来说,没有一个会crash。而且c++能提供的
: 数组功能比fortran要灵活得多,只是比较难以掌握,用得不好很容易出错。
: 如果你编程上没有错误,那就是你用的编译软件太差。但通常情况下,后者的可
: 能性比较小。用c++的人不知比fortran多多少,如果软件有问题,早就给人试出
: 来了。

a******s
发帖数: 232
8

~~~~~~~~~~你这儿不是笔误吧?

【在 x*****u 的大作中提到】
: 这个,愿闻其详。谢谢先。
: 我是这样试的:
: 构造200×200的数组,如double A[200][200],当然有很多数组同时,程序运行下来,告
: 诉有SegmentationFault。这个很容易试,比如
: int main()
: {
: double A[2000][2000];
: for(int i=0; i<200; i++)
: for(int j=0; j<200; j++){
: A[

x*****u
发帖数: 3419
9
是。当然只是我现在的认识程度的判断。程序错误可以排除(比如我前面贴的),当然也
有可能是编译器?天,前面编的那段,icc下没问题。然后回到自己原来的程序,icc还是
通不过。

法比

【在 h***o 的大作中提到】
: are you sure the crash is due to c++'s array?
x*****u
发帖数: 3419
10
没错,同样的程序,我编了一个fortran的,
program Array
REAL A(2000,2000)
INTEGER i, j
do 100 i = 1,2000
DO 100 j = 1,2000
A(i,j) = 1.
100 continue
end
用同样的机器,同样的编译器(gnu gcc's f77),没有一点问题。

,告







有答
有。

【在 a******s 的大作中提到】
:
: ~~~~~~~~~~你这儿不是笔误吧?

相关主题
matlab改成C++,还用了号称史上最快的fftw,结果慢了一倍真得很想听听别人的意见。。。
help: optimization with stochastic programming (转载)咨询下linux/window系统下c++ 及CS与就业关系 谢谢
Job Opening in Synopsys计算复数和实数的cpu时间问题
进入Computation版参与讨论
sc
发帖数: 122
11
把double A[2000][2000]挪到main外面去
最后,程序错了要自己动脑子,拿个计算器出来看看到底用掉多少内存,
有什么其他解决方法没有。竟然怪到C++不如fortran这种理由上去,
真是拉不出shi怪马桶没吸力。

【在 x*****u 的大作中提到】
: 这个,愿闻其详。谢谢先。
: 我是这样试的:
: 构造200×200的数组,如double A[200][200],当然有很多数组同时,程序运行下来,告
: 诉有SegmentationFault。这个很容易试,比如
: int main()
: {
: double A[2000][2000];
: for(int i=0; i<200; i++)
: for(int j=0; j<200; j++){
: A[

a**i
发帖数: 419
12
是编译器的问题,或者编译器的参数没设好。
2000*2000的double,需要32兆内存,可能超过编译器缺省的一个数据段的大小
上限了。

【在 x*****u 的大作中提到】
: 这个,愿闻其详。谢谢先。
: 我是这样试的:
: 构造200×200的数组,如double A[200][200],当然有很多数组同时,程序运行下来,告
: 诉有SegmentationFault。这个很容易试,比如
: int main()
: {
: double A[2000][2000];
: for(int i=0; i<200; i++)
: for(int j=0; j<200; j++){
: A[

a**i
发帖数: 419
13

c++的数组变量等效为指针变量。这样所有的数组操作都可以用指针操作代替。
在多数情况下,指针操作的执行效率比数组操作要高。但是使用指针很容易
出错,程序debug的时候也难找毛病。
如果不计较程序的执行效率,那是无所谓的。尤其是fortran有大量现成的科学
计算程序包,可以节省编程时间。但f77没有指针、不支持递归,在其他应用场
合用起来非常不爽;f95如何我不熟悉,但听说已经把f77改得面目全非了。

【在 x*****u 的大作中提到】
: 能否详解一二?
: 比如,c++的数组功能,如何灵活得多呢?又怎样容易出错?谢谢!
: 纯粹搞计算的话,还是首推fortran,跟使用人数关系不大吧?当然是我一点愚陋的想法
: 。
:
: 法比

Ag
发帖数: 481
14
allocate memory first, and it will be ok.
I don't know c++, only C. but same thing happened to me years ago.
use 'malloc()'

【在 x*****u 的大作中提到】
: 这个,愿闻其详。谢谢先。
: 我是这样试的:
: 构造200×200的数组,如double A[200][200],当然有很多数组同时,程序运行下来,告
: 诉有SegmentationFault。这个很容易试,比如
: int main()
: {
: double A[2000][2000];
: for(int i=0; i<200; i++)
: for(int j=0; j<200; j++){
: A[

f****r
发帖数: 27
15

Don't mislead others with totally wrong points.
Historically, C++ program is much slower than Fortran program. One major reason is
because of the usage of pointer. C/C++ compilers must assume that different
pointers might refer to the same data, thus preventing some compiler
optimizations.
Fortran is dominant in the scientific calculations not only because of those
old software packages, but also of its efficiency. At least for me. :)

【在 a**i 的大作中提到】
:
: c++的数组变量等效为指针变量。这样所有的数组操作都可以用指针操作代替。
: 在多数情况下,指针操作的执行效率比数组操作要高。但是使用指针很容易
: 出错,程序debug的时候也难找毛病。
: 如果不计较程序的执行效率,那是无所谓的。尤其是fortran有大量现成的科学
: 计算程序包,可以节省编程时间。但f77没有指针、不支持递归,在其他应用场
: 合用起来非常不爽;f95如何我不熟悉,但听说已经把f77改得面目全非了。

a**i
发帖数: 419
16

能说一下为什么会这样吗?是不是因为当时CPU的寄存器数量太少?
至少我看现在的编译器根本没这个问题啊。
至少象他刚才那个程序
for (i=0;i<2000;i++)
for (j=0;j<2000;j++)
{ ...
data[i][j]=xx
}
编译成汇编,循环体当中那句就是:
st [data+i+j], xx
其中data通常是个寄存器,i+j用另一个寄存器。地址计算需要2次加法。
而如果用指针,
pt=data[0];
for (i=0;i<2000;i++)
for (j=0;j<2000;j++)
{ ...
*(pt++)=xx;
}
那么循环体中的那句就是:
st [pt], xx
inc pt
其中pt也是一个寄存器。这样地址运算不需要加法,只需额外的一个增量运算。

【在 f****r 的大作中提到】
:
: Don't mislead others with totally wrong points.
: Historically, C++ program is much slower than Fortran program. One major reason is
: because of the usage of pointer. C/C++ compilers must assume that different
: pointers might refer to the same data, thus preventing some compiler
: optimizations.
: Fortran is dominant in the scientific calculations not only because of those
: old software packages, but also of its efficiency. At least for me. :)

f****r
发帖数: 27
17
As one example,
http://www.hlrs.de/organization/tsc/services/tools/docu/kcc/
UserGuide/chapter_4.html

【在 a**i 的大作中提到】
:
: 能说一下为什么会这样吗?是不是因为当时CPU的寄存器数量太少?
: 至少我看现在的编译器根本没这个问题啊。
: 至少象他刚才那个程序
: for (i=0;i<2000;i++)
: for (j=0;j<2000;j++)
: { ...
: data[i][j]=xx
: }
: 编译成汇编,循环体当中那句就是:

x*****u
发帖数: 3419
18
I think this would be a good idea. However, could you give me a simple
example, since I haven't used this function before. Thanks alot!

,告







有答
有。

【在 Ag 的大作中提到】
: allocate memory first, and it will be ok.
: I don't know c++, only C. but same thing happened to me years ago.
: use 'malloc()'

Ag
发帖数: 481
19
double **a;
a = (double **) malloc(200*sizeof(double *));
a[0] = (double *) malloc(200*sizeof(double));
for(i=0;i<200;i++){
a[i] = a[i-1]+200;
}
it's not elegant, but it should work.

【在 x*****u 的大作中提到】
: I think this would be a good idea. However, could you give me a simple
: example, since I haven't used this function before. Thanks alot!
:
: ,告
:
:
:
:
:
:

a******s
发帖数: 232
20
这正说明fortran比c适合科学计算,嘿嘿
不用担心那么多编程的问题,要是还要管那么多事情,为啥不用汇编呢?:)

【在 sc 的大作中提到】
: 把double A[2000][2000]挪到main外面去
: 最后,程序错了要自己动脑子,拿个计算器出来看看到底用掉多少内存,
: 有什么其他解决方法没有。竟然怪到C++不如fortran这种理由上去,
: 真是拉不出shi怪马桶没吸力。

相关主题
pls help a list of global optimizationIntroduction to Global Optimization
Re: pls help a list of optimization methodsStatistical Global Optimization Algorithms
老板这个Idea可行么?Please help!
进入Computation版参与讨论
h***o
发帖数: 539
21
fortran77里面连while loop都没有,害我每次
10 continue
...
...
if (blahblah) goto 10

【在 a******s 的大作中提到】
: 这正说明fortran比c适合科学计算,嘿嘿
: 不用担心那么多编程的问题,要是还要管那么多事情,为啥不用汇编呢?:)

s**i
发帖数: 381
22
stack size not enough.
try ulimit to increase it.
If you dynamically alloate the memory space, there won't be such a problem.
BTW, this problem also happens in fortran, if you don't use the heap.
The limit could be compiler dependent.

【在 x*****u 的大作中提到】
: 这个,愿闻其详。谢谢先。
: 我是这样试的:
: 构造200×200的数组,如double A[200][200],当然有很多数组同时,程序运行下来,告
: 诉有SegmentationFault。这个很容易试,比如
: int main()
: {
: double A[2000][2000];
: for(int i=0; i<200; i++)
: for(int j=0; j<200; j++){
: A[

x*****u
发帖数: 3419
23
great! Thanx!

,告







有答
有。

【在 s**i 的大作中提到】
: stack size not enough.
: try ulimit to increase it.
: If you dynamically alloate the memory space, there won't be such a problem.
: BTW, this problem also happens in fortran, if you don't use the heap.
: The limit could be compiler dependent.

b***s
发帖数: 373
24
use STL;
vector > A;

【在 x*****u 的大作中提到】
: 大家都用什么啊。自带的array太差,大一点就crash。特别是多维的,跟fortran没法比
: 啊。
: 请教大家都用些什么?盼复!

c**d
发帖数: 579
25
static stack 溢出所致,使用动态分配内存即可。编程语言各有所长,没有绝对的好坏
,自己觉得好就用哪个,没必要要求别人和你意见一致吧。

【在 x*****u 的大作中提到】
: 没错,同样的程序,我编了一个fortran的,
: program Array
: REAL A(2000,2000)
: INTEGER i, j
: do 100 i = 1,2000
: DO 100 j = 1,2000
: A(i,j) = 1.
: 100 continue
: end
: 用同样的机器,同样的编译器(gnu gcc's f77),没有一点问题。

1 (共1页)
进入Computation版参与讨论
相关主题
Statistical Global Optimization Algorithms[Job Opening] 3D Engine Developer - Game Physics and Low Level Optimization
Please help!matlab改成C++,还用了号称史上最快的fftw,结果慢了一倍
Help change the code of optimizationhelp: optimization with stochastic programming (转载)
[转载] an icc option problem.Job Opening in Synopsys
icc complier is expensive yar~~真得很想听听别人的意见。。。
Fortran code optimization咨询下linux/window系统下c++ 及CS与就业关系 谢谢
Fortran 和 C的区别? (转载)计算复数和实数的cpu时间问题
谁能推荐一个c++ optimization的librarypls help a list of global optimization
相关话题的讨论汇总
话题: 200话题: fortran话题: array话题: double话题: 2000