= Surface Distance Cache Tests = == Overview and Benchmark Procedure == I have externalized the caching functionality in our various fault surface classes. There are a couple different implementation of the new SurfaceDistanceCache interface: * Traditional, single location cache: org.opensha.sha.faultSurface.cache.SingleLocDistanceCache * Google guava loading cache with variable size: org.opensha.sha.faultSurface.cache.MultiDistanceCache * Hybrid of both caches: org.opensha.sha.faultSurface.cache.HybridDistanceCache Caching style/parameters are configurable via the org.opensha.sha.faultSurface.cache.SurfaceCachingPolicy class, which can be configured via java properties. It defaults to using some form of multiple/hybrid cache for all surfaces except for Compound Surfaces, which default to the single cache. I then ran lots of tests at HPCC with many variations on these caching schemes. All tests were run on nodes with the exact same configuration: 2 quad core 2.5 GHz processors, 12 GB RAM. I ran the following benchmarks for a UCERF3 ERF with the branch average solution: Distance test: how long does it take to calculate each distance metric from 80 sites to every rupture in the ERF? Hazard test: how long does it take to calculate a hazard curve at 80 sites? Sites are randomly distributed (tightly) around 35, -118. Tests were run with 1, 2, 4, and 8 threads (multiple runs of each configuration and times averaged). === Plot Legend === Each plot has a number of lines. Solid lines (force=false) mean that the surfaces used the given cache for all rupture surfaces except for CompoundSurfaces, which used the single location cache. Dashed lines (force=true) use the given cache for compound surfaces as well. If size == 1 and force=false, the single location cache is used for all surfaces (this is the previous surface caching behavior). The color is related to the cache size: * black = 1 (the solid black line represents the previous caching behavior, and is the line to beat) * blue = 2 * green = 4 * orange = 8 * magenta = 12 == First Results and Sensitivity to Java Version == These are the initial results comparing the multi cache with the given size and a 1 hour access expiration with the single cache. ||= '''Distance Test''' =||= '''Hazard Test''' =|| ||[[Image(direct_1_results.png)]]||[[Image(hazard_1_results.png)]]|| ||distance test, Java 6, multi cache with expiration||hazard test, Java 6, multi cache with expiration||