搜索
bottom↓
回复: 6

用VB6写的CPU性能测试工具

[复制链接]

出0入0汤圆

发表于 2016-2-24 13:04:02 | 显示全部楼层 |阅读模式
本帖最后由 90999 于 2016-2-24 13:05 编辑

源于百度这三帖:
http://tieba.baidu.com/p/3753425942
http://tieba.baidu.com/p/3871481362
http://tieba.baidu.com/p/3894610906

文中说到,根据贴主migeyusu的说法 CORE DUO 相对 i3-4 的在老软件性能仅有后者50-60%。
而AMD 的APU和FX 整数效能凭借高主频稍强于 老旧的CORE DUO,
其中贴出了部分代码,我照抄了部分,做出来玩玩。

PS: 其中基本排序算法我不懂是啥,那贴主说是二分查找我就照弄了.........





代码
Form1部分



  1. Private times As Integer
  2. Private INTY, SFOY, DFOY, SCIY, MSY, BSY As Long

  3. ‘-------------------------------------------------------------------------------------------------------------------
  4. Private Function valTran(a As Single) As Integer
  5. valTran = Int(1000000 / (a * 100))
  6. End Function
  7. ‘-------------------------------------------------------------------------------------------------------------------

  8. Private Sub form_load()
  9. times = 0
  10. Form1.BorderStyle = 1 '窗体大小不可变
  11. 'Command1.Default = True '默认回车就是按下按钮
  12. Command1.Caption = "开始(START)"
  13. End Sub


  14. ‘-------------------------------------------------------------------------------------------------------------------

  15. Private Sub Command1_Click()

  16. Command1.Enabled = False    '禁止按下,变灰色
  17. Command1.Caption = "运行中(PROCESSING)"


  18. MsgBox "本次测试下需要较长时间,请勿关闭或操作程序"


  19. Label1(0).Caption = "最大可用整数性能:计算中"
  20. DoEvents
  21. INTY = valTran(intCal())
  22. Label1(0).Caption = "最大可用整数性能:" + Str(INTY)
  23. DoEvents

  24. Label2(0).Caption = "最大可用单精度浮点:计算中"
  25. DoEvents
  26. SFOY = valTran(sfoCal())
  27. Label2(0).Caption = "最大可用单精度浮点:" + Str(SFOY)
  28. DoEvents

  29. Label3(0).Caption = "最大可用双精度浮点:计算中"
  30. DoEvents
  31. DFOY = valTran(dfoCal())
  32. Label3(0).Caption = "最大可用双精度浮点:" + Str(DFOY)
  33. DoEvents

  34. Label4(0).Caption = "科学计算效能:计算中"
  35. DoEvents
  36. SCIY = valTran(sciCal())
  37. Label4(0).Caption = "科学计算效能:" + Str(SCIY)
  38. DoEvents

  39. Label5(0).Caption = "常用排序算法性能:计算中"
  40. DoEvents
  41. MSY = valTran(MS())
  42. Label5(0).Caption = "常用排序算法性能:" + Str(MSY)
  43. DoEvents


  44. Label6(0).Caption = "基本排序算法性能:计算中"
  45. DoEvents
  46. BSY = valTran(BS())
  47. Label6(0).Caption = "基本排序算法性能:" + Str(BSY)
  48. DoEvents

  49. times = times + 1

  50. Text1.Text = Text1.Text & "第" & Str(times) & "次数值运算成绩是" & Str(INTY) + "/" & Str(SFOY) & "," & Chr(13) & Chr(10) & "归并排序成绩是 " & Str(MSY) & Chr(13) & Chr(10)


  51. Command1.Caption = "开始(START)"
  52. Command1.Enabled = True


  53. End Sub


