Great, that fixed it. Thank you very much.
I am not from CS background and am still understanding the syntax so this
was very helpful.
Nitin
On Tuesday, January 26, 2016 at 10:56:31 PM UTC-8, Kristoffer Carlsson
wrote:
>
> Your vector type is not concrete.
>
> Use:
>
> Pts = Array(Point{Float64},10)
>
> and fix your method definition, i.e.
>
> function fillpts!{T <: AbstractFloat}(PointVec::Vector{Point{T}})
>
>
>
> On Wednesday, January 27, 2016 at 7:39:19 AM UTC+1, Nitin Arora wrote:
>>
>> First of all thanks to all of those who answered questions in my previous
>> post.
>>
>> I ran into another, rather confusing behavior:
>>
>> Say we define an immutable type as:
>> immutable Point{T<:AbstractFloat}
>> state :: Vector{T} # State Vector (length = 6)
>> dstate :: Vector{T} # Derivative vector wrt. time (length = 6)
>> ct :: Vector{T} #control vector
>> id :: Int64 # is an input
>> cb :: T # is an input
>> end
>>
>> Pts = Array(Point,10)
>>
>>
>> Now Let us define a function which can initialize the variable "Pts"
>> above ( an array of Points ):
>> function fillpts!(PointVec::Vector{Point})
>> for j = 1:10
>> states = rand(6); dstates = rand(6); ctrl = rand(4); tar = 1; cb =
>> rand(1)[1]
>> PointVec[j] =
>> Point{Float64}(copy(states),copy(dstates),copy(ctrl),tar,cb)
>> end
>> return nothing
>> end
>>
>> fillpts!(Pts)
>>
>> Now Lets define two functions (one works on array of Point, other one a
>> single Point type) which check for memory allocations when accessing the
>> member variables:
>> function checkAllocation(P::Vector{Point})
>> @time for i = 1:10000
>> P[1].state[1]
>> end
>> @time for i= 1:10000
>> P[1].cb
>> end
>> @time for i =1:10000
>> P[1].id
>> end
>> return nothing
>> end
>> #------------------------------------------
>> function checkAllocation_Single(P::Point)
>> @time for i = 1:10000
>> P.state[1]
>> end
>> @time for i= 1:10000
>> P.cb
>> end
>> @time for i =1:10000
>> P.id
>> end
>> return nothing
>> end
>>
>> Finally, the result of the benchmarking is as follows:
>> checkAllocation(Pts)
>> # Results
>> # 0.000459 seconds (10.00 k allocations: 156.250 KB)
>> # 0.000234 seconds (10.00 k allocations: 156.250 KB)
>> # 0.000126 seconds
>>
>> checkAllocation_Single(Pts[1])
>> # Results
>> # 0.000003 seconds
>> # 0.000000 seconds
>> # 0.000000 seconds
>>
>> *My Question:*
>> For the first function checkAllocation, which works on array on
>> immutable composite type, why do I get memory allocation when accessing an
>> array or a Float64 , but none when I access an integer (the sub variable
>> "id") ? This seems very strange to me. Whats so special about a Float ?
>> I was hoping and expecting to be no memory allocation for accessing these
>> values.
>> This behavior is more in line with what I expected with the second
>> function, where we see no memory allocation.
>>
>> Can someone more knowledgable please explain whats going on here ? I am
>> really confused.
>>
>> again, thanks for the help!
>> Nitin
>>
>>
>>
>>
>>
>>