Требуется ли «параллельному программному обеспечению» указанное аппаратное обеспечение или язык программирования?
Да и Да.
Первый из них тривиально прост. Большинство современных процессоров (скажем, что-то более новое, чем m6800) имеют аппаратные функции, которые позволяют выполнять более одного действия одновременно, но не обязательно оба одновременно. Например, когда прерывание по таймеру сработало, процессор может сохранить то, что он делает, а затем начать делать что-то еще. Эти задачи выполняются одновременно.
Даже без этого вы могли бы просто получить две машины с каким-либо соединением друг с другом (например, простым последовательным соединением через нуль-модемный адаптер), и они могут параллельно работать над одной и той же задачей.
Большинство новых (не только современных, но новейших) процессоров имеют встроенные ресурсы параллельных вычислений. Эти многоядерные процессоры могут фактически работать над двумя или более задачами одновременно, по одной задаче на ядро, и имеют специальные функции, которые делают для этих задач более эффективно сотрудничать.
Второй, требующий специальных программных инструментов, таких как язык с параллельной поддержкой, является в некотором смысле самой сложной частью параллельных вычислений. Если вы единственный человек на кухне, приготовить еду довольно легко, следуя каждому рецепту от начала до конца, один за другим, пока все блюда не будут приготовлены. Если вы хотите ускорить это, добавив больше поваров, вы должны быть немного осторожнее, чтобы не наступать друг другу на ноги.
Простейший способ сделать это - использовать потоковую библиотеку, которая предлагает некоторые инструменты, так что несколько задач могут быть организованы так, что они не будут забивать друг друга Это не так просто, как пометить программу как параллельную, а система позаботится обо всем остальном, скорее, вы должны написать каждую задачу для связи с каждой другой задачей в любом месте, где есть вероятность их вмешательства.