The Evaluation Manager (EM) determines how to evaluate scenes, dividing the work among the available CPU and GPU computation resources to speed up performance. It works in the background, using the existing dirty propagation mechanism to convert the Directed Graph (DG) representation of your scene to a Forward Evaluation graph (FG). Once the FG is built, dirty propagation is disabled and an Evaluation schedule (ES) is built. The ES evaluates scene nodes in the correct order; this way, your scene produces the same result as with the “classic” Directed Graph-based evaluation.
You can watch a video about what the Evaluation Manager does here. For a more in-depth, technical explanation of Evaluation Manager, read the Parallel Maya Whitepaper.
The FG determines dependencies between scene elements; if two nodes in the scene are independent, they are good candidates for Parallel evaluation on different processors.
Choose the appropriate evaluation mode from the (Editors > Settings/Preferences > Preferences > Animation > Evaluation section:
Resource-heavy tasks take roughly the same amount of time in DG, Serial, and Parallel modes. For example, if you use a deformer that takes 0.5 seconds to deform a mesh, evaluating this deformer in Parallel does not add any change to performance.
If all EM/DG modes show the same bottleneck, addressing this problem will increase your performance gains. Use the Profiler to demonstrate in a graph the amount of time that each process consumes.
However, if you encounter problems that appear only in Parallel, this can indicate that there are thread contention problems with your scene, where multiple threads are trying to work at once while fighting for control of a shared resource.
Performance issues can occur with Python Commands when executing large amounts of commands. If this occurs, define MAYA_RETAIN_PYTHON_GIL in your environment. (MAYA_RELEASE_PYTHON_GIL is deprecated. It is true by default and can be overwritten by MAYA_RETAIN_PYTHON_GIL.)
Also, Python performance issues can occur when evaluating other threads with custom Python nodes.
Refer to the release notes for a complete list of known limitations.