找回密码
 欢迎注册
楼主: litaoye

[求助] 关于一个运算优化的问题

[复制链接]
发表于 2009-3-23 16:59:22 | 显示全部楼层
我的那个 logSum函数中的汇编代码正好100行(不包括空行,标号)。本来可以写的更短些,但那样速度就会下降,所以还是保留现在的样子。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-23 17:33:39 | 显示全部楼层
俺的目前是73行
在优化SSE代码兼调试中
通篇代码仅一个两重循环,最内循环一个跳转
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-23 17:36:21 | 显示全部楼层
游客,本帖隐藏的内容需要积分高于 10 才可浏览,您当前积分为 0


好像是可以工作了,但提交后,提示崩溃
有点怀疑其机器不支持某些指令
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-23 20:25:52 | 显示全部楼层
#include <stdlib.h>
#include <stdio.h>

int add(int a, int b)
{
   __asm
   {
      movd xmm0, a
      movd xmm1, b
      paddq xmm0, xmm1
      psrldq xmm1, 4
      pshufd xmm1, xmm0, 11100100b
      movd eax, xmm0
   }
}

int main(void)
{
  int a, b;
  scanf("%u %u", &a, &b);
  printf("%u\n", add(a, b));
  return 0;
}


做了个测试,似乎其机器支持SSE
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-24 22:04:06 | 显示全部楼层
放开173#的积分限制

另外,宝宝能对173#和你的代码的执行时间做测试么?
顺便,我想知道为什么提交后崩溃
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-24 22:21:44 | 显示全部楼层
过两天我也写个c++的,看看能比c#快多少!好久没用过c了!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-24 22:34:50 | 显示全部楼层


C#前景有点模糊啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-24 22:48:28 | 显示全部楼层
原帖由 无心人 于 2009-3-24 22:34 发表


C#前景有点模糊啊


呵呵,我自己的前景比它还模糊!

正在看几位的代码,看有什么可以抄袭的!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-3-25 08:22:46 | 显示全部楼层
呵呵,

我的代码要预先熟悉x86指令
写这个SSE指令很困难
稍微一不小心就出错
这个宝宝和锅老大是专家
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-3-27 04:02:02 | 显示全部楼层
呵呵,盗用了宝宝的代码!确实很厉害!
不知道有没有搜索某1位以后第一个1的?比如32位的,搜索8位以后的?
目前我用的方法是同某个数&一下,比如8位就是和0x00FFFFFF &一下,然后还是调用这个。

inline int _log2(unsigned int r)
{
        __asm
        {
                bsr eax,r
        }
}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-5 06:14 , Processed in 0.045274 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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