[Primer Parcial 2015] Problema 3, parte 1)

Re: [Primer Parcial 2015] Problema 3, parte 1)

de Rodrigo Gallardo -
Número de respuestas: 0

Hola Maxi,

Por la letra, no tenes ningún conocimiento de cuanto demora en ejecutar la función f. Esta puede ser una función con un tiempo de ejecución bastante elevado, e incluso puede bloquearse por operaciones de E/S.

Si pones en un único nodo "k := f(h) - f(l)", como es una única instrucción en un único nodo, cuando se ejecute la misma el computo de la función f para los dos valores se va realizar de forma secuencial. Es decir, para que la función termine de ejecutar primero se computa f(h), luego f(l), luego la resta y por ultimo se le asigna el valor a k.

Teniendo el computo de f(h) y f(l) en distintos nodos, te aseguras de que el mismo se pueda ejecutar de forma concurrente. Si tuvieras dos unidades de procesamiento, ambos valores se podrían estar computando al mismo tiempo y de esta forma reducirías el tiempo de ejecución de tu programa. Es mas, si la función f necesita bloquearse por alguna operación de E/S, al tener ambos cómputos en nodos distintos y potencialmente en distintos hilos, una de las llamadas a la función f se podría bloquear y la otra podría seguir computándose. Esto no se puede dar si ambas llamadas están en la misma instrucción y por lo tanto en el mismo hilo (cuando una de las llamadas se bloquee, se bloquea todo el hilo).

Por lo tanto, la solución que planteaste no maximiza del todo la concurrencia.

Si seguís teniendo dudas lo volvemos a ver.

Saludos!

Rodrigo