Los lazos en los programas pueden ser paralelizables o no, por ejemplo:
DO i = 3, n DO i = 3, n a(i) = b(i-1) + b(i-2) a(i) = a(i-1) + a(i-2) END DO END DO
el código de la izquierda es paralelizable porque el valor de a(i) no depende de cálculos hechos en iteraciones anteriores, en cambio en el código de la derecha no es paralelizable porque el valor de a(i) depende de valores calculados en iteraciones anteriores.
Además de la estructura DO, el HPF tiene la estructura FORALL que permite realizar las asignaciones en variables multidimensionales de forma paralela.
FORALL(i=3r:,n) a(i) = b(i-1) + b(i-2) ! Asignacion en una dimension FORALL(i=1:n,j=1:n) m(i,j) = 1.0/(i+j) ! Asignacion en dos dimensiones FORALL(i=1:n,b(i)>0) a(i) = log(b(i)) ! Se pueden utilizar funciones