Use this tag when asking questions about multi or parallel processing - a programming paradigm used to speed up computationally intensive geoprocessing tasks by executing them over multiple CPU cores or threads.

What does parallel mean in the GIS context?

Parallel computing is a computing technique that divides a large computational problem into much smaller ones that can be executed by multiple CPU threads concurrently (in parallel).

How do I implement parallel processing in my application?

Parallel processing can be specifically implemented by designing an algorithm that divides computations up to be distributed among multiple threads. Relegation of these computations to threads can be executed manually (i.e. I want to create 8 threads and execute these 8 threads on 4 CPU cores) or automatically (i.e. tell the computer to create however many threads it needs to efficiently execute this task).

How is parallel processing implemented in GIS?

Previously, few GIS products have fully utilized parallel programming in applications.

The most common implementation of parallelism in GIS is through a background geoprocessor. In this situation, two threads are created: a foreground and a background thread. All operations related to operation of the UI are relegated to the foreground thread and all operations related to a geoprocessing task (such as a buffer) are relegated to the background thread.

Each of these threads is then assigned to one CPU core, allowing for the GIS to utilize a maximum of 2 CPU cores in this programming paradigm.

Recently, parallel processing utilizing more than two threads or cores has gained prominence for various geoprocessing tasks on major GIS platforms (1) (2).

A GIS parallel processing example:

Q: I want to add all of one raster's cells to another raster. It currently takes several minutes to execute this computation because I have trillions of cells in my raster. I want to speed up computation time. How can I utilize parallel processing to do this?

A: Divide the raster up into 4-8 equally sized segments. Using a parallel processing library such as System.Threading.Tasks, iterate over your raster segments and instruct the computer to calculate each segment in parallel.