找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1551|回复: 4
打印 上一主题 下一主题
收起左侧

第三方跨平台cpu性能测试,我的第一个开源项目求助

[复制链接]
跳转到指定楼层
楼主
ID:384624 发表于 2018-8-9 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人新手上路,搞了一个开源项目,目前这个开源项目已能在x86,arm,win,安卓上都能运行,但是在51单片上死活通不过,
本人测试的平台与处理器已达10多种了,包括手机,平板,路由器,电脑,
开源项目网址如下:https://gitee.com/test386/test
内有源码与linux与win的可执行文件,同时也有10多种不同处理器,不同平台的测试结果,

这里都是五一大神,帮我看一下,为何我的程序无法在keil上编释通过多谢。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5. #define INTEG_FUNC(x)  fabs(sin(x))
  6. double dclock(void);
  7. int main(int argc, char * argv[])
  8. {
  9.   clock_t start, finish;
  10.   double  duration;  
  11.   long * pi, * t, m, n, r, s;
  12.   int t0[][3] = {48, 32, 20, 24, 8, 4}, k0[][3] = {1, 1, 0, 1, 1, 1};
  13.   int n0[][3] = {18, 57, 239, 8, 57, 239}, d, i, j, k, p, q;

  14.   d = (argc > 1) ? (((i = atoi(argv[1])) < 0) ? 0 : i) : 9999;
  15.   q = (argc > 2) ? 1 : 0;
  16.   printf("%s\n\n", "pi calc..................................");
  17.   printf("pi= %s%d * arctg(1/%d) %s %d * arctg(1/%d) %s %d * arctg(1/%d) [%s]\n",
  18.     k0[q][0] ? "" : "-", t0[q][0], n0[q][0], k0[q][1] ? "+" : "-", t0[q][1],
  19.     n0[q][1], k0[q][2] ? "+" : "-", t0[q][2], n0[q][2], q ? "Stomer" : "Gauss");
  20.   if ((t = (long *)calloc((d += 5) + 1, sizeof(long))) == NULL) return 1;
  21.   if ((pi = (long *)calloc(d + 1, sizeof(long))) == NULL) return 2;

  22.   start = clock();

  23.   for (i = d; i >= 0; i--) pi[i] = 0;
  24.   for (p = 0; p < 3; p++) {
  25.     for (k=k0[q][p], n=n0[q][p], t[i=j=d]=t0[q][p], i--; i >= 0; i--) t[i] = 0;
  26.     for (r = 0, i = j; i >= 0; i--) {
  27.       r = (m = 10 * r + t[i]) % n;
  28.       t[i] = m / n;
  29.       k ? (pi[i] += t[i]) : (pi[i] -= t[i]);
  30.     }
  31.     while (j > 0 && t[j] == 0) j--;
  32.     for (k = !k, s = 3, n *= n; j > 0; k = !k, s += 2) {
  33.       for (r = 0, i = j; i >= 0; i--) {
  34.         r = (m = 10 * r + t[i]) % n;
  35.         t[i] = m / n;
  36.       }
  37.       while (j > 0 && t[j] == 0) j--;
  38.       for (r = 0, i = j; i >= 0; i--) {
  39.         r = (m = 10 * r + t[i]) % s;
  40.         m /= s;
  41.         k ? (pi[i] += m) : (pi[i] -= m);
  42.       }
  43.     }
  44.   }
  45.   for (n = i = 0; i <= d; pi[i++] = r) {
  46.     n = (m = pi[i] + n) / 10;
  47.     if ((r = m % 10) < 0) r += 10, n--;
  48.   }

  49.   printf("pi= %ld.", pi[d]);
  50.   for (i = d - 1; i >= 5; i--)
  51.     printf("%ld%s", pi[i], ((m = d - i + 5) % 65) ? ((m % 5) ? "" : " ") : "\n");
  52.   printf("%sDIGITS: %d\n", (m % 65) ? "\n" : "", d - 5);

  53. //_______________________________________
  54. // Loop counters and number of interior points
  55.    unsigned int ia, ja, Na;
  56.    // Stepsize, independent variable x, and accumulated sum
  57.    double  duration2;
  58.    double stepa, x_i, suma;
  59.    // Timing variables for evaluation   
  60.    double interval_begin = 0.0;
  61.    // Complete integral at
  62.    double interval_end = 2.0 * 3.141592653589793238;
  63.    // Start timing for the entire application
  64.    printf("     \n");
  65.    printf("    Number of    | Computed Integral | \n");
  66.    printf(" Interior Points |                   | \n");
  67.    for (ja=2;ja<27;ja++)
  68.    {
  69.     printf("------------------------------------- \n");
  70.      // Compute the number of (internal rectangles + 1)
  71.      Na =  1 << ja;
  72.      // Compute stepsize for Na-1 internal rectangles
  73.      stepa = (interval_end - interval_begin) / Na;
  74.      // Approx. 1/2 area in first rectangle: f(x0) * [stepa/2]
  75.      suma= INTEG_FUNC(interval_begin) * stepa / 2.0;
  76.      // Apply midpoint rule:
  77.      // Given length = f(x), compute the area of the
  78.      // rectangle of width stepa
  79.      // Suma areas of internal rectangle: f(xi + stepa) * stepa
  80.      for (ia=1;ia<Na;ia++)
  81.      {
  82.         x_i = ia * stepa;
  83.         suma += INTEG_FUNC(x_i) * stepa;
  84.      }
  85.      // Approx. 1/2 area in last rectangle: f(xN) * [stepa/2]
  86.      suma += INTEG_FUNC(interval_end) * stepa / 2.0;
  87.      printf(" %10d      |  %14e   | \n", Na, suma);
  88.    }
  89.   
  90.   
  91.    printf("     \n");
  92.   
  93.   
  94.     //_______________________________________
  95.   double  duration1;  
  96.   double  testa;
  97.   double  testb;
  98.     int  sum=0;
  99.     int  num=1;
  100.     int  sum2=0;
  101.     int  num2=2;
  102.         double   sqrt(double   x);
  103.   
  104.     while(num<=90000000){
  105.         sum=sum+num;
  106.         num=num+2;
  107.         testa=sqrt(sum);
  108.         testa=testa*num;
  109.     }
  110.     printf("Anti cheating verification code is=:%d\n",sum);
  111.     printf("Floating-point precision %.38lf\n", testa);
  112.     while(num2<=90000000){
  113.         sum2=sum2+num2;
  114.         num2=num2+2;
  115.         testb=sqrt(sum2);
  116.         testb=testb*num2;
  117.     }
  118.   printf("Anti cheating verification code is=%d\n",sum2);
  119.   printf("Floating-point precision %.38lf\n", testb);
  120.   finish = clock();
  121.   duration = (double)(finish - start) / CLOCKS_PER_SEC;  
  122.   printf("Total time %f seconds \n", duration);
  123.   printf("The less the time it is used, the more the performance becomes strongert!\n");
  124.   printf("Press Enter to exit\n");
  125.   sum = getchar( );
  126.   return 0;

  127.   
  128. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-8-9 20:49 来自手机 | 只看该作者
你是想要用大学的数学题叫小学生去做,你想会有好结果吗?
回复

使用道具 举报

板凳
ID:384624 发表于 2018-8-10 08:54 | 只看该作者
angmall 发表于 2018-8-9 20:49
你是想要用大学的数学题叫小学生去做,你想会有好结果吗?

我下步目标是用定时器,代替那个time.h功能,
然后对变量非法的问题,再想想办法。
回复

使用道具 举报

地板
ID:384885 发表于 2018-8-10 10:14 | 只看该作者
顶顶顶 看后面大佬的了
回复

使用道具 举报

5#
ID:155507 发表于 2018-8-11 10:42 | 只看该作者
Time.h

  1. // Time.h for C51
  2. // Prototypes for time clock functions.
  3. #ifndef _Time_h
  4. #define _Time_h

  5. #ifndef _CLOCK_T_DEFINED
  6. #define _CLOCK_T_DEFINED
  7. typedef unsigned long clock_t;
  8. #endif
  9. #define CLOCKS_PER_SEC   1000
  10. #define CLK_TCK          1000
  11. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  12. static clock_t        Clock_Tick=0;
  13. clock_t         clock( void );

  14. /*------------------------------------------------
  15.                                         定时器初始化子程序
  16. ------------------------------------------------*/
  17. void Init_Timer0(void)
  18. {
  19.         TMOD &= 0xF0;                //设置定时器模式
  20.         TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  21.         TH0=0xFC;              //给定初值,这里使用定时器0 1毫秒@12.000MHz
  22.         TL0=0x18;                 //设置定时初值
  23.         EA=1;            //总中断打开
  24.         ET0=1;           //定时器中断打开
  25.         TF0 = 0;                //清除TF0标志
  26.         TR0=1;           //定时器开关打开 定时器0开始计时
  27. }
  28. /*------------------------------------------------
  29.                                 定时器中断子程序
  30. ------------------------------------------------*/
  31. void Timer0_isr(void) interrupt 1 using 1
  32. {
  33.         TH0=0xFC;                  //重新赋值 1毫秒
  34.         TL0=0x18;
  35.        
  36.         Clock_Tick++;

  37. }

  38. clock_t        clock( void )
  39. {
  40.         return Clock_Tick;
  41. }

  42. #endif /* _Time_h */

复制代码
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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