Architectural Adaptability in Parallel Programming