复制代码
MODULE1部分
  1. Public Function intCal9()  '整数计算  自写的,丢弃
  2. Dim i As Long, j As Single, n As Long
  3. j = Timer
  4. For i = 1 To 30000000
  5.     n = i + 97
  6.     n = n / 177
  7.     n = n * 11
  8.     n = n - 182       '加减乘除8bit
  9.    
  10.     n = i + 13497
  11.     n = n / 4277
  12.     n = n * 1351
  13.     n = n - 9851       '加减乘除16bit
  14.    
  15.     n = i + 1300497
  16.     n = n / 420077
  17.     n = n * 100351
  18.     n = n - 5529851    '加减乘除24bit
  19.    
  20.     n = i + 667555000
  21.     n = n - 322111500
  22.     n = n / 23335123
  23.     n = n * 32132355   '加减乘除32bit
  24. Next i
  25. intCal = (Timer - j) / 4

  26. End Function

  27. ‘-------------------------------------------------------------------------------------------------------------------

  28. Public Function intCal()  '整数计算

  29. Dim i As Long, j As Single, s As Long
  30. Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Long

  31. a1 = Rnd
  32. a2 = Rnd
  33. a3 = Rnd
  34. a4 = Rnd
  35. a5 = Rnd
  36. a6 = Rnd
  37. a7 = Rnd
  38. a8 = Rnd
  39. a9 = Rnd
  40. a10 = Rnd

  41. j = Timer
  42. For i = 1 To 4000000


  43. a1 = a1 + 1
  44. a2 = a2 - 1
  45. a3 = a3 * (a1 + a2) * a4
  46. a4 = (a4 + a3) Mod 10
  47. a5 = a5 ^ a4
  48. a6 = (a5 + a6) / 2
  49. a7 = Not (a7 * a4)
  50. a8 = a8 Or a7
  51. a9 = a9 And a8
  52. a10 = a10 ^ a9

  53. Next i
  54. intCal = (Timer - j) / 4

  55. s = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10

  56. End Function

  57. ‘-------------------------------------------------------------------------------------------------------------------

  58. Public Function sfoCal9()  '单精度浮点计算 自写的,丢弃
  59. Dim i As Long, j As Single, n As Single
  60. j = Timer
  61. For i = 1 To 30000000
  62.    
  63.   n = 1.672298 ^ 23 - 3.31425231 + i ^ 1.2
  64.    
  65. Next i
  66. sfoCal9 = Timer - j

  67. End Function

  68. ‘-------------------------------------------------------------------------------------------------------------------

  69. Public Function sfoCal()  '单精度浮点计算
  70. Dim i As Long, j As Single, s As Single
  71. Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Single

  72. a1 = Rnd / 3.14
  73. a2 = 2 + a1
  74. a3 = 3 + a1
  75. a4 = 4 + a1
  76. a5 = 5 + a1
  77. a6 = 6 + a1
  78. a7 = 7 + a1
  79. a8 = 8 + a1
  80. a9 = 9 + a1
  81. a10 = 10 + a1


  82. j = Timer
  83. For i = 1 To 10000000
  84.    
  85. a1 = a1 + 1.1
  86. a2 = a1 - 1.3
  87. a3 = a3 + 1.1
  88. a4 = a4 - 1.2
  89. a5 = a1 + a2 + a3 + a4
  90. a6 = a6 + 3.1
  91. a7 = a7 - 1
  92. a8 = a8 + 1.4
  93. a9 = a9 - 1.5
  94. a10 = a6 + a7 + a8 + a9
  95. a10 = a10 * a5
  96. a10 = a10 ^ 0.5
  97. a5 = a5 / 2
  98. a6 = Cos(Sin(a10))
  99. a2 = Abs(a2)
  100. a4 = Abs(a4)
  101. a7 = Abs(a7)
  102. a9 = Abs(a9)
  103. a10 = 2 ^ (a10 ^ 0.13)
  104.    
  105. Next i
  106. sfoCal = Timer - j

  107. s = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10

  108. End Function
  109. ‘-------------------------------------------------------------------------------------------------------------------



  110. Public Function dfoCal9()  '双精度浮点计算 自写的, 丢弃
  111. Dim i As Long, j As Single, n As Double
  112. j = Timer
  113. For i = 1 To 30000000
  114.    
  115.     n = 1.672298 ^ 52 - 19.314252231 + 999.22999 + i ^ 1.2

  116. Next i
  117. dfoCal9 = Timer - j

  118. End Function


  119. ‘-------------------------------------------------------------------------------------------------------------------

  120. Public Function dfoCal()  '双精度浮点计算
  121. Dim i As Long, j As Single, s As Double
  122. Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Double

  123. a1 = Rnd / 3.14
  124. a2 = 2 + a1
  125. a3 = 3 + a1
  126. a4 = 4 + a1
  127. a5 = 5 + a1
  128. a6 = 6 + a1
  129. a7 = 7 + a1
  130. a8 = 8 + a1
  131. a9 = 9 + a1
  132. a10 = 10 + a1

  133. j = Timer

  134. For i = 1 To 10000000
  135.    
  136. a1 = a1 + 1.1
  137. a2 = a1 - 1.3
  138. a3 = a3 + 1.1
  139. a4 = a4 - 1.2
  140. a5 = a1 + a2 + a3 + a4
  141. a6 = a6 + 3.1
  142. a7 = a7 - 1
  143. a8 = a8 + 1.4
  144. a9 = a9 - 1.5
  145. a10 = a6 + a7 + a8 + a9
  146. a10 = a10 * a5
  147. a10 = a10 ^ 0.5
  148. a5 = a5 / 2
  149. a6 = Cos(Sin(a10))
  150. a2 = Abs(a2)
  151. a4 = Abs(a4)
  152. a7 = Abs(a7)
  153. a9 = Abs(a9)
  154. a10 = 2 ^ (a10 ^ 0.13)
  155.    
  156. Next i
  157. dfoCal = Timer - j

  158. s = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10

  159. End Function


  160. ‘-------------------------------------------------------------------------------------------------------------------


  161. Public Function sciCal()  '科学计算
  162. Dim i As Long, j As Single, n As Double
  163. j = Timer

  164. For i = 1 To 30000000
  165.     n = 10
  166.     n = i
  167.     n = n ^ 10
  168.     n = 1 / n
  169.     n = Sqr(n)
  170.     n = Sin(n)
  171.     n = Cos(n)
  172.     n = Tan(n)
  173.     n = Log(n)
  174.     n = Abs(n)
  175.     n = Int(n)
  176.     n = 100!
  177.     n = n Mod i
  178.     n = True And n
  179.     n = True Or n
  180.     n = Not n
  181. Next i

  182. sciCal = Timer - j

  183. End Function

  184. ‘-------------------------------------------------------------------------------------------------------------------

  185. Public Sub mergesort(ary1() As Long) '归并排序
  186. Dim LEN1 As Long
  187. Dim L1 As Long, L2 As Long
  188. LEN1 = UBound(ary1)
  189. Dim ary2() As Long
  190. Dim j As Long, i As Long
  191. Dim x As Long
  192. x = 0
  193. Dim LEN2 As Long

  194. i = 1
  195. j = 0
  196. x = 0
  197. LEN2 = 1
  198. L1 = 0
  199. L2 = 0
  200. LEN2 = 1

  201. Do While LEN1 \ LEN2 >= 2

  202.     Do While i <= LEN1
  203.    
  204.         If i + LEN2 * 2 - 1 <= LEN1 Then
  205.         L1 = i + LEN2 - 1
  206.         j = L1 + 1
  207.         L2 = L1 + LEN2
  208.         ElseIf i - 1 + LEN2 * 1 < LEN1 Then
  209.         L1 = i - 1 + LEN2
  210.         j = L1 + 1
  211.         L2 = LEN1
  212.         Else
  213.         L1 = LEN1
  214.         j = LEN1 + 1
  215.         L2 = LEN1
  216.         End If
  217.    
  218.     ReDim ary2(LEN2 * 2)
  219.     Call aryGet(i, L1, j, L2, ary2, LEN2 * 2, ary1)
  220.     i = L2 + 1
  221.    
  222.     Loop

  223.     x = x + 1
  224.     LEN2 = 2 ^ x
  225.     i = 1
  226. Loop

  227. ReDim ary2(LEN1)
  228. L1 = LEN2
  229. i = 1
  230. L2 = LEN1
  231. j = L1 + 1
  232. Call aryGet(i, L1, j, L2, ary2, LEN1, ary1)

  233. End Sub
  234. ‘-------------------------------------------------------------------------------------------------------------------

  235. Public Sub aryGet(i As Long, ls1 As Long, j As Long, ls2 As Long, arys() As Long, lst As Long, aryk() As Long)
  236. Dim k As Long, ii As Long
  237. ii = i
  238. k = 1

  239. Do While i <= ls And j <= ls2
  240.     If aryk(i) <= aryk(j) Then
  241.         arys(k) = aryk(i)
  242.         i = i + 1
  243.     Else
  244.         arys(k) = aryk(j)
  245.         j = j + 1
  246.     End If
  247.    
  248.     k = k + 1
  249. Loop

  250. If i > ls1 Then
  251.     For j = j To ls2
  252.         arys(k) = aryk(i)
  253.         k = k + 1
  254.     Next j
  255. Else
  256.     For i = i To ls1
  257.         arys(k) = aryk(i)
  258.         k = k + 1
  259.     Next i
  260. End If

  261. For k = 1 To lst
  262.     If ii <= ls2 Then
  263.         aryk(ii) = arys(k)
  264.         ii = ii + 1
  265.     Else
  266.         Exit For
  267.     End If
  268. Next k


  269. End Sub

  270. ‘-------------------------------------------------------------------------------------------------------------------

  271. Public Function MS()  '归并排序 自写的
  272. Dim i As Long, j As Single
  273. Dim aaa(16) As Long


  274. j = Timer

  275. For i = 1 To 200000

  276. aaa(1) = Fix(Rnd * (2 ^ 8))
  277. aaa(2) = Fix(Rnd * (2 ^ 8))
  278. aaa(3) = Fix(Rnd * (2 ^ 8))
  279. aaa(4) = Fix(Rnd * (2 ^ 8))
  280. aaa(5) = Fix(Rnd * (2 ^ 8))
  281. aaa(6) = Fix(Rnd * (2 ^ 8))
  282. aaa(7) = Fix(Rnd * (2 ^ 8))
  283. aaa(8) = Fix(Rnd * (2 ^ 8))
  284. aaa(9) = Fix(Rnd * (2 ^ 8))
  285. aaa(10) = Fix(Rnd * (2 ^ 8))
  286. aaa(11) = Fix(Rnd * (2 ^ 8))
  287. aaa(12) = Fix(Rnd * (2 ^ 8))
  288. aaa(13) = Fix(Rnd * (2 ^ 8))
  289. aaa(14) = Fix(Rnd * (2 ^ 8))
  290. aaa(15) = Fix(Rnd * (2 ^ 8))
  291. aaa(16) = Fix(Rnd * (2 ^ 8))

  292. Call mergesort(aaa)

  293. Next i

  294. MS = Timer - j

  295. End Function


  296. ‘-------------------------------------------------------------------------------------------------------------------

  297. Public Function BS()  '二分查找   自写的

  298. Dim aaa(10000) As Integer
  299. Dim goal As Integer
  300. Dim j As Single
  301. Dim i As Long
  302. Dim p As Integer

  303. p = 0

  304. For i = 1 To 10000
  305. aaa(i) = Int(Rnd * 50 + 50)
  306. Next i

  307. goal = 0
  308. j = Timer

  309. For i = 1 To 13000000
  310. goal = Int(Rnd * 50 + 50)
  311. p = binary_search(aaa, 10000, goal)
  312. Next i

  313. BS = Timer - j

  314. End Function

  315. ‘-------------------------------------------------------------------------------------------------------------------

  316. Public Function binary_search(ary2() As Integer, LEN1 As Integer, goal As Integer)   移植于  http://www.cnblogs.com/shuaiwhu/archive/2011/04/15/2065062.html
  317. Dim low As Integer
  318. Dim high As Integer
  319. Dim middle As Integer
  320. Dim t As Integer

  321. t = 0
  322. low = 0
  323. high = LEN2 - 1

  324. Do While (low <= high)
  325.     middle = (low + high) / 2
  326.     If ary2(middle) = goal Then
  327.         t = middle
  328.         Exit Do
  329.     ElseIf ary2(middle) > goal Then
  330.         high = middle - 1
  331.         t = 0
  332.     Else
  333.         low = middle + 1
  334.         t = 0
  335.     End If
  336. Loop

  337. binary_search = t


  338. End Function




复制代码


十多年没写VB6了,不足请提出。

附件中 Test1.2(i5) vb6 为原版测试工具, 工程2为以上代码生成的,体积小的是加了UPX壳的。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-2-24 13:47:55 | 显示全部楼层
这样的测试方法不客观吧。

出0入0汤圆

发表于 2016-2-24 14:43:58 | 显示全部楼层
mk一下慢慢看

出0入0汤圆

发表于 2016-2-25 14:16:53 | 显示全部楼层

I7-2600的,单线程3.8G,貌似调用强度根本不够大,性能超出老酷睿应该不止这点,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2016-2-25 19:00:39 | 显示全部楼层
zhaoyi821103 发表于 2016-2-25 14:16
I7-2600的,单线程3.8G,貌似调用强度根本不够大,性能超出老酷睿应该不止这点, ...

请你用Test1.2(i5) vb6跑一下看看效果。

出0入0汤圆

发表于 2016-2-25 20:23:08 | 显示全部楼层
90999 发表于 2016-2-25 19:00
请你用Test1.2(i5) vb6跑一下看看效果。

这个貌似差多了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2016-2-25 20:36:32 | 显示全部楼层

可能是你运行时候后台东西太多或者开了自动睿频,这个单核性能和456带差好远, E3和4160基本整数都有2万出头,不过三代和四代性能是差10-15%的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-17 13:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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