1. A method for designing a processor, comprising: generating an initial architecture for a processor to execute at least one algorithm, wherein the initial architecture includes a set of processor components that comprise, at least, a processing element, a memory element and an information transfer mechanism; simulating execution of the at least one algorithm by the initial architecture to determine a modification to the initial architecture; creating a processor design based on the modification to the initial architecture; and determining a flexibility metric for a processor component in the set of processor components to measure a change in functional flexibility due to the modification to the processor component of the initial architecture, wherein the flexibility metric comprises: a quantification of the ability for any input to reach any output for information transfer mechanisms in the processor component, and one of: a ratio of available processing elements to required processing elements for processing elements in the processor component; and a ratio of available memory elements to required memory elements for memory elements in the processor component, wherein the functional flexibility of the modified processor component decreases if one or more design elements are eliminated from the processor component of the initial architecture.