Guest User

Untitled

a guest
Dec 18th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. require "benchmark"
  2.  
  3. n = 100_000_000
  4. puts "ADD"
  5. puts "n = #{n}"
  6.  
  7. Benchmark.bm(20) do |measure|
  8. measure.report("zip") do
  9. output = ""
  10.  
  11. ary1 = [2] * n
  12. ary2 = [3] * n
  13.  
  14. output << ary1.zip(ary2).map { |i| i.reduce(:+) }[0..10].to_s
  15. end
  16.  
  17. measure.report("zip_lazy") do
  18. output = ""
  19.  
  20. ary1 = [2] * n
  21. ary2 = [3] * n
  22.  
  23. output << ary1.lazy.zip(ary2).map { |i| i.reduce(:+) }.to_a[0..10].to_s
  24. end
  25.  
  26. measure.report("zip_sum") do
  27. output = ""
  28.  
  29. ary1 = [2] * n
  30. ary2 = [3] * n
  31.  
  32. output << ary1.zip(ary2).map(&:sum)[0..10].to_s
  33. end
  34.  
  35. measure.report("zip2") do
  36. output = ""
  37.  
  38. ary1 = [2] * n
  39. ary2 = [3] * n
  40.  
  41. output << ary1.zip(ary2).map { |a, b| a + b }[0..10].to_s
  42. end
  43.  
  44. measure.report("idx") do
  45. output = ""
  46.  
  47. ary1 = [2] * n
  48. ary2 = [3] * n
  49. ary3 = Array.new(n)
  50.  
  51. ary1.each_with_index do |elem, idx|
  52. ary3[idx] = elem + ary2[idx]
  53. end
  54.  
  55. output << ary3[0..10].to_s
  56. end
  57.  
  58. measure.report("idx<<") do
  59. output = ""
  60.  
  61. ary1 = [2] * n
  62. ary2 = [3] * n
  63. ary3 = []
  64.  
  65. ary1.each_with_index do |elem, idx|
  66. ary3 << elem + ary2[idx]
  67. end
  68.  
  69. output << ary3[0..10].to_s
  70. end
  71.  
  72. measure.report("map!") do
  73. output = ""
  74.  
  75. ary1 = [2] * n
  76. ary2 = [3] * n
  77.  
  78. ary1.map!.with_index do |elem, idx|
  79. elem + ary2[idx]
  80. end
  81.  
  82. output << ary1[0..10].to_s
  83. end
  84.  
  85. measure.report("matrix") do
  86. output = ""
  87.  
  88. require "matrix"
  89. m1 = Matrix[[2] * n]
  90. m2 = Matrix[[3] * n]
  91. output << (m1 + m2).to_a[0..10].to_s
  92. end
  93.  
  94. measure.report("matrix 2d") do
  95. output = ""
  96.  
  97. require "matrix"
  98. m1 = Matrix[[[2] * n]]
  99. m2 = Matrix[[[3] * n]]
  100. output << (m1 + m2).to_a[0][0..10].to_s
  101. end
  102.  
  103. measure.report("numo/narray") do
  104. output = ""
  105.  
  106. require "numo/narray"
  107. m1 = Numo::Int64.new(n).fill(2)
  108. m2 = Numo::Int64.new(n).fill(3)
  109. output << (m1 + m2).to_a[0..10].to_s
  110. end
  111.  
  112. measure.report("numo/narray 2d") do
  113. output = ""
  114.  
  115. require "numo/narray"
  116. m1 = Numo::Int64.new(n, 1).fill(2)
  117. m2 = Numo::Int64.new(n, 1).fill(3)
  118. output << (m1 + m2).to_a[0..10].to_s
  119. end
  120.  
  121. measure.report("bohrium") do
  122. output = ""
  123.  
  124. require "bohrium"
  125. ary1 = [2] * n
  126. ary2 = [3] * n
  127.  
  128. a = BhArray.new(ary1)
  129. b = BhArray.new(ary2)
  130.  
  131. output << a.add(b).to_ary[0..10].to_s # flushes
  132. end
  133.  
  134. measure.report("bohrium ones add") do
  135. output = ""
  136.  
  137. require "bohrium"
  138. a = BhArray.ones(n, 1, 2)
  139. b = BhArray.ones(n, 1, 3)
  140. output << a.add(b).to_ary[0..10].to_s # flushes
  141. end
  142.  
  143. measure.report("bohrium ones add!") do
  144. output = ""
  145.  
  146. require "bohrium"
  147. a = BhArray.ones(n, 1, 2)
  148. b = BhArray.ones(n, 1, 3)
  149. a.add!(b)
  150. output << a.to_ary[0..10].to_s # flushes
  151. end
  152.  
  153. measure.report("bohrium ones +") do
  154. output = ""
  155.  
  156. require "bohrium"
  157. a = BhArray.ones(n, 1, 2)
  158. b = BhArray.ones(n, 1, 3)
  159. output << (a + b).to_ary[0..10].to_s
  160. end
  161. end
Add Comment
Please, Sign In to add comment