multithreading

Archaea Software, LLC has a great deal of expertise building multithreaded applications, dating back to the early 1990s when symmetric multiprocessing (SMP)-capable Windows NT workstations first became available.

Multithreading is the only way multicore CPUs can achieve the highest possible performance. Because CPUs can no longer increase clock rates for higher performance, the primary way for CPU vendors to increase performance is to build CPUs with multiple cores (click here to see a presentation by Geoff Lowney of Intel where he explains why).

Since each core must run a separate CPU thread, single-threaded applications cannot take advantage of multi-core CPUs' higher performance.

Multithreaded programming is notoriously difficult. Porting applications to take advantage of it often includes the following tasks:

  • Refactoring to eliminate global variables,
  • Identification of objects in need of protection via synchronization,
  • Evaluation of which synchronization objects are best used,
  • Adding code to protect those objects as efficiently as possible.

Thread synchronization primitives include critical sections, mutexes, events, condition variables, and reader/writer locks. The best thread synchronization primitive to use depends on the application's target operating system as well as the access patters of the object being protected. Depending on the application, other abstractions, such as Thread Local Storage, also may be indicated.

Archaea Software, LLC has the expertise needed to help you evaluate your application's suitability for optimization via multithreading, develop a plan, and put that plan into practice.

If you have an application that you believe would benefit from multithreading, we'd be happy to do an evaluation. Fill out our questionnaire to get started.