Whops, the copy paste got messed. Here it is, 

typealias ElementSize Tuple{Int, Int, Int}

Uri

On Friday, August 19, 2016 at 3:06:10 PM UTC+3, Uri Patish wrote:
>
> Hi, I have to following types, 
>
> typealias ElementSize 
>
> typealias Element Array{Float64, 3}
>
> type ElementBuffer
> size::ElementSize
> alloc::ElementSize
> data::Element
> end
>
> The following function is called many times,
>
> function set_size!(bf::ElementBuffer, sz::ElementSize, load_old_data::Bool 
> = true)
>   if (bf.alloc[1] < sz[1]) || (bf.alloc[2] < sz[2]) || (bf.alloc[3] < 
> sz[3])
>     old_data = bf.data
>     bf.alloc = map(max, bf.alloc, sz)
>     bf.data = Element(bf.alloc)
>     if load_old_data
>       load_body!(bf, old_data)
>     end
> end
> bf.size = sz
>   nothing
> end
>
> I've seen there is a lot of memory allocation going on, so I've 
> benchmarked the former code using Julia's track-allocation=user option. The 
> result was suprising, 
>
>         - function set_size!(bf::ElementBuffer, sz::ElementSize, 
> load_old_data::Bool = true)
> 1710097664   if (bf.alloc[1] < sz[1]) || (bf.alloc[2] < sz[2]) || 
> (bf.alloc[3] < sz[3])
>         0     old_data = bf.data
>   2894592     bf.alloc = map(max, bf.alloc, sz)
>  59783056     bf.data = Element(bf.alloc)
>         0     if load_old_data
>         0       load_body!(bf, old_data)
>         -     end
>         - end
>         0 bf.size = sz
>         0   nothing
>         - end
>
> After running the code in debug, I've seen that there is an allocation 
> happening every time the alloc field is accessed. If I change the field 
> type from a tuple to an array this phenomenon disappears. I can't figure 
> out why this allocation is happening, any ideas?
>
> Uri
>
>

Reply via email to