Если я получу то, что вы имеете в виду, используя одно и то же целое число в двух функциях, это именно то: вы просто используете его дважды, не нужно вносить параллелизм. Если «реализация», которую вы думали об уничтоженных входных значениях, вы могли бывозьмите копию перед использованием.
int i = 2;
int j = fun1(i);
int k = fun2(i);
int res = fun3(j, k);
станет:
i = 2[A]
|
Clone[B]
/ \
/ \
/ \
i_1 i_2
| |
fun1[C] fun2[D]
| |
j k
\ /
\ /
\ /
fun3[E]
|
res
Но для оценки графа параллелизма не требуется.Вы можете просто оценить «параллельные» ветви слева направо (как обозначено маркировкой ABC -... - см. Также здесь ).
Сверху вниз (то есть от начала до конца), слева направо кажется более естественным, чем снизу вверх, при условии, что снизу вверх на самом деле имеет четко определенное значение.Что касается последнего пункта, при условии, что у вас есть результаты для программы, вы не всегда можете вычислить входные данные: подумайте о том, что происходит, когда funXXX
не являются инъективными (например, fun1(x) = x*x
) и, следовательно, необратимый.
Надеюсь, я не совсем неверно истолковал ваш ход мыслей.