We are seeing a performance regression with a factor of 1.5 or 2.0 
(depending on machine) for the following simple C interface code between 
0.4.2 and today's master (not sure where the problem initially showed up, 
but within the last 50 days):

import Base: +

typealias ZZ Array{UInt, 1}

function +(a::ZZ, b::Int)
   r = ZZ(length(a))
   ccall((:__gmpn_add_1, :libgmp), Void, (Ptr{UInt}, Ptr{UInt}, Int, Int), 
r, a, 3, b)
   return r
end

function doit(n::Int)
   a = ZZ(3)
   a[1] = rand(UInt)
   a[2] = rand(UInt)
   a[3] = rand(UInt)

   for s = 1:n
      a += s
   end

   return a
end

doit(1000000000)


I realise the example is not mathematically very meaningful, nor is it the 
best way to compute anything in particular. It's cut down from a larger 
example to illustrate the performance regression clearly.

Bill.

Reply via email to