  In this paper we discuss ways to reduce the execution time of a software
Global Navigation Satellite System (GNSS) receiver that is meant for offline
operation in a cloud environment. Client devices record satellite signals they
receive, and send them to the cloud, to be processed by this software. The goal
of this project is for each client request to be processed as fast as possible,
but also to increase total system throughput by making sure as many requests as
possible are processed within a unit of time. The characteristics of our
application provided both opportunities and challenges for increasing
performance. We describe the speedups we obtained by enabling the software to
exploit multi-core CPUs and GPGPUs. We mention which techniques worked for us
and which did not. To increase throughput, we describe how we control the
resources allocated to each invocation of the software to process a client
request, such that multiple copies of the application can run at the same time.
We use the notion of effective running time to measure the system's throughput
when running multiple instances at the same time, and show how we can determine
when the system's computing resources have been saturated.
