ಒಂದು ಶ್ರೇಣಿಯಲ್ಲಿನ ಚಿಹ್ನೆಯನ್ನು ಹುಡುಕಲು ಬಳಸಲಾಗುವ memchr() ಫಂಕ್ಷನ್ನ ಆಪ್ಟಿಮೈಸ್ಡ್ ಅಳವಡಿಕೆಯೊಂದಿಗೆ ಪ್ಯಾಚ್ಗಳ ಸೆಟ್ ಅನ್ನು ಲಿನಕ್ಸ್ ಕರ್ನಲ್ನಲ್ಲಿ ಸೇರಿಸಲು ಪ್ರಸ್ತಾಪಿಸಲಾಗಿದೆ. ಬೈಟ್-ಬೈ-ಬೈಟ್ ಹೋಲಿಕೆ ಬಳಸಿದ ಹಳೆಯ ಆವೃತ್ತಿಯಂತಲ್ಲದೆ, 64- ಮತ್ತು 32-ಬಿಟ್ CPU ರೆಜಿಸ್ಟರ್ಗಳ ಸಂಪೂರ್ಣ ಬಳಕೆಯನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಂಡು ಪ್ರಸ್ತಾವಿತ ಅನುಷ್ಠಾನವನ್ನು ನಿರ್ಮಿಸಲಾಗಿದೆ. ಬೈಟ್ಗಳ ಬದಲಿಗೆ, ಯಂತ್ರದ ಪದಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಹೋಲಿಕೆಯನ್ನು ನಡೆಸಲಾಗುತ್ತದೆ, ಇದು ಒಂದು ಸಮಯದಲ್ಲಿ ಕನಿಷ್ಠ 4 ಬೈಟ್ಗಳನ್ನು ಹೋಲಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
ದೊಡ್ಡ ತಂತಿಗಳಲ್ಲಿ ಹುಡುಕುವಾಗ, ಹೊಸ ಆಯ್ಕೆಯು ಹಳೆಯದಕ್ಕಿಂತ ಸುಮಾರು 4 ಪಟ್ಟು ವೇಗವಾಗಿರುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, 1000 ಅಕ್ಷರಗಳ ತಂತಿಗಳಿಗೆ). ಸಣ್ಣ ತಂತಿಗಳಿಗೆ, ಹೊಸ ಅನುಷ್ಠಾನದ ದಕ್ಷತೆಯು ಅಷ್ಟು ಮಹತ್ವದ್ದಾಗಿಲ್ಲ, ಆದರೆ ಮೂಲ ಆವೃತ್ತಿಗೆ ಹೋಲಿಸಿದರೆ ಇನ್ನೂ ಹೆಚ್ಚಾಗಿರುತ್ತದೆ. Linux ಕರ್ನಲ್ನಲ್ಲಿ, memchr() ನಲ್ಲಿ ಸಂಸ್ಕರಿಸಿದ ತಂತಿಗಳ ಗಾತ್ರವು 512 ಬೈಟ್ಗಳನ್ನು ತಲುಪುತ್ತದೆ. 512 ಬೈಟ್ ಸ್ಟ್ರಿಂಗ್ಗಳ ಕಾರ್ಯಕ್ಷಮತೆಯ ಲಾಭವು, ಸ್ಟ್ರಿಂಗ್ನ ಕೊನೆಯಲ್ಲಿ ಹುಡುಕಲಾದ ಅಕ್ಷರವು 20% ಆಗಿದೆ.
5.18-ಬಿಟ್ ಮತ್ತು 32-ಬಿಟ್ ಆರ್ಕಿಟೆಕ್ಚರ್ಗಳಿಗಾಗಿ ಹೊಸ "memchr()" ಆಯ್ಕೆಯೊಂದಿಗೆ 64 ಕರ್ನಲ್ ಅನ್ನು ಪರೀಕ್ಷಿಸುವುದರಿಂದ ಯಾವುದೇ ತೊಂದರೆಗಳು ಕಂಡುಬಂದಿಲ್ಲ. "memchr()" ನ ಆಪ್ಟಿಮೈಸ್ಡ್ ಆವೃತ್ತಿಯನ್ನು ಬಳಸುವಾಗ ಕರ್ನಲ್ ಉಪವ್ಯವಸ್ಥೆಗಳ ಒಟ್ಟಾರೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ಲಾಭವನ್ನು ಇನ್ನೂ ಮೌಲ್ಯಮಾಪನ ಮಾಡಲಾಗಿಲ್ಲ, ಅಥವಾ ಅನುಷ್ಠಾನವನ್ನು ಬದಲಿಸುವ ಕಾರ್ಯಸಾಧ್ಯತೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಲಾಗಿಲ್ಲ (ಕರ್ನಲ್ ಕೋಡ್ನಲ್ಲಿ, memchr() ಕಾರ್ಯಕ್ಕೆ ಕರೆಗಳು 129 ಬಾರಿ ಸಂಭವಿಸುತ್ತವೆ , ಡ್ರೈವರ್ಗಳು ಮತ್ತು ಫೈಲ್ ಸಿಸ್ಟಮ್ಗಳ ಕೋಡ್ ಸೇರಿದಂತೆ).
ಮೂಲ: opennet.ru