找回密码
 新注册用户
搜索
楼主: BlackCat68kg

为什么预计计算速度的单位都是GFlops/sec ?

[复制链接]
发表于 2011-8-2 03:39:16 | 显示全部楼层
除了数学项目之外,基本也就没有用整数的了吧……

引用一段Ap的源代码
  1. CPUComputation::CPUComputation ()
  2. 14        {
  3. 15          m_bInterleaved = false;
  4. 16          if ( m_bInterleaved )
  5. 17            {
  6. 18              m_pfInput =
  7. 19                (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
  8. 20              m_pfOutput =
  9. 21                (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
  10. 22              m_pfInputInv =
  11. 23                (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
  12. 24              m_pfOutputInv =
  13. 25                (float *)fftwf_malloc ( 4 * sciFFTLength * sizeof ( float ) );
  14. 26       
  15. 27              m_fpForwardPlan = fftwf_plan_many_dft ( 1, &sciFFTLength, 2,
  16. 28                                                      (fftwf_complex *)m_pfInput,
  17. 29                                                      NULL, 2, 1,
  18. 30                                                      (fftwf_complex *)m_pfOutput,
  19. 31                                                      NULL, 2, 1,
  20. 32                                                      FFTW_FORWARD, FFTW_MEASURE );
  21. 33              m_fpInversePlan = fftwf_plan_many_dft ( 1, &sciFFTLength, 2,
  22. 34                                                      (fftwf_complex *)m_pfInputInv,
  23. 35                                                      NULL, 2, 1,
  24. 36                                                      (fftwf_complex *)m_pfOutputInv,
  25. 37                                                      NULL, 2, 1,
  26. 38                                                      FFTW_BACKWARD, FFTW_MEASURE );
  27. 39            }
  28. 40          else
  29. 41            {
  30. 42              m_pfInput =
  31. 43                (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
  32. 44              m_pfOutput =
  33. 45                (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
  34. 46              m_pfInputInv =
  35. 47                (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
  36. 48              m_pfOutputInv =
  37. 49                (float *)fftwf_malloc ( 2 * sciFFTLength * sizeof ( float ) );
  38. 50       
  39. 51              m_fpForwardPlan = fftwf_plan_dft_1d ( sciFFTLength,
  40. 52                                                    (fftwf_complex *)m_pfInput,
  41. 53                                                    (fftwf_complex *)m_pfOutput,
  42. 54                                                    FFTW_FORWARD, FFTW_MEASURE );
  43. 55              m_fpInversePlan = fftwf_plan_dft_1d ( sciFFTLength,
  44. 56                                                    (fftwf_complex *)m_pfInputInv,
  45. 57                                                    (fftwf_complex *)m_pfOutputInv,
  46. 58                                                    FFTW_BACKWARD, FFTW_MEASURE );
  47. 59            }
  48. 60        }
  49. 61       
  50. 62        CPUComputation::~CPUComputation ()
  51. 63        {
  52. 64          fftwf_destroy_plan ( m_fpForwardPlan );
  53. 65          fftwf_destroy_plan ( m_fpInversePlan );
  54. 66       
  55. 67          fftwf_free ( m_pfInput );
  56. 68          fftwf_free ( m_pfOutput );
  57. 69          fftwf_free ( m_pfInputInv );
  58. 70          fftwf_free ( m_pfOutputInv );
  59. 71        }
  60. 72       
  61. 73        float CPUComputation::Execute ( float *pfInput, float *pfOutput )
  62. 74        {
  63. 75       
  64. 76          int i;
  65. 77       
  66. 78          if ( m_bInterleaved )
  67. 79            {
  68. 80              for ( i = 0; i < sciFFTQuantity; i++ )
  69. 81                {
  70. 82                  memcpy ( m_pfInput, pfInput + 4 * i * sciFFTLength,
  71. 83                           4 * sciFFTLength * sizeof ( float ) );
  72. 84       
  73. 85                  fftwf_execute ( m_fpForwardPlan );
  74. 86       
  75. 87                  memcpy ( m_pfInputInv, m_pfOutput,
  76. 88                           4 * sciFFTLength * sizeof ( float ) );
  77. 89       
  78. 90                  fftwf_execute ( m_fpInversePlan );
  79. 91       
  80. 92                  memcpy ( pfOutput + 4 * i * sciFFTLength, m_pfOutputInv,
  81. 93                           4 * sciFFTLength * sizeof ( float ) );
  82. 94                }
  83. 95            }
  84. 96          else
  85. 97            {
  86. 98              for ( i = 0; i < 2 * sciFFTQuantity; i++ )
  87. 99                {
  88. 100                  memcpy ( m_pfInput, pfInput + 2 * i * sciFFTLength,
  89. 101                           2 * sciFFTLength * sizeof ( float ) );
  90. 102       
  91. 103                  fftwf_execute ( m_fpForwardPlan );
  92. 104        /*
  93. 105                  memcpy ( m_pfInputInv, m_pfOutput,
  94. 106                           2 * sciFFTLength * sizeof ( float ) );
  95. 107       
  96. 108                  fftwf_execute ( m_fpInversePlan );
  97. 109       
  98. 110                  memcpy ( pfOutput + 2 * i * sciFFTLength, m_pfOutputInv,
  99. 111                           2 * sciFFTLength * sizeof ( float ) );
  100. 112        */
  101. 113       
  102. 114                  memcpy ( pfOutput + 2 * i * sciFFTLength, m_pfOutput,
  103. 115                           2 * sciFFTLength * sizeof ( float ) );
  104. 116       
  105. 117                }
  106. 118            }
复制代码
除了for循环之外就全是float了……
回复

使用道具 举报

发表于 2011-8-2 04:53:26 | 显示全部楼层
那就麻烦您给解释一下这段东西的意义~~
回复

使用道具 举报

发表于 2011-8-2 04:58:14 | 显示全部楼层
本帖最后由 nekoko 于 2011-8-2 04:59 编辑

回复 15# lch=gta


我不举别的例子,SmithWaterman就是一个纯整数的算法……

争论这个没有意义,我只是认为您所谓的“科学计算基本上都是浮点”的概念有偏颇之嫌

而且实际上根据AMD的调查,在科学计算服务器上90%左右的操作都是整数操作,这也是他们做出Bulldozer架构加强整数线程的原因之一
回复

使用道具 举报

发表于 2011-8-2 10:34:20 | 显示全部楼层
那就麻烦您给解释一下这段东西的意义~~
nekoko 发表于 2011-8-2 04:53


这段主要是对内存的存取,仅仅是代码中的一段,没有上下文具体他要干嘛是很难理解的,但是可以看出它操作的变量都是浮点

可能也是我说的不严谨

但是对于科学计算,肯定还是浮点要多一些,当然了比较算法,排序算法这些还是要涉及到整数

但是做数值运算的话,像seti einstein这种,都要用浮点的了
    不然为什么大名鼎鼎的ScienceMark都是在跑浮点

90%整数操作这个悬了,推土机加强整数不能说明问题,那现在世界上越来越多的超级计算机GPU加速,是否可以说明90%都是浮点操作?
回复

使用道具 举报

发表于 2011-8-2 10:38:37 | 显示全部楼层
而且BOINC官方给出的help也说了,credit就是根据浮点操作给的
如果绝大多数项目都是整数,那为什么不用整数操作呢?
回复

使用道具 举报

发表于 2011-8-2 19:17:03 | 显示全部楼层
讨论科学计算是浮点多还是整数多是很重要的哦!
回复

使用道具 举报

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

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-5-17 19:23

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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