The document discusses several parallel programming models:
1. The shared variable model uses shared memory and variables for inter-process communication but has issues around critical sections, memory consistency, and synchronization.
2. The message passing model uses message passing between processes instead of shared memory, avoiding synchronization issues but introducing delays. It describes synchronous and asynchronous variants.
3. The data parallel model partitions data across processes, which perform similar operations in parallel. It is well-suited to regular problems like matrix operations.
4. Other models discussed include object-oriented, functional, and logic programming models.