j**********i 发帖数: 3758 | 1 http://baike.baidu.com/view/3691487.htm
#include
#include
#include
#include
#include
#include
int main()
{
float m_fTimeElapsed;
int j;
long double x;
LARGE_INTEGER m_timeFreq;
LARGE_INTEGER m_timeStart;
LARGE_INTEGER m_timeStop;
QueryPerformanceFrequency(&m_timeFreq);
QueryPerformanceCounter(&m_timeStart);
for(int i=0;i<4000000000;i++){
j=i+1;
// x=(long double)sin(i*3.14);
}
printf("last= %E\n",x);
QueryPerformanceCounter(&m_timeStop);
//计算逝去的时间
m_fTimeElapsed=(float)(m_timeStop.QuadPart-m_timeStart.QuadPart)/(float)
(m_timeFreq.QuadPart);
printf("处理的时间为%f\n",m_fTimeElapsed);
return 0;
}
last= 4.569903E-001
处理的时间为180.996886
Press any key to continue
%%换成整数加法
处理的时间为8.268541
Press any key to continue
%%40亿次加法用了8.2秒时间 就超过了银河1
vostro 230 已经不生产了。
哪个什么新的曙光,内行的人也就是不去哼它,不知道几年以后就可能成为你们儿女的
家庭作业电脑。 |
W*******e 发帖数: 1268 | 2 HPC的峰值速度是用浮点数矩阵操作计算的,用整数加得到结果会差别很大
程序中的+1很容易被编译器给优化掉。实际的运算可能变成在CPU的寄存器里不停用INC
指令累加,最后结果才送回j,这个运算是非常快的,但体现不出VOSTRO正常的计算速
度。
【在 j**********i 的大作中提到】 : http://baike.baidu.com/view/3691487.htm : #include : #include : #include : #include : #include : #include : int main() : { : float m_fTimeElapsed;
|
j**********i 发帖数: 3758 | 3 浮点数矩阵操作计算不会吓唬人,这个精简算法很早以前就定型了。
说到底还是基本浮点运算的快慢和精度。而浮点运算实际上是用整数运算拼的。
说到底,还是整数运算的快慢。但是这里面有许多变化。NVIDIA GPU 现在很火,
但是不知道精度如何。
我只是做个初略的类比。国内的问题是自吹自擂,看看银河,曙光什么的升级快慢,
和国外大规模集成电路的升级速度是个极其相关的吻合。VOSTRO 230 到底和银河一号
怎么比是取决于集成的门电路的多少和设计。这个和编译器优化无关。
INC
【在 W*******e 的大作中提到】 : HPC的峰值速度是用浮点数矩阵操作计算的,用整数加得到结果会差别很大 : 程序中的+1很容易被编译器给优化掉。实际的运算可能变成在CPU的寄存器里不停用INC : 指令累加,最后结果才送回j,这个运算是非常快的,但体现不出VOSTRO正常的计算速 : 度。
|