A model for parallel programming is an abstraction and is machine architecture independent. A model can be executed on several hardware and memory architectures. There are various parallel programming models like Shared Memory model, Message Passing model, Threads model, Data Parallel model and Hybrid model etc.
Hence these models are hardware independent, the models can (theoretically) be executed on a number of different underlying types of hardware.
The decision about which model to use in an application is often a combination of a number of factors including the nature of the application and the available resources. There is no universally best execution of a model, though there are certainly some implementations of a model better than others. Next, we discuss briefly some popular models.