Parallelism is about speeding things up, whereas concurrency is about dealing with simultaneity or nondeterminism.
When we talk about parallel programming, typically we are interested in reducing execution times by taking advantage of hardware’s ability to do more than one thing at once, whether by vectorization, instruction-level parallelism (superscalar architectures), or multiprocessing (multiple cores or processors). Parallel programming does not imply a particular programming model, and many techniques and languages for parallel programming are at various stages of development or adoption.