On the Synthesis of Programs for Various Parallel Architectures