Hello,
    I did a micro-brenchmark about using Ints or UInt8s as indices for 
randomly reading an array, and discovered that when using Ints (but not 
UInt8s), there is an unexpected memory allocation.  More interestingly, the 
size of the memory allocation does not depend on the size of the array (n 
in the code below:

function sumjc(val_arr, idx_arr)
# random read sum
  sum = 0.0
  for i=1:length(idx_arr)
    idx = idx_arr[i]
    sum += val_arr[idx]
  end

  return sum
end

function sumjc2(val_arr)
# sequential read sum
  sum = 0.0
    for i=1:length(val_arr)
      sum += val_arr[i]
    end

  return sum
end

n = 200
a = round(Int, n*rand(n)) + 1  # Int indices
b = UInt8[ i for i in a]  # UInt8 indices
vals = rand(n + 1)

# warm up
sumjc(vals, a)
sumjc(vals, b)
sumjc2(vals)

# results
@time sumjc(vals, a)
println("Int random read @time printed above")
@time sumjc(vals, b)
println("UInt8 random read @time printed above")
@time sumjc2(vals)
println("standard sum @time printed above")

The output I get is:
   4.083 microseconds (156 allocations: 10861 bytes)  # ???
Int random read @time printed above
   2.716 microseconds (5 allocations: 160 bytes)
UInt8 random read @time printed above
   1.715 microseconds (5 allocations: 160 bytes)
standard sum @time printed above


Is this a bug that should be reported on Github, or is this expected 
behavior?  I am using the 0.4 release version of Julia.

  Jared Crean

Reply via email to