Thank you for the response Tim.

sizeof(Person) is 48. Now, I know you said that it is not as 
straightforward as looking just sizeof(Person). But when sizeof(Person) is 
48 and I have 
1728000 bytes allocated to Line 56, then is this more or less a certain 
sign that something is wrong. Or, is 1728000 the total memory 
that is ever used by the program in its entire run?

*  1728000     p = Person(id, ["H" => xHutil, "L" => 100 - xHutil], 
goods["N"], 0.0, false, 0)  # LINE 56*

Similarly, sizeof(Int) = 8. However, in line 66, I see the following.
    
*  51457     for i = 1:params.numPeople  *

Given that numPeople=1000, should this be 8000 and not 51457?

Thank you.





On Friday, November 14, 2014 10:59:20 AM UTC-5, Tim Holy wrote:
>
> By "unexpected memory usage", it really means a line that shouldn't be 
> allocating that nevertheless does. In your case, line 56 is explicitly 
> allocating (it's creating a new Person object). You could check by using 
> sizeof(Person) and seeing if the size is correct (but you'd have to 
> include 
> the size of the Dict, which because a Dict stores arrays is a bit 
> recursive). 
> Likewise, your push! command will grow the array, and hence allocate 
> memory. 
> That's being attributed to the first line of the for loop (the reasons are 
> a 
> little complex, and I'm late for a meeting). 
>
> --Tim 
>
> On Thursday, November 13, 2014 04:01:52 PM Test This wrote: 
> > On performance tips page of the Julia documentation, it says that one 
> way 
> > to identify performance problems is to look for unexpected memory usage. 
> > 
> > As suggested, I ran the code with --track-allocation=user option. 
> > 
> > The following are some lines from my code (including the type 
> definitions 
> > at the beginning). For now, I have two questions: 
> > 
> > (1) How do I know what is appropriate/expected memory usage? That is, 
> how 
> > do I calculated expected appropriate usage? A related question is, is 
> the 
> > usage on line 56 appropriate. 
> > 
> > (2) What determines the memory usage for a for-loop? Is the usage on 
> Line 
> > 66 appropriate? 
> > 
> > Thank you. 
> > 
> > 
> > 
> >         - ## 
> > ------------------------------------------------------------------- 
> >         - ##          Custom types and constants 
> >         - ## 
> > ------------------------------------------------------------------- 
> >         - 
> >         - type Params 
> >         -     minUtil::Int 
> >         -     maxUtil::Int 
> >         -     numPeople::Int 
> >         -     w::Int # inversely related to the weight on reviews 
> >         -     pReview::Float64 
> >         -     numReps::Int 
> >         -     recEveryX::Int 
> >         - end 
> >         - 
> >         - 
> >         - type Good 
> >         -     name::ASCIIString 
> >         -     mu::Int 
> >         -     sigma::Int 
> >         - end 
> >         - 
> >         - 
> >         - 
> >         - type Person 
> >         -     id::Int 
> >         -     priors::Dict{ASCIIString, Float64} 
> >         -     choice::Good 
> >         -     util::Float64 
> >         -     review::Bool #whether reviews or not 
> >         -     stars::Int #if review=true then how many stars 
> >         - end 
> >         - 
> >         - 
> >         - 
> >         - ## 
> > 
> =================================================================== 
> >         - ##          Functions 
> >         - ## 
> > 
> =================================================================== 
> >         - 
> >         - # Function to initialize a person 
> >         - function createPerson(params::Params, 
> >         -                       id::Int, 
> >         -                       xUtilDist::Dist.Uniform, 
> >         -                       goods::Dict{ASCIIString, Good}) 
> >         -     # draw xH value 
> >         0     xHutil::Float64 = rand(xUtilDist) 
> > *  1728000     p = Person(id, ["H" => xHutil, "L" => 100 - xHutil], 
> > goods["N"], 0.0, false, 0)  # LINE 56* 
> >         - end 
> >         - 
> >         - 
> >         - # create population of persons with there initial xH and xL 
> >         - function createPopulation(params::Params, 
> > goods::Dict{ASCIIString, Good}) 
> >       288     popn::Array{Person, 1} = [] 
> >         -     #create a uniform distn with support [0, 100] 
> >         0     unif = Dist.Uniform(params.minUtil, params.maxUtil) 
> >         - 
> > *    51456     for i = 1:params.numPeople        # LINE 66* 
> >         0         p::Person = createPerson(params, i, unif, goods) 
> >         0         push!(popn, p) 
> >         -     end 
> >         - 
> >         0     return popn 
> >         - end 
>
>

Reply via email to