A Fortune 200 Insurance Company located on the West coast was using a third-party, closed-source application to make inferences about future market conditions in order to hedge their investments. In order to carry out calculations over millions of possible scenarios, they were using a small cluster consisting of 1,300 hyperthreaded CPU cores in blade servers. In the near term, they projected that their business needs would grow by a factor of two and they were near capacity with their existing system.

<h3>Mission</h3>

The Client hired ArrayFire to conduct a comprehensive audit of their system to access its performance in nine key areas:

<ol>
	<li> The technological platform - a high-level overview of their system, example execution flows, discussions of shortcomings of their current approach, and recommendations for how the system could be optimized to be more efficient, execute faster, and be more reliable.
	<li> The code base - our engineers evaluated the code for compsition, quality, conformance with the best industry practices, and performance characteristics.  
	<li> Data management and governance policies - a comparision of Client's policies with industry standards.
	<li> Performance and optimization strategies - Using runtime profiling ArrayFire explored various approaches for how the system might be optmized to improve throughput.
	<li> Fault tolerance, stability, and reliability - Using on-site inspections, interviews with employees, and parsing documentation, ArrayFire accessed whether machines were sufficiently redudnant to meet business needs, inspected flows of data throughout the system (storage, network, compute infrastructure, etc.), and attempted to locate single points of failure and unreliable cross-over points.
	<li> Scalability - ArrayFire tested various assumptions about how their platform might tolerate projected business growth and provided suggestions on how their computational enviornment could be modified to tolerate future conditions.
	<li> Compatibility with emerging trends - ArrayFire parsed academic and business literature to find state-of-the-art implementations of the Client's application.
	<li> Disaster recovery platforms - Through parsing the disaster recovery documentation and interviews with employees, ArrayFire compared Client's disaster recovery platform with industry standards.
	<li> Change management process - ArrayFire compared Client's process of implementing and testing changes to their code with industry best practices.
</ol>

<h3>Action</h3>

Over a period of two months, ArrayFire investigated the aforementioned items, conducted on-site and phone interviews with employees, and profiled all aspects of their existing software. This included disk I/O, database access patterns, network bandwidth utilization, processor utilization, load balancing, execution order modifications, and code optimizations. 

<h3>Results</h3>

These techniques resulted in the discovery of hitherto unknown bottleknecks. In particular, poorly chosen virtual disk layouts in a SAN resulted in disk I/O limitations, job order execution resulted in heavy database lock contention, and poor load balancing caused a significant portion of the cluster to sit idle during production runs.

Through experimentally informed mathematics, ArrayFire predicted some portions of the production runs could be accelerated by factors of 1.2 - 10x if all of our suggestions were implemented. Using known runtime data, we predicted the entire process could be accelerated by approximately 45% on the existing hardware if all of our suggestions were implemented. Subsequent communications with Client indicated they implemented most of our suggestions and decreased their runtime by 39%.

[content_band bg_image="http://sandbox.arrayfire.com/wp-content/uploads/2014/11/Epipheo-background1.png" parallax="true" inner_container="true" no_margin="true" border="none" padding_top="10px" padding_bottom="40px" ]
[blockquote cite="<span style="color: #ffffff;">Engineer for Client</span>" type="center"]
<span style="color: #ffffff;">
Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases.
</span>
<span style="color: #ffffff;">- Systems Engineer, Client</span>[/blockquote]
[/content_band]

"Compared to Wednesday night, the [REDACTED] jobs took 35 minutes less and the [REDACTED] to 2 hours less.  This is runtime reduction of 39% in both cases." - Engineer for Client
