[content_band inner_container="true" no_margin="true" border="top" padding_top="40px" padding_bottom="40px"][column type="one-fifth"].[/column][column type="three-fifths"][custom_headline type="left" level="h3"]Lincoln Financial Group[/custom_headline][/column][column type="one-fifth" last="true"].[/column][gap size="3%"]

[column type="one-fifth"].[/column][column type="three-fifths"]<img class="alignright size-full wp-image-6895" src="http://sandbox.arrayfire.com/wp-content/uploads/2014/10/lincoln-logo-promo-01.png" alt="lincoln logo, promo-01" width="360" height="120" /><span class="il">Lincoln</span> Financial Group (LFG) had ported their CPU code (C/C++) to CUDA and this enabled them to speed up the necessary financial calculations. Their primary objective was to reduce the time taken to run this code. Before porting to CUDA, they required 10-12 hours to run the entire code. After porting to CUDA, they were able to do the same work in about 30 min.

LFG has several C/C++ programmers in their team and they trained many of them to use CUDA. Their code used CUDA to speed up a calculation using Monte Carlo methods to analyze various scenarios in their so-called hedge-fund projection system (HPS). The major portion of their calculations were carried out on independent policies and thus the entire process was ideal for parallel programming (no communication bottlenecks).
<h4>Mission</h4>
The CPU code was slow and this was holding them back. Because the code took the entire night to run, they were not able to run several different scenarios and take corrective action based on the results of the code. The primary reason to move to GPUs was to speed up the calculations.

LFG invested heavily into building CPU+GPU clusters and I think the vendor they used to build this hardware was AMAX. Based on what I remember, they had the code running on 4 compute nodes, with 4 GPUs on each node. Each GPU was a NVIDIA K20X. The code ran on 16 GPUs. They were in the process of installing an even bigger system, with 64 total GPUs.
<h4>Action</h4>
We did have a plan of action, outlined in our SOW. This plan was adjusted as the project progressed and we identified key areas that needed improvement. The first couple of weeks were somewhat tricky because we were not able to get a working version of the codebase that was representative of the code they were actually running. This was because the code was in a very active state of development and integration on their side.

We made several suggestions to improve the efficiency of the codebase, but most of these were minor improvements. There were two levels of parallelism in the code: at the kernel level (GPU CUDA code) and the cluster level (MPI). One of the really useful suggestions we made was relevant at the MPI level, where we suggested that that organize their policies in a random manner to distribute the computing load in a more uniform manner. This led to a major efficiency increase. This suggestion was immediately implemented by their engineers. Another useful contribution we made was to stress-test their code to get an estimate of how many more policies they could handle. This was really simple to do, but it seems this was a big hit with their management.

The most frustrating part was at the very beginning of the assignment, when we were simply unable to get a working version of their code. Additionally, we were not able to access their machines from our laptops (both Jimi and me had macs). Both problems were solved in the following week. No significant adjustments to the original plan were required.
<h4>Results</h4>
The final deliverable was a series of slide decks and detailed technical reports that summarized our findings and analyses about the performance of their codebase. Also required was an executive summary of our findings suitable for higher management.
<blockquote>The changes that you made sped up the system more than expected! How often does anybody get to say that things work better than expected?  —Reveal Imaging</blockquote>
My understanding is that they had already developed the codebase using GPUs and their main interest in giving us this project was to get an external assessment of their work and get a "stamp of approval" that the code will work as intended and is of sufficiently good quality. In this sense, yes, we were able to provide them with what they wanted.

In general, LFG was extremely happy with our input and suggestions and they got what they were looking for when they hired us. I would say that we met their expectations in all areas and exceeded their expectations in a select few.

We documented all our findings in the form of detailed technical reports and slide-decks. These contain a wealth of significant benchmarks and visuals related to the codebase and our experiments with it. These documents are all available in Google docs in team-&gt;consulting-&gt;LFG.
<h6>About Lincoln Financial Group</h6>
Headquartered in the Philadelphia region, Lincoln Financial Group is a Fortune 500 company offering a diverse range of financial services and solutions. With a strong focus on four core business areas — life insurance, annuities, retirement plan services, and group protection — our business is built around supporting, preserving, and enhancing our customer's lifestyles and providing better retirement outcomes. Led by over 9,000 employees, Lincoln Financial provides the tools and advice to help individuals take charge of their futures.[/column][column type="one-fifth" last="true"].[/column][/content_band]