Эти термины действительно связаны и иногда перекрываются:
Параллельное программирование - это подмножество параллельного программирования, целью которого является использование нескольких одновременно выполняемых объектов (потоков, процессов) для ускорения некоторых вычислений.
Распределенные вычисления - это очень широкая тема, которая, как вы сказали, фокусируется на использовании ресурсов для решения проблемы. Эти ресурсы могут быть на одной машине, или могут быть географически распределены или неоднородны. Трудно провести четкую грань между параллельными и распределенными вычислениями. Параллельные вычисления могут или не могут быть распределены, в зависимости от используемых ресурсов, в то время как распределенные вычисления могут или не могут использоваться для решения проблемы параллельно.
По моему мнению, тонкое различие между этими терминами происходит от уровней абстракции, на которых они рассматриваются. Когда основное внимание уделяется взаимодействию отдельных вычислительных объектов над некоторыми общими данными, тогда мы говорим о параллельном программировании. Когда ключевым аспектом является ускорение вычислений с использованием нескольких вычислительных блоков, мы имеем параллельные вычисления. Наконец, если основное внимание уделяется способу управления ресурсами для решения какой-либо проблемы, то речь идет о распределенных вычислениях.