POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
楼主: xing83
打印 上一主题 下一主题

现在cpu的速度真恐怖

[复制链接]
41#
发表于 2007-7-2 18:34 | 只看该作者
的确,有时候是有很多多余的代码需要清除,一般编译器是会使用等价的替换代码来优化那些罗嗦的代码,但像这些不直接使用结果的应该不在此列,因为编译器不能替程序员作出结论,不能说结果没有使用就一定无用,或许别人有别的目的呢?比如C#里定义一些变量但不使用,编译器会给出警告,提示对象没有使用,但不至于自作主张不分配内存。
回复 支持 反对

使用道具 举报

42#
 楼主| 发表于 2007-7-2 18:37 | 只看该作者
明天安上网络就可以贴代码了
回复 支持 反对

使用道具 举报

43#
发表于 2007-7-2 18:50 | 只看该作者
用嵌入汇编 绝对不会被缩减掉
回复 支持 反对

使用道具 举报

44#
发表于 2007-7-2 18:59 | 只看该作者
:huh: 性能严重过剩
回复 支持 反对

使用道具 举报

45#
发表于 2007-7-2 18:59 | 只看该作者
用汇编写
强行把参与运算的数字全部放到内存里去,看它还快:shifty::shifty:
CPU不用cache就是残废:devil::devil::shifty:
回复 支持 反对

使用道具 举报

头像被屏蔽
46#
发表于 2007-7-2 19:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

47#
发表于 2007-7-2 19:20 | 只看该作者
lz的程序显然不够强,鉴定完毕。
回复 支持 反对

使用道具 举报

roii 该用户已被删除
48#
发表于 2007-7-2 19:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

林青豪 该用户已被删除
49#
发表于 2007-7-2 20:12 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

50#
 楼主| 发表于 2007-7-2 21:24 | 只看该作者
发现了,编译器果然把中间那个开根号的计算给忽略了

while (i<100000){
i++;
while (k<300000){
k++;
x=math.sqrt(i*k);
y=y+x;
}
}

执行起来就特别快,几乎跟空循环一样速度。

while (i<100000){
i++;
while (k<300000){
k++;
x=math.sqrt(i*k);
y=y+x;
}
}
console.writeLine(y.ToString);

只是在末尾加了个输出就慢了很多很多。现在可以把双核占满100%好几分钟了。具体时间等运行完了再说。
回复 支持 反对

使用道具 举报

51#
 楼主| 发表于 2007-7-2 21:27 | 只看该作者
我打这么多字的时间,才运行了15%呢。
新的烤机测试程序诞生了,因为以开根号为主,我决定称呼它为---双线super老根。不知道在单核上运行是如何感受。
回复 支持 反对

使用道具 举报

zxjike 该用户已被删除
52#
发表于 2007-7-2 21:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

53#
发表于 2007-7-2 21:50 | 只看该作者
原帖由 xing83 于 2007-7-2 21:24 发表
发现了,编译器果然把中间那个开根号的计算给忽略了

while (i

在我的AM2 3000+ 1G内存上运行两者一样慢。

LZ,其实你的程序根本不拷机,只是循环多而已。CPU负荷量是很小的。你可以试一下改写下循环,做同样的运算试试。

using System;
namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Test
{
  public static void Main(string[] args)
  {
   /*
   Test test = new Test();
   int b = test.xun();
   Console.WriteLine(b);
   Console.ReadLine();
   */
      
   double x = 0;
   long sta = Environment.TickCount;
   for (int i=1;i<1000;i++){
    for (long l=1;l<300000;l+=4)
    {
     x=Math.Sqrt(l*l);
     x=Math.Sqrt((l+1)*(l+1));
     x=Math.Sqrt((l+2)*(l+2));
     x=Math.Sqrt((l+3)*(l+3));
    }
   }
   Console.WriteLine(Environment.TickCount - sta);
   Console.ReadLine();
   
  }
  public int xun()
  {
   int a = 0;
   int b = 9;
   for(long i = 0;i < 1000000000;i++)
   {
    a++;
   }
   return b;
  }
}
}

[ 本帖最后由 FENG950 于 2007-7-2 23:52 编辑 ]
回复 支持 反对

使用道具 举报

54#
发表于 2007-7-2 21:52 | 只看该作者
往上看,
楼主自己也发现代码被忽略了,呵呵。

原帖由 FENG950 于 2007-7-2 18:34 发表
的确,有时候是有很多多余的代码需要清除,一般编译器是会使用等价的替换代码来优化那些罗嗦的代码,但像这些不直接使用结果的应该不在此列,因为编译器不能替程序员作出结论,不能说结果没有使用就一定无用,或 ...
回复 支持 反对

使用道具 举报

55#
发表于 2007-7-2 21:54 | 只看该作者
原帖由 bessel 于 2007-7-2 21:52 发表
往下看,
楼主自己也发现代码被忽略了,呵呵。

我刚运行了,一样的死慢,结果现在都没出来,没有WriteLine的。
回复 支持 反对

使用道具 举报

56#
发表于 2007-7-2 21:56 | 只看该作者
原帖由 bessel 于 2007-7-2 21:52 发表
往上看,
楼主自己也发现代码被忽略了,呵呵。

其实用不着输出什么,你什么也不输出,就单步调试一下就知道有没有执行了。
回复 支持 反对

使用道具 举报

57#
发表于 2007-7-2 22:00 | 只看该作者
调试的时候当然执行了,优化 release的时候才作弊。


原帖由 FENG950 于 2007-7-2 21:56 发表

其实用不着输出什么,你什么也不输出,就单步调试一下就知道有没有执行了。
回复 支持 反对

使用道具 举报

zxjike 该用户已被删除
58#
发表于 2007-7-2 22:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

59#
发表于 2007-7-2 22:02 | 只看该作者
和楼主联系一下编译选项。

原帖由 FENG950 于 2007-7-2 21:54 发表

我刚运行了,一样的死慢,结果现在都没出来,没有WriteLine的。
回复 支持 反对

使用道具 举报

60#
发表于 2007-7-2 22:03 | 只看该作者
怎么说人家都不信。
:(
原帖由 zxjike 于 2007-7-2 22:02 发表
Debug模式什么都执行,Release模式编译器会去优化。生成EXE和Release模式一样。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-7-31 05:49

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表