Using an architectural knowledge base to generate code for parallel computers