Parallel computing: paradigms and applications