Code motion
ಕಂಪ್ಯೂಟರ್ ವಿಜ್ಞಾನದಲ್ಲಿ, ಕೋಡ್ ಮೋಷನ್, ಕೋಡ್ ಹಾರಿಸುವಿಕೆ, ಕೋಡ್ ಸಿಂಕಿಂಗ್, ಲೂಪ್-ಇನ್ವೇರಿಯಂಟ್ ಕೋಡ್ ಮೋಷನ್, ಅಥವಾ ಕೋಡ್ ಫ್ಯಾಕ್ಟರಿಂಗ್ ಎಂದೂ ಕರೆಯಲ್ಪಡುತ್ತದೆ, ಇದು ಕಾರ್ಯಕ್ಷಮತೆ ಅಥವಾ ಗಾತ್ರದ ಪ್ರಯೋಜನಗಳಿಗಾಗಿ ಪ್ರೋಗ್ರಾಂನೊಳಗೆ ಕೋಡ್ ಅನ್ನು ಚಲಿಸುವ ಯಾವುದೇ ಪ್ರಕ್ರಿಯೆಗೆ ಒಂದು ಕಂಬಳಿ ಪದವಾಗಿದೆ ಮತ್ತು ಇದು ಹೆಚ್ಚಿನ ಆಪ್ಟಿಮೈಸಿಂಗ್ ಕಂಪೈಲರ್ಗಳಲ್ಲಿ ನಡೆಸಲಾಗುವ ಸಾಮಾನ್ಯ ಆಪ್ಟಿಮೈಸೇಶನ್ ಆಗಿದೆ. ಅದರ ಸುತ್ತಲಿನ ಪದಗಳ ಅಸಮಂಜಸವಾದ ಅರ್ಥದಿಂದಾಗಿ ವಿವಿಧ ರೀತಿಯ ಕೋಡ್ ಚಲನೆಯ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ಕಂಡುಹಿಡಿಯುವುದು ಕಷ್ಟವಾಗಬಹುದು. ಕೋಡ್ ಚಲನೆಯು ವಿವಿಧ ಉಪಯೋಗಗಳು ಮತ್ತು ಪ್ರಯೋಜನಗಳನ್ನು ಹೊಂದಿದೆ, ಅವುಗಳಲ್ಲಿ ಹಲವು ಅವುಗಳ ಅನುಷ್ಠಾನದಲ್ಲಿ ಪರಸ್ಪರ ಅತಿಕ್ರಮಿಸುತ್ತವೆ. ಬಳಕೆಯಾಗದ/ನಿಷ್ಪ್ರಯೋಜಕ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು ಕೋಡ್ ಸಿಂಕಿಂಗ್, ಇದನ್ನು ಲೇಜಿ ಕೋಡ್ ಮೋಷನ್ ಎಂದೂ ಕರೆಯುತ್ತಾರೆ, ಇದು ವ್ಯರ್ಥವಾದ ಸೂಚನೆಗಳನ್ನು ಅವುಗಳನ್ನು ಬಳಸುವ ಶಾಖೆಗಳಿಗೆ ಚಲಿಸುವ ಮೂಲಕ ಕಡಿಮೆ ಮಾಡುವ ತಂತ್ರಕ್ಕೆ ಒಂದು ಪದವಾಗಿದೆಃ ಒಂದು ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಶಾಖೆಯ ಮುಂದೆ ಕಾರ್ಯಗತಗೊಳಿಸಿದರೆ, ಮತ್ತು ಶಾಖೆಯ ಮಾರ್ಗಗಳಲ್ಲಿ ಒಂದನ್ನು ಮಾತ್ರ ಆ ಕಾರ್ಯಾಚರಣೆಯ ಫಲಿತಾಂಶವನ್ನು ಬಳಸಿದರೆ, ಕೋಡ್ ಸಿಂಕಿಂಗ್ ಆ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಅದನ್ನು ಬಳಸಲಾಗುವ ಶಾಖೆಗೆ ಚಲಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ಈ ತಂತ್ರವು ಡೆಡ್ ಕೋಡ್ ಎಲಿಮಿನೇಷನ್ನ ಒಂದು ರೂಪವಾಗಿದ್ದು, ಅದರ ಫಲಿತಾಂಶಗಳನ್ನು ತಿರಸ್ಕರಿಸಿದಾಗ ಅಥವಾ ಬಳಸದಿದ್ದಾಗ ಅದು ಕೋಡ್ ಅನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ, ಆದರೆ ಡೆಡ್ ಕೋಡ್ ಎಲಿಮಿನೇಷನ್ಗೆ ವ್ಯತಿರಿಕ್ತವಾಗಿ, ಆ ಸೂಚನೆಯ ಫಲಿತಾಂಶಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕೋಡ್ ಮಾರ್ಗದಲ್ಲಿ ಬಳಸಬಹುದಾದರೂ ಅದು ಅರ್ಥಹೀನ ಸೂಚನೆಗಳನ್ನು ತೆಗೆದುಹಾಕಬಹುದು. ಪ್ರೋಗ್ರಾಂನ ಗಾತ್ರವನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು ಕೋಡ್ ಫ್ಯಾಕ್ಟರಿಂಗ್ ಎಂಬುದು ಗಾತ್ರ-ಆಪ್ಟಿಮೈಸೇಶನ್ ತಂತ್ರಕ್ಕೆ ಒಂದು ಪದವಾಗಿದ್ದು ಅದು ಶಾಖೆಗಳಲ್ಲಿನ ಸಾಮಾನ್ಯ ಅವಲಂಬನೆಗಳನ್ನು ಅದರ ಮೇಲಿನ ಶಾಖೆಗೆ ವಿಲೀನಗೊಳಿಸುತ್ತದೆ. ಪೂರ್ಣಾಂಕಗಳ ಅಪವರ್ತನೀಯತೆಯು ಒಂದು ಸಂಖ್ಯೆಯನ್ನು ಅದರ ಸಾಧ್ಯವಾದಷ್ಟು ಚಿಕ್ಕ ರೂಪಗಳಾಗಿ (ಅಂಶಗಳಾಗಿ) ವಿಭಜಿಸುವಂತೆಯೇ, ಕೋಡ್ ಅಪವರ್ತನೀಯತೆಯು ಯಾವುದೇ ನಕಲುಗಳು ಉಳಿದಿರದವರೆಗೂ ಸಾಮಾನ್ಯ "ಅಂಶಗಳನ್ನು" ವಿಲೀನಗೊಳಿಸುವ ಮೂಲಕ ಕೋಡ್ ಅನ್ನು ಸಾಧ್ಯವಾದಷ್ಟು ಚಿಕ್ಕ ರೂಪವಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ. ಗ್ಲೋಬಲ್ ಕೋಡ್ ಮೋಷನ್, ಲೋಕಲ್ ಕೋಡ್ ಮೋಷನ್, ಕೋಡ್ ಶೆಡ್ಯೂಲಿಂಗ್, ಇನ್ಸ್ಟ್ರಕ್ಷನ್ ಶೆಡ್ಯೂಲಿಂಗ್ ಮತ್ತು ಕೋಡ್ ಹಾರಿಸುವಿಕೆ/ಸಿಂಕಿಂಗ್ ಇವೆಲ್ಲವೂ ಸಿಪಿಯು ಒಳಗೆ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯ ದಕ್ಷತೆಯನ್ನು ಸುಧಾರಿಸಲು ಸೂಚನೆಗಳನ್ನು ಮರುಹೊಂದಿಸುವ (ಅಥವಾ "ನಿಗದಿತ") ತಂತ್ರದ ಪದಗಳಾಗಿವೆ. ಆಧುನಿಕ ಸಿಪಿಯುಗಳು ಪ್ರತಿ ಗಡಿಯಾರ ಚಕ್ರಕ್ಕೆ ಐದು ಅಥವಾ ಹೆಚ್ಚಿನ ಸೂಚನೆಗಳನ್ನು ನಿಗದಿಪಡಿಸಲು ಸಮರ್ಥವಾಗಿವೆ. ಆದಾಗ್ಯೂ, ಪ್ರಸ್ತುತ (ಅಥವಾ ಇನ್ನೂ ಕಾರ್ಯಗತಗೊಳ್ಳದ) ಸೂಚನೆಯ ದತ್ತಾಂಶವನ್ನು ಅವಲಂಬಿಸಿರುವ ಸೂಚನೆಯನ್ನು ಸಿಪಿಯು ನಿಗದಿಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಸಿಪಿಯು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಹುದಾದ ಸೂಚನೆಗಳ ಪ್ರಮಾಣವನ್ನು ಗರಿಷ್ಠಗೊಳಿಸುವ ರೀತಿಯಲ್ಲಿ ಕಂಪೈಲರ್ಗಳು ಅವಲಂಬನೆಯನ್ನು ಪರಸ್ಪರ ಬಿಡುತ್ತವೆ. ನಿಷ್ಕ್ರಿಯವಾದ ಇಂಟೆಲ್ ಇಟಾನಿಯಂ ವಾಸ್ತುಶಿಲ್ಪದಲ್ಲಿ, ಶಾಖೆಯನ್ನು ತಕ್ಷಣವೇ ಸಿಪಿಯು ತೆಗೆದುಕೊಳ್ಳಲು ಅನುವು ಮಾಡಿಕೊಡಲು ಕಂಪೈಲರ್ ಶಾಖೆಗಳ ಮೇಲೆ ಶಾಖೆಯ ಮುನ್ಸೂಚನೆ (ಬಿಆರ್ಪಿ) ಸೂಚನೆಯನ್ನು ಕೈಯಿಂದ ಹಾರಿಸಲಾಗುತ್ತದೆ. ಪ್ರೊಸೆಸರ್ನಲ್ಲಿ ದಕ್ಷತೆಯನ್ನು ಹೆಚ್ಚಿಸಲು ಇಟಾನಿಯಂ ಸಿಪಿಯುನಿಂದ ಹೆಚ್ಚುವರಿ ಕೋಡ್ ವೇಳಾಪಟ್ಟಿಯನ್ನು ಅವಲಂಬಿಸಿದೆ. ಲೂಪ್-ಇನ್ವೇರಿಯಂಟ್ ಕೋಡ್ ಚಲನೆಯು ಲೂಪ್-ಇನ್ವೇರಿಯಂಟ್ ಕೋಡ್ ಅನ್ನು ಲೂಪ್ನ ಹೊರಗಿನ ಸ್ಥಾನಕ್ಕೆ ಚಲಿಸುವ ಪ್ರಕ್ರಿಯೆಯಾಗಿದೆ, ಇದು ಒಂದೇ ಫಲಿತಾಂಶಕ್ಕಾಗಿ ಕೆಲವು ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಎರಡು ಬಾರಿ ಮಾಡುವುದನ್ನು ತಡೆಯುವ ಮೂಲಕ ಲೂಪ್ನ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು. ಕಂಪೈಲರ್ ಉದಾಹರಣೆಗಳು ಎಲ್ಎಲ್ವಿಎಂ ಎಲ್ಎಲ್ವಿಎಂ ತನ್ನ ಏಕ ಸ್ಥಿರ ನಿಯೋಜನೆಯ ರೂಪದಲ್ಲಿ ಸಿಂಕಿಂಗ್ ಪಾಸ್ ಅನ್ನು ಹೊಂದಿದೆ. ಎಲ್ಎಲ್ವಿಎಂ 15 ಅದರ ಯಾವುದೇ ಕೋಡ್ ಮಾರ್ಗಗಳು ಸ್ಟೋರ್ ಸೂಚನೆಯನ್ನು ಒಳಗೊಂಡಿದ್ದರೆ ಅಥವಾ ಅದು ದೋಷವನ್ನು ಉಂಟುಮಾಡಬಹುದಾದರೆ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಮುಳುಗಿಸುವುದಿಲ್ಲ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಎಲ್ಎಲ್ವಿಎಂ ಒಂದು ಸೂಚನೆಯನ್ನು ಲೂಪ್ನಲ್ಲಿ ಮುಳುಗಿಸುವುದಿಲ್ಲ. ಜಿ. ಸಿ. ಸಿ. ಯು. ಕಂಪೈಲರ್ ಕಲೆಕ್ಷನ್ ಒಂದು ಕಂಪೈಲ್ ಮಾಡಲಾದ ಪ್ರೋಗ್ರಾಂನ ಗಾತ್ರವನ್ನು ಕಡಿಮೆ ಮಾಡುವ ಉದ್ದೇಶದಿಂದ "ಕೋಡ್ ಫ್ಯಾಕ್ಟರಿಂಗ್" ಎಂಬ ಹೆಸರಿನಲ್ಲಿ ಕೋಡ್ ಚಲನೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ. "ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಯಾವುದೇ ಅವಲಂಬನೆಗಳನ್ನು ಅಮಾನ್ಯಗೊಳಿಸದಿದ್ದರೆ ಅಥವಾ ಹೊಸದನ್ನು ಪರಿಚಯಿಸದಿದ್ದರೆ" ಜಿಸಿಸಿ ಯಾವುದೇ ಕೋಡ್ ಅನ್ನು ಮೇಲ್ಮುಖವಾಗಿ ಅಥವಾ ಕೆಳಮುಖವಾಗಿ ಚಲಿಸುತ್ತದೆ. ಲೂಪ್ನೊಳಗೆ ತಾತ್ಕಾಲಿಕ ವಸ್ತುಗಳನ್ನು ಹಂಚಲು ಮತ್ತು ಸಂಗ್ರಹಿಸಲು ಸಂಗ್ರಹಿಸಿದ ಕೋಡ್ ಖರ್ಚು ಮಾಡುವ ಸಮಯವನ್ನು ಕಡಿಮೆ ಮಾಡಲು, ಲುಯಾಜಿಟ್ ಲುಯಾಜಿಟ್ "ಅಲೊಕೇಷನ್ ಸಿಂಕಿಂಗ್" ಎಂಬ ಹೆಸರಿನಲ್ಲಿ ಕೋಡ್ ಸಿಂಕಿಂಗ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಹಂಚಿಕೆ ಮುಳುಗುವಿಕೆಯು ಹಂಚಿಕೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮಾರ್ಗಗಳಿಗೆ ಚಲಿಸುತ್ತದೆ, ಅಲ್ಲಿ ನಿಗದಿಪಡಿಸಿದ ವಸ್ತುವು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಕೋಡ್ನಿಂದ ತಪ್ಪಿಸಿಕೊಳ್ಳಬಹುದು ಮತ್ತು ಆದ್ದರಿಂದ ರಾಶಿ ಹಂಚಿಕೆಯ ಅಗತ್ಯವಿರುತ್ತದೆ. ತೆಗೆದುಹಾಕಲಾದ ಎಲ್ಲಾ ಹಂಚಿಕೆಗಳನ್ನು ತಮ್ಮ ಹೊಲಗಳ ಮೇಲೆ ಲೋಡ್-ಟು-ಸ್ಟೋರ್ ಫಾರ್ವರ್ಡ್ ಮಾಡುವ ಮೂಲಕ ತುಂಬಿಸಲಾಗುತ್ತದೆ. ಲೂಪ್-ಇನ್ವೇರಿಯಂಟ್ ಕೋಡ್ ಮೋಷನ್ ಇನ್ಸ್ಟ್ರಕ್ಷನ್ ಶೆಡ್ಯೂಲಿಂಗ್ ಡಿಪೆಂಡೆನ್ಸಿ ಗ್ರಾಫ್ ರೆಫರೆನ್ಸಸ್ ಕಂಪೈಲರ್ ಆಪ್ಟಿಮೈಸೇಶನ್ಗಳನ್ನು ಸಹ ನೋಡಿ.