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