Распараллелить автомато то можно, только это тормозить будет ведь жутко :-) У ядер часто кэши свои собственные а не общие, соответстенно если часто делать "fork/join" в плане веток вычисления, то будут постоянно гоняться данные через память и постоянные промахи кэша будут.
Параллелизм разный бывает. Есть SMP, а есть и MPP, например...
По-хорошему, возможный параллелизм вычислить не так уж трудно. Примем, как начальное допущение, что любые действия выполняются параллельно, если нет зависимости по данным. Пример параллельных вычислений:
A := B * C;
D := B + E;
F := (B - C) mod E;Последовательные вычисления:
A := B * C;
D := A - E;
F := (D + A) div E;"Умный" компилятор может без проблем вычислить зависимости и создать подсказки для процессора... Сказанное выше относится не только к арифметическим действиям, но и к условным операторам, итерациям циклов, операторам выбора и пр.
Чего не может сделать компилятор, так это вычислить "логическую" параллельность. "Логическая" параллельность отличается от параллелизма времени исполнения тем, что содержит ряд дополнительных параметров, которые меняются вовне. Простой пример. Код А и код Б выполняются параллельно, мы можем при старте программы выполнить оба кода, но результаты их работы будут востребованы значительно позже... И если бы мы выполнили эти кода тогда, когда в них возникла потребность, то результаты были бы другие, нежели при старте программы. Например, мы можем принести домой хлеб, если пойдём в магазин тогда, когда он работает, и не принести хлеба, если магазин не работает. Это простой пример с одним потоком. Если мы рассматриваем более одного потока (А и Б, как выше), то возможна ситуация, когда у этих потоков есть внешняя (по отношению к программе) взаимозависимость. Программист знает об этом, а компилятор - нет (эта зависимость существует вне программы). Соответственно, компилятор не сможет правильно задать параллельность исполнения.
А если говорить о параллелизме более предметно, то надо переходить к терминологии систем, поскольку каждый поток - это часть единого целого... Об этом я говорил на oberoncore, но...