×ÔÓÉ»ã±àX¶î¶¨³¡¾°µÄÓÅ»¯Õ½ÂÔÊͷŸßЧÐÔÄܵÄÎÞÏÞDZÁ¦??¡ºÔÚÏßÃâ·Ñ²¥·Å¡»??¡º³©ÏíÒ»Ö±¡»??×ÔÓÉ»ã±àµÄ»ùʯ£ºÃ÷È·¶î¶¨³¡¾°ÏµÄÐÔÄÜÆ¿¾±ÔÚÐÅÏ¢ÊÖÒÕ·ÉËÙÉú³¤µÄ½ñÌì £¬Èí¼þÐÔÄÜÒѳÉΪȨºâÆä¾ºÕùÁ¦µÄÒªº¦Ö¸±ê¡£ÓÈÆäÊÇÔÚÄÇЩ¶ÔÏìÓ¦ËÙÂÊ¡¢×ÊԴʹÓÃÂÊÓÐ×ÅÑÏ¿ÁÒªÇóµÄ¡°¶î¶¨³¡¾°¡±Ï £¬ÀýÈç¸ßƵÉúÒâϵͳ¡¢ÊµÊ±Êý¾ÝÆÊÎöƽ̨¡¢´óÐÍÓÎÏ·ÒýÇæÒÔ¼°Ç¶Èëʽʵʱ¿ØÖÆÏµÍ³µÈ £¬Ï¸Ð¡µÄÐÔÄܲî±ð¶¼¿ÉÄܵ¼ÖÂÖØ´óµÄÉÌÒµ¼ÛÖµËðʧ»òÓû§ÌåÑé¶ÏÑÂʽÏ»¬¡£ÔÚÕâЩ³¡¾°ÖÐ?"> ×ÔÓÉ»ã±àX¶î¶¨³¡¾°µÄÓÅ»¯Õ½ÂÔÊͷŸßЧÐÔÄܵÄÎÞÏÞDZÁ¦">

paµç×Ó¹Ù·½ÍøÕ¾

PA¼¯ÍÅ|Öйú¹ÙÍø
ÏûºÄÈÕ±¨Íø > ÒªÎÅ

×ÔÓÉ»ã±àX¶î¶¨³¡¾°µÄÓÅ»¯Õ½ÂÔÊͷŸßЧÐÔÄܵÄÎÞÏÞDZÁ¦

÷ÈÓ°91Ãâ·Ñ°æ¹Ù·½°æÏÂÔØ-÷ÈÓ°91Ãâ·Ñ°æÕý°æÏÂÔØ

ʱ¼ä: 2025-10-24 01:06:23 ȪԴ:°¢Ã×µÙÆæ

ÍâµØÊ±¼ä2025-10-24

×ÔÓÉ»ã±àµÄ»ùʯ£ºÃ÷È·¶î¶¨³¡¾°ÏµÄÐÔÄÜÆ¿¾±

ÔÚÐÅÏ¢ÊÖÒÕ·ÉËÙÉú³¤µÄ½ñÌì £¬Èí¼þÐÔÄÜÒѳÉΪȨºâÆä¾ºÕùÁ¦µÄÒªº¦Ö¸±ê¡£ÓÈÆäÊÇÔÚÄÇЩ¶ÔÏìÓ¦ËÙÂÊ¡¢×ÊԴʹÓÃÂÊÓÐ×ÅÑÏ¿ÁÒªÇóµÄ¡°¶î¶¨³¡¾°¡±Ï £¬ÀýÈç¸ßƵÉúÒâϵͳ¡¢ÊµÊ±Êý¾ÝÆÊÎöƽ̨¡¢´óÐÍÓÎÏ·ÒýÇæÒÔ¼°Ç¶Èëʽʵʱ¿ØÖÆÏµÍ³µÈ £¬Ï¸Ð¡µÄÐÔÄܲî±ð¶¼¿ÉÄܵ¼ÖÂÖØ´óµÄÉÌÒµ¼ÛÖµËðʧ»òÓû§ÌåÑé¶ÏÑÂʽÏ»¬¡£

ÔÚÕâЩ³¡¾°ÖÐ £¬¹Å°åµÄÈí¼þ¿ª·¢ÓïÑԺͿò¼Ü £¬ËäÈ»ÔÚÒ×ÓÃÐԺͿª·¢Ð§ÂÊÉÏÓÐËùÓÅÊÆ £¬µ«ÆäÁýͳ²ã¼¶¹ý¸ß £¬ÍùÍùÄÑÒÔ´¥¼°Ó²¼þµÄµ×²ãϸ½Ú £¬´Ó¶øÏÞÖÆÁËÐÔÄܵĽøÒ»²½ÍÚ¾ò¡£´Ëʱ £¬×ÔÓÉ»ã±à£¨FreeAssembly£©¡ª¡ªÒ»ÖÖÔÊÐí¿ª·¢ÕßÖ±½ÓʹÓô¦Öóͷ£Æ÷Ö¸ÁîµÄ±à³Ì·¶Ê½ £¬±ã³ÉΪÁËÍ»ÆÆÐÔÄÜÆ¿¾±µÄÀûÆ÷¡£

¡°¶î¶¨³¡¾°¡±²¢·ÇÒ»¸öÀο¿µÄÊÖÒÕÊõÓï £¬¶øÊÇ·ºÖ¸ÄÇЩ¶ÔϵͳÐÔÄÜÓÐ×ÅÃ÷È·ÇҸ߱ê×¼ÒªÇóµÄÓ¦ÓÃÇéÐΡ£Ã÷È·ÕâЩ³¡¾°µÄ¹²ÐÔ £¬ÊǾÙÐÐÓÐÓÃÓÅ»¯µÄÌõ¼þ¡£ÕâЩ³¡¾°Í¨³£¾ßÓм«¸ßµÄÅÌËãÃܶÈ¡£´ó×ڵĸ¡µãÔËËã¡¢ÏòÁ¿ÅÌËã¡¢¾ØÕó³Ë·¨µÈ÷缯ÐÍÅÌËãʹÃüÊÇ˾¿Õ¼û¹ß¡£ËüÃÇÍùÍùÅãͬ׿«µÍµÄʱÑÓÒªÇó £¬ÄÄÅÂÊǺÁÃë¼¶µÄÑÓ³Ù¶¼¿ÉÄÜÎÞ·¨½ÓÊÜ¡£

µÚÈý £¬×ÊÔ´ÊÜÏÞÐÔÒ²Êdz£¼ûÌØµã £¬ÀýÈçÔÚǶÈëʽϵͳÖÐ £¬CPU¡¢ÄÚ´æ¡¢¹¦ºÄµÈ¶¼Êܵ½ÑÏ¿áÏÞÖÆ £¬ÔõÑùÔÚÓÐÏÞ×ÊÔ´ÏÂեȡ×î´óÐÔÄÜÖÁ¹ØÖ÷Òª¡ £¿ÉÕ¹ÍûÐÔÊÇÁíÒ»¸öÒªº¦ÒòËØ £¬ÏµÍ³µÄÐÐΪÐèÒª¸ß¶ÈÎȹ̺ͿÉÕ¹Íû £¬ÒÔ×èÖ¹ÒòÒâÍâµÄÐÔÄܲ¨¶¯µ¼ÖÂϵͳ±ÀÀ£»ò¹¦Ð§Òì³£¡£

ÃæÁÙÕâЩÌôÕ½ £¬×ÔÓÉ»ã±àÌṩÁËØ¨¹ÅδÓеĿØÖÆÁ¦¡£Óë¸ß¼¶ÓïÑÔ²î±ð £¬»ã±àÓïÑÔÖ±½ÓÓ³ÉäËæ´¦Öóͷ£Æ÷µÄÖ¸Á £¬¿ª·¢Õß¿ÉÒÔ׼ȷ¿ØÖÆÃ¿Ò»¸öCPUÖÜÆÚ¡¢Ã¿Ò»¸ö¼Ä´æÆ÷µÄʹÓá¢Ã¿Ò»´ÎÄÚ´æ»á¼ûµÄʱ»ú¡£ÕâʹµÃÎÒÃÇÄܹ»Èƹý¸ß¼¶ÓïÑÔ±àÒëÆ÷¿ÉÄÜÒýÈëµÄÓÅ»¯¿ªÏú £¬»òÕßÔÚ±àÒëÆ÷ÎÞ·¨Ã÷È·µÄÌØ¶¨³¡¾°Ï¾ÙÐÐÊÖ¶¯ÓÅ»¯¡£

×ÔÓÉ»ã±à²¢·ÇÍòÄÜÒ© £¬ÆäÖØ´óÐԺ͵Ϳª·¢Ð§ÂÊÒ²ÊǽûÖ¹ºöÊÓµÄÌôÕ½¡£Òò´Ë £¬½«×ÔÓÉ»ã±àÓ¦ÓÃÓڶ³¡¾° £¬Æä½¹µãÔÚÓÚ¾«×¼¶¨Î»ÐÔÄÜÆ¿¾± £¬²¢½ÓÄÉÕë¶ÔÐÔµÄÓÅ»¯Õ½ÂÔ £¬¶ø²»ÊÇäĿµØ½«ËùÓдúÂëÖØÐ´Îª»ã±à¡£

ÐÔÄÜÆ¿¾±µÄ¶¨Î»ÊÇÓÅ»¯ÊÂÇéµÄÆðµã £¬Ò²ÊÇ×îÒªº¦µÄÒ»²½¡£Ôڶ³¡¾°Ï £¬Æ¿¾±¿ÉÄÜ·ºÆðÔÚCPUÅÌËã¡¢ÄÚ´æ»á¼û¡¢I/O½»»¥ £¬ÉõÖÁÊÇͬ²½»úÖÆµÈ·½Ã档ǿʢµÄÐÔÄÜÆÊÎö¹¤¾ßÊDZز»¿ÉÉÙµÄÖúÊÖ¡£ÀýÈç £¬ÐÔÄܼÆÊýÆ÷£¨PerformanceCounters£©Äܹ»ÌṩCPU½¹µãʹÓÃÂÊ¡¢»º´æÖÀÖÐÂÊ¡¢Ö¸ÁîÖ´ÐзÖÖ§Õ¹Íûʧ°Ü´ÎÊýµÈµ×²ãÓ²¼þÖ¸±ê £¬×ÊÖúÎÒÃÇʶ±ðÊÇCPU÷缯ÐÍÆ¿¾±ÕÕ¾ÉÄÚ´æÑÓ³ÙÆ¿¾±¡£

ÐÔÄÜÆÊÎöÆ÷£¨Profilers£© £¬Èçperf£¨Linux£©¡¢VTune£¨Intel£©µÈ £¬ÔòÄÜÉîÈë´úÂë²ãÃæ £¬Õ¹ÏÖÄÄЩº¯Êý¡¢ÄÄЩ´úÂë¶ÎÏûºÄÁË×î¶àµÄCPUʱ¼ä £¬ÒÔ¼°º¯ÊýŲÓÃµÄÆµÂʺͺÄʱ¡£

ÔÚÃ÷È·Á˶³¡¾°µÄÌØÕ÷²¢ÕÆÎÕÁËÐÔÄÜÆ¿¾±¶¨Î»µÄ¹¤¾ßºó £¬ÎÒÃǾͿÉÒÔ×îÏÈ˼Ë÷×ÔÓÉ»ã±àÔÚÆäÖеÄÏêϸӦÓá£×î³£¼ûµÄ³¡¾°ÊÇÒªº¦ÅÌËã÷缯Ðͺ¯ÊýµÄÓÅ»¯¡£¹ØÓÚÄÇЩռÓÐÁ˾ø´ó²¿·ÖÔËÐÐʱ¼äµÄÑ­»·Ìå»ò½¹µãÅÌË㵥λ £¬Ê¹Óûã±à¾ÙÐÐÊÖ¹¤ÓÅ»¯ £¬¿ÉÒÔʵÏֱȱàÒëÆ÷¸üϸÄåµÄµ÷Àí¡£

ÀýÈç £¬Í¨¹ýÖ¸Áî¼¶²¢ÐУ¨Instruction-LevelParallelism,ILP£© £¬ÎÒÃÇ¿ÉÒÔ½«Ô­±¾Ë³ÐòÖ´ÐеÄÖ¸Áî £¬ÔÚCPUµÄ¶à¸öÖ´Ðе¥Î»Éϲ¢ÐÐÖ´ÐÐ £¬ÏÔÖøËõ¶ÌÖ¸ÁîÖÜÆÚ¡£Ê¹ÓüĴæÖØÊÓÃüÃû£¨RegisterRenaming£©ºÍÂÒÐòÖ´ÐУ¨Out-of-OrderExecution£©µÈÏÖ´úCPUµÄÇ¿Ê¢ÌØÕ÷ £¬ÎÒÃÇ¿ÉÒÔͨ¹ý»ã±à´úÂë¸üÓÐÓõØÖ¸µ¼CPU¾ÙÐÐÖ¸Áîµ÷Àí £¬ïÔÌ­Êý¾ÝÒÀÀµÔì³ÉµÄÆÚ´ý¡£

ÁíÒ»¸öÖ÷ÒªµÄÓÅ»¯Æ«ÏòÊÇÄÚ´æ»á¼ûģʽµÄÓÅ»¯¡£ÔÚÐí¶à¶î¶¨³¡¾°ÖÐ £¬ÄÚ´æ»á¼ûÑÓ³ÙÊÇÖ÷ÒªµÄÐÔÄÜÆ¿¾±¡£×ÔÓÉ»ã±àÔÊÐíÎÒÃÇ׼ȷ¿ØÖÆÊý¾Ý¼ÓÔØºÍ´æ´¢µÄʱ»ú £¬×î´óÏ޶ȵØÊ¹ÓÃCPU»º´æ£¨Cache£©¡£Í¨¹ýԤȡָÁPrefetching£© £¬ÎÒÃÇ¿ÉÒÔÌáǰ½«¼´½«Ê¹ÓõÄÊý¾Ý¼ÓÔØµ½»º´æÖÐ £¬×èÖ¹ÔÚÐèҪʱ±¬·¢»º´æÎ´ÖÀÖУ¨CacheMiss£©¶øµ¼Öµij¤Ê±¼äÆÚ´ý¡£

ºÏÀíµÄÊý¾Ý½á¹¹ºÍ»á¼û˳Ðò £¬Ò²Äܼ«´óµØÌá¸ß»º´æÖÀÖÐÂÊ £¬ïÔÌ­¶ÔÖ÷ÄÚ´æµÄ»á¼û´ÎÊý¡£ÀýÈç £¬Í¨¹ýÏòÁ¿»¯£¨Vectorization£© £¬ÎÒÃÇ¿ÉÒÔ½«Ô­±¾ÐèÒª¶à´Î±êÁ¿²Ù×÷µÄÊý¾Ý´¦Öóͷ£ £¬×ª»¯ÎªÒ»´ÎÏòÁ¿²Ù×÷ £¬Ò»´ÎÐÔ´¦Öóͷ£¶à¸öÊý¾ÝÔªËØ £¬Õâ²»µ«ÄܼÓËÙÅÌËã £¬Ò²ÄÜÔÚÊý¾Ý´«ÊäÉÏ´øÀ´Ð§ÂÊÌáÉý¡£

»ã±à´úÂë¿ÉÒÔϸÄ嵨¿ØÖÆÏòÁ¿¼Ä´æÆ÷µÄʹÓà £¬ÒÔ¼°ÏòÁ¿Ö¸ÁîµÄ×éºÏ £¬ÒÔµÖ´ï×î¼ÑÐÔÄÜ¡£

Ñ­»·Õö¿ª£¨LoopUnrolling£©ºÍÁ÷Ë®ÏßÓÅ»¯£¨Pipelining£©Ò²ÊÇ×ÔÓÉ»ã±àÉÆÓÚÖ®´¦¡£Ñ­»·Õö¿ª¿ÉÒÔïÔÌ­Ñ­»·¿ØÖÆÖ¸ÁîµÄ¿ªÏú £¬²¢ÎªÖ¸Áî¼¶²¢ÐÐÌṩ¸ü¶àµÄ»ú»á¡£¶øÁ÷Ë®ÏßÓÅ»¯ÔòÖ¼ÔÚ¼á³ÖCPUµÄÁ÷Ë®Ïß¾¡¿ÉÄÜÂúÔØ £¬×èÖ¹Òò·ÖÖ§Õ¹Íûʧ°Ü»òÊý¾ÝÒÀÀµµ¼ÖµÄÁ÷Ë®Ïß³åÏ´£¨PipelineFlush£©¡£

ͨ¹ýÔÚ»ã±à²ãÃæ×¼È·µØµ÷½âÖ¸ÁîÐòÁÐ £¬ÎÒÃÇ¿ÉÒÔ×î´ó»¯Á÷Ë®ÏßµÄÍÌÍÂÁ¿¡£

ËäÈ» £¬Ê¹ÓÃ×ÔÓÉ»ã±à²¢·ÇÒ×Ê¡£ËüÐèÒª¶ÔÄ¿µÄ´¦Öóͷ£Æ÷µÄ¼Ü¹¹ÓÐÉî¿ÌµÄÃ÷È· £¬°üÀ¨Ö¸Á¡¢Á÷Ë®Ïß¡¢»º´æ»úÖÆ¡¢·ÖÖ§Õ¹ÍûµÈ¡£´úÂëµÄ¿É¶ÁÐԺͿÉά»¤ÐÔÒ²´ó´ó½µµÍ¡£Òò´Ë £¬Ôڶ³¡¾°Ï £¬ÎÒÃÇͨ³£½ÓÄÉ¡°»ìÏý±à³Ì¡±µÄÕ½ÂÔ£º½«ÐÔÄÜ×îÒªº¦¡¢×îÄÑÒÔÓÅ»¯µÄ²¿·ÖÓÃ×ÔÓÉ»ã±àʵÏÖ £¬ÆäÓà´ó²¿·ÖÂß¼­ÔòʹÓø߼¶ÓïÑÔ±àд £¬²¢Í¨¹ý±àÒëÆ÷¾ÙÐÐÓÅ»¯¡£

ÕâÖÖÕ½ÂÔÄܹ»¼æ¹ËÐÔÄܺͿª·¢Ð§ÂÊ¡£

×ܶøÑÔÖ® £¬Ã÷È·¶î¶¨³¡¾°ÏµÄÐÔÄÜÆ¿¾± £¬ÊÇ×ÔÓÉ»ã±àÓÅ»¯µÄ»ùʯ¡£Í¨¹ýÉîÈëÆÊÎö £¬ÎÒÃÇ¿ÉÒÔ·¢Ã÷CPU÷缯ÐÍÅÌËã¡¢ÄÚ´æ»á¼ûÑÓ³Ù¡¢I/OÆ¿¾±µÈÒªº¦ÎÊÌâ¡£¶ø×ÔÓÉ»ã±à £¬ÒÔÆä¶ÔÓ²¼þµÄµ×²ã¿ØÖÆÄÜÁ¦ £¬ÎªÎÒÃÇÌṩÁËÍ»ÆÆÕâЩƿ¾±µÄÓÐÁ¦¹¤¾ß¡£ÏÂÒ»²¿·Ö £¬ÎÒÃǽ«ÉîÈë̽ÌÖÏêϸµÄ×ÔÓÉ»ã±àÓÅ»¯Õ½ÂÔ £¬ÒÔ¼°ÔõÑùÔÚʵ¼ùÖÐÓÐÓõØÓ¦ÓÃËüÃÇ¡£

×ÔÓÉ»ã±àµÄʵ¼ù£º½âËø¸ßЧÐÔÄܵÄÎÞÏÞDZÁ¦

ÔÚÉÏÒ»²¿·Ö £¬ÎÒÃǵÓÚ¨ÁËÃ÷È·¶î¶¨³¡¾°ºÍÐÔÄÜÆ¿¾±µÄ»ù´¡ £¬²¢ÆðÔ´ÊìϤµ½×ÔÓÉ»ã±àÔÚÍ»ÆÆÕâЩƿ¾±·½ÃæµÄÖØ´óDZÁ¦¡£±¾²¿·Ö½«¾Û½¹ÓÚ×ÔÓÉ»ã±àÔڶ³¡¾°ÏµÄÏêϸÓÅ»¯Õ½ÂÔºÍʵ¼ùÒªÁì £¬ÉîÈëÆÊÎöÔõÑùͨÏ꾡Ä廯µÄ´úÂëµ÷½â £¬ÊͷŸßЧÐÔÄܵÄÎÞÏÞ¿ÉÄÜ¡£

1.¾«×¼¿ØÖÆÖ¸ÁîÁ÷Óë²¢ÐÐÖ´ÐÐ

ÏÖ´ú´¦Öóͷ£Æ÷ÓµÓÐǿʢµÄÖ¸Áî¼¶²¢ÐУ¨ILP£©ÄÜÁ¦ £¬Äܹ»Í¬Ê±Ö´ÐжàÌõÖ¸Áî¡£ÔÚ×ÔÓÉ»ã±à²ãÃæ £¬ÎÒÃÇ¿ÉÒÔͨ¹ýÈ«ÐÄÉè¼ÆÖ¸ÁîÐòÁÐ £¬×î´óÏ޶ȵØÊ¹Óô¦Öóͷ£Æ÷µÄ¶àÖ´Ðе¥Î»¡£Õâ°üÀ¨£º

Ö¸Áîµ÷ÀíÓëÂÒÐòÖ´ÐеÄЭͬ£ºCPUͨ¹ýÂÒÐòÖ´ÐÐÀ´Òþ²ØÖ¸ÁîÑÓ³Ù¡£ÎÒÃÇ¿ÉÒÔͨ¹ý»ã±à´úÂë £¬ÓÐÒâµØ°²ÅÅÖ¸ÁîµÄ˳Ðò £¬ÀýÈ罫×ÔÁ¦µÄÖ¸Áî·ÅÔÚÒ»Æð £¬»òÕß½«ÏûºÄʱ¼ä½Ï³¤µÄÖ¸ÁîÓë¿ÉÒÔ²¢ÐÐÖ´ÐеÄÖ¸Áî½»Ö¯ £¬À´×ÊÖúCPU¸üÓÐÓõؾÙÐе÷Àí £¬ïÔÌ­ÒòÊý¾ÝÒÀÀµ»ò×ÊÔ´³åÍ»Ôì³ÉµÄÍ£Áô¡£

ÀýÈç £¬ÔÚ´¦Öóͷ£Ò»ÏµÁÐ×ÔÁ¦µÄ¸¡µãÔËËãʱ £¬ÈôÊÇÖ±½Óƾ֤¸ß¼¶ÓïÑÔµÄ˳Ðò±àд £¬±àÒëÆ÷¿ÉÄÜÄÑÒÔ·¢Ã÷²¢Ðлú»á¡£¶ø»ã±à¿ÉÒÔÃ÷È·µØ½«ÕâЩÔËËãÖ¸Áî·ÖÅɵ½²î±ðµÄ¸¡µãÖ´Ðе¥Î» £¬ÊµÏÖ²¢ÐС£Ê¹ÓÃÏòÁ¿Ö¸Á£¨SIMD£©£ºÈçSSE,AVX,NEONµÈÏòÁ¿Ö¸Á £¬ÔÊÐíCPUÒ»´ÎÐÔ¶Ô¶à¸öÊý¾ÝÔªËØÖ´ÐÐÏàͬµÄ²Ù×÷¡£

ÔÚͼÏñ´¦Öóͷ£¡¢ÐźŴ¦Öóͷ£¡¢¿ÆÑ§ÅÌËãµÈÁìÓò £¬ÏòÁ¿»¯ÄÜ´øÀ´Êý±¶ÉõÖÁÊýÊ®±¶µÄÐÔÄÜÌáÉý¡£×ÔÓÉ»ã±àÊÇʵÏÖ¸ßЧÏòÁ¿»¯µÄÀíÏëÑ¡Ôñ £¬ÓÉÓÚËüÔÊÐíÎÒÃÇ׼ȷ¿ØÖÆÏòÁ¿¼Ä´æÆ÷µÄʹÓá¢Êý¾Ý´ò°üÓë½â°ü¡¢ÒÔ¼°ÏòÁ¿Ö¸ÁîµÄ×éºÏ¡£ÀýÈç £¬½«Ò»¸öÐèҪѭ»·´¦Öóͷ£¶à¸ö¸¡µãÊýµÄËã·¨ £¬Í¨¹ý»ã±à½«Æäת»¯ÎªÒ»ÏµÁеÄÏòÁ¿¼Ó·¨¡¢³Ë·¨Ö¸Áî £¬¿ÉÒÔ¼«´óµØïÔÌ­Ö´ÐÐʱ¼ä¡£

·ÖÖ§Õ¹ÍûÓëÁ÷Ë®ÏßÓÅ»¯£º²»Êʵ±µÄ·ÖÖ§Õ¹ÍûÊǵ¼ÖÂCPUÁ÷Ë®ÏßÍ£ÁôµÄÖ÷ÒªÔµ¹ÊÔ­ÓÉÖ®Ò»¡£ÔÚ»ã±à²ãÃæ £¬ÎÒÃÇ¿ÉÒÔʵÑ齫Ò×ÓÚÕ¹ÍûµÄ·ÖÖ§£¨ÈçÑ­»·µÄÌõ¼þÅжϣ©°²ÅÅÔÚ¸üÓŵÄλÖà £¬»òÕßͨ¹ýÌØ¶¨µÄÖ¸ÁÈçprefetcht0£©À´Ô¤È¡Êý¾Ý £¬ïÔÌ­Á÷Ë®ÏßÒòÆÚ´ýÊý¾Ý¶ø±¬·¢µÄÍ£Áô¡£

¹ØÓÚһЩÒÑÖª²»»á±¬·¢·ÖÖ§µÄÇéÐÎ £¬ÉõÖÁ¿ÉÒÔ˼Á¿Ê¹Ó÷ÖÖ§Õ¹ÍûÌáÐÑÖ¸ÁÈçpredictϵÁУ© £¬ËäȻЧ¹ûÒò¼Ü¹¹¶øÒì £¬µ«ÓÐʱÄÜ´øÀ´Ï¸Ð¡µÄÌáÉý¡£

2.¼«ÖµÄÄÚ´æ»á¼ûÓÅ»¯

ÄÚ´æ»á¼ûÑÓ³ÙÊÇÐí¶à¸ßÐÔÄÜÅÌËãÖеġ°°¢¿¦Áð˹֮õࡱ¡£×ÔÓÉ»ã±àÄܹ»×ÊÖúÎÒÃÇÔÚÕâ¸ö²ãÃæ×öµ½¼«ÖµÄÓÅ»¯£º

ϸÄ廯»º´æ¿ØÖÆ£ºCPU»º´æµÄÉè¼ÆÊÇΪÁË»º½âÄÚ´æÑÓ³Ù £¬µ«ÆäЧÂʸ߶ÈÒÀÀµÓÚÊý¾ÝµÄ»á¼ûģʽ¡£Í¨¹ý»ã±à £¬ÎÒÃÇ¿ÉÒÔ£ºÔ¤È¡Ö¸ÁPrefetching£©£º×Ô¶¯½«¼´½«Ê¹ÓõÄÊý¾Ý¼ÓÔØµ½»º´æÖС£ÀýÈç £¬ÔÚ±éÀúÒ»¸ö´óÐÍÊý×éʱ £¬¿ÉÒÔÌáǰԤȡºóÐøµÄ¼¸¸öÊý¾Ý¿é £¬È·±£ÔÚÐèҪʱÊý¾ÝÒѾ­Î»ÓÚL1»òL2»º´æÖÐ £¬´Ó¶ø×èÖ¹´ÓÖ÷ÄÚ´æµÄÂþÄ;ôý¡£

Êý¾Ý¶ÔÆëÓëÌî³ä£ºÈ·±£Êý¾Ýƾ֤»º´æÐоÞϸ¶ÔÆë £¬ïÔÌ­¿çÔ½»º´æÐеĻá¼û¡£ÔÚijЩÇéÐÎÏ £¬ÉõÖÁ¿ÉÒÔͨ¹ýÌî³ä£¨Padding£©À´×èֹα¹²Ïí£¨FalseSharing£© £¬¼´¶à¸öCPU½¹µãͬʱ»á¼û²î±ðÊý¾Ý £¬µ«ÕâЩÊý¾ÝǡǡλÓÚͳһ¸ö»º´æÐÐ £¬µ¼Ö»º´æÒ»ÖÂÐÔЭÒéµÄƵÈÔͬ²½¿ªÏú¡£

»º´æÖØÓÃÕ½ÂÔ£ºÍ¨¹ý»ã±à´úÂë £¬¿ÉÒÔ¸ü׼ȷµØ¿ØÖÆÊý¾ÝµÄ¼ÓÔØºÍʹÓÃʱ»ú £¬×î´ó»¯»º´æµÄÖÀÖÐÂÊ¡£ÀýÈç £¬ÔÚ´¦Öóͷ£Ò»¸ö¶þάÊý×éʱ £¬¿ÉÒÔͨ¹ý»ã±à´úÂëÀ´È·±£ÔÚÅÌËãijһÐÐʱ £¬¸ÃÐеÄÊý¾Ý¾¡¿ÉÄܳ¤Ê±¼äµØ±£±£´æ»º´æÖÐ £¬²¢ÔÚÅÌËãÏÂÒ»ÐÐʱ £¬¾¡¿ÉÄÜÖØÓÃÒѼÓÔØµÄÊý¾Ý¡£ïÔÌ­ÄÚ´æ´ø¿íÕ¼ÓãºÔÚ´ø¿íÊÜÏÞµÄÇéÐÎÏ £¬ïÔÌ­²»ÐëÒªµÄÊý¾Ý´«ÊäÖÁ¹ØÖ÷Òª¡£

»ã±à¿ÉÒÔ×ÊÖúÎÒÃÇ£ºÊ¹Óøü½ô´ÕµÄÊý¾ÝÀàÐÍ£ºµ±¾«¶ÈÔÊÐíʱ £¬Ñ¡ÔñÕ¼ÓøüÉÙÄÚ´æµÄÊý¾ÝÀàÐÍ¡£Ïû³ýÈßÓà¼ÓÔØ£º×èÖ¹ÖØ¸´¼ÓÔØÏàͬµÄÊý¾Ýµ½¼Ä´æÆ÷ÖС£ÓÅ»¯Êý¾Ý´ò°ü£º½«¶à¸öСÊý¾ÝÏî´ò°ü³ÉÒ»¸ö¸ü´óµÄÊý¾Ý½á¹¹ £¬ÒÔ¸üÉÙµÄÄÚ´æ»á¼û´ÎÊýÍê³ÉÏàͬµÄÊý¾Ý²Ù×÷¡£

3.Ñ­»·Ó뺯Êý¼¶±ðµÄÓÅ»¯

Ñ­»·Õö¿ª£¨LoopUnrolling£©£ºïÔÌ­Ñ­»·¿ØÖÆÖ¸ÁîµÄ¿ªÏú £¬²¢ÎªÖ¸Áî¼¶²¢ÐÐÌṩ¸ü¶àµÄÖ´Ðлú»á¡£Í¨¹ý»ã±à £¬ÎÒÃÇ¿ÉÒÔ׼ȷ¿ØÖÆÕö¿ªµÄˮƽ £¬ÕÒµ½ÐÔÄܺʹúÂë¾Þϸ֮¼äµÄ×î¼Ñƽºâµã¡£º¯ÊýÄÚÁª£¨FunctionInlining£©£ºËäÈ»±àÒëÆ÷ͨ³£»á¾ÙÐк¯ÊýÄÚÁª £¬µ«ÓÐʱËü¿ÉÄÜÓÉÓÚ´úÂëÁ¿¹ý´ó»òijЩԵ¹ÊÔ­Óɶø·ÅÆú¡£

ÔÚ»ã±à²ãÃæ £¬ÎÒÃÇ¿ÉÒÔ×Ô¶¯¾ÙÐк¯ÊýÄÚÁª £¬Ïû³ýº¯ÊýŲÓõĿªÏú £¬²¢¿ÉÄÜ·¢Ã÷еÄÓÅ»¯»ú»á¡£²éÕÒ±í£¨LookupTables£©£º¹ØÓÚһЩÅÌËãÁ¿´óµ«ÊäÈë¹æÄ£ÓÐÏ޵ĺ¯Êý £¬Ê¹ÓòéÕÒ±í¿ÉÒÔÏÔÖøÌáÉýÐÔÄÜ¡£»ã±à¿ÉÒÔ¸ßЧµØ»á¼ûºÍʹÓÃÕâЩ²éÕÒ±í¡£

4.ʵ¼ùÖеÄÌôÕ½Óë»ìÏý±à³ÌÕ½ÂÔ

Ö»¹Ü×ÔÓÉ»ã±àÌṩÁËǿʢµÄÓÅ»¯ÄÜÁ¦ £¬µ«ÔÚʵ¼ùÖÐÒ²ÃæÁÙÖî¶àÌôÕ½£º

¸ß°ºµÄѧϰ±¾Ç®Ó뿪¾Ùʶȣº»ã±àÓïÑÔÓëÓ²¼þ¼Ü¹¹Ï¸ÃÜÏà¹Ø £¬ÐèÒªÉîÈëÃ÷È·Ö¸Á¡¢¼Ä´æÆ÷¡¢ÄÚ´æÄ£×ӵȡ £¿ª·¢ºÍµ÷ÊÔ»ã±à´úÂëºÄʱºÄÁ¦¡ £¿ÉÒÆÖ²ÐÔ²î£ºÎªÌØ¶¨´¦Öóͷ£Æ÷¼Ü¹¹±àдµÄ»ã±à´úÂë £¬Í¨³£ÎÞ·¨ÔÚÆäËû¼Ü¹¹ÉÏÔËÐС£´úÂë¿É¶ÁÐÔÓë¿Éά»¤ÐԲ¸ß¶ÈÓÅ»¯µÄ»ã±à´úÂëÍùÍùÄÑÒÔÃ÷È·ºÍά»¤¡£

Òò´Ë £¬Ôڶ³¡¾°Ï £¬×îÏÖʵÓÐÓõÄÕ½ÂÔÊÇ¡°»ìÏý±à³Ì¡±¡£¼´ £¬½«³ÌÐòµÄ´ó²¿·ÖÂß¼­Óø߼¶ÓïÑÔ£¨ÈçC/C++£©±àд £¬Ê¹ÓÃÆä¸ßЧµÄ¿ª·¢ÐԺͿÉά»¤ÐÔ¡£È»ºó £¬Ê¹ÓÃÐÔÄÜÆÊÎö¹¤¾ß£¨Èçperf,VTune£©×¼È·ÕÒ³öÐÔÄÜÆ¿¾±ËùÔÚµÄÒªº¦º¯Êý»ò´úÂë¶Î £¬²¢½ö½«ÕâЩ²¿·ÖÓÃ×ÔÓÉ»ã±à¾ÙÐÐÖØÐ´»òÓÅ»¯¡£

ÄÚÁª»ã±à£¨InlineAssembly£©£ºÕâÊÇ×î³£ÓõĻìÏý±à³Ì·½·¨¡£ÔÚC/C++´úÂëÖÐ £¬¿ÉÒÔÖ±½ÓǶÈë»ã±àÖ¸Áî¡£ÕâÔÊÐíÎÒÃÇϸÃÜÍŽá¸ß¼¶ÓïÑԵı㵱ÐԺͻã±àµÄµ×²ã¿ØÖÆÄÜÁ¦¡£ÀýÈ磺

intresult;asmvolatile("movl%1,%0;"//movlsource,destination"addl$5,%0;"//addlimmediate_value,destination:"=r"(result)//outputoperand:"=r"meansresultisinageneral-purposeregister:"r"(initial_value)//inputoperand:"r"meansinitial_valueisinageneral-purposeregister://clobberedregisters,ifany);

ÕâÖÖ·½·¨Äܹ»×î´óÏ޶ȵØïÔÌ­ÉÏÏÂÎÄÇл»µÄ¿ªÏú £¬²¢Ê¹»ã±à´úÂëÓë¸ß¼¶ÓïÑԵıäÁ¿ºÍÀàÐÍϸÃÜñîºÏ¡£

×ÔÁ¦µÄ»ã±àÎļþ£º¹ØÓÚÌØÊâÖØ´ó»òÐÔÄÜÒªÇ󼫸ߵÄÄ £¿é £¬¿ÉÒÔ½«Æä±àд³É×ÔÁ¦µÄ»ã±àÔ´Îļþ £¬È»ºó±àÒë³ÉÄ¿µÄÎļþ £¬ÔÙÓë¸ß¼¶ÓïÑÔµÄÄ¿µÄÎļþÒ»ÆðÁ´½Ó³É×îÖյĿÉÖ´ÐгÌÐò¡£

½áÂÛ

×ÔÓÉ»ã±à²¢·ÇÖ¼ÔÚÈ¡´ú¸ß¼¶ÓïÑÔ £¬¶øÊÇÔÚÌØ¶¨¡°¶î¶¨³¡¾°¡±Ï £¬×÷ΪһÖÖǿʢµÄÔö²¹ºÍÀ©Õ¹¡£Í¨¹ý¶ÔÖ¸ÁîÁ÷µÄ¾«×¼¿ØÖÆ¡¢ÄÚ´æ»á¼ûµÄ¼«ÖÂÓÅ»¯¡¢ÒÔ¼°¶ÔÑ­»·ºÍº¯ÊýµÄÉî¶Èµñ×Á £¬×ÔÓÉ»ã±àÄܹ»ÊͷųöÒþ²ØÔÚÓ²¼þ֮ϵĸßЧÐÔÄܵÄÎÞÏÞDZÁ¦¡£ÓÉÓÚÆä¹ÌÓеÄÖØ´óÐԺͿÉÒÆÖ²ÐÔÏÞÖÆ £¬×îÃ÷ÖǵÄʵ¼ù·½·¨Êǽ«×ÔÓÉ»ã±àµÄÓÅÊÆÓë¸ß¼¶ÓïÑÔµÄÒ×ÓÃÐÔÏàÍŽá £¬½ÓÄÉ»ìÏý±à³ÌµÄÕ½ÂÔ¡£

׼ȷµØÊ¶±ðÐÔÄÜÆ¿¾± £¬²¢ÓÐÕë¶ÔÐÔµØÔËÓÃ×ÔÓÉ»ã±à¾ÙÐÐÓÅ»¯ £¬²Å»ªÔÚ°ü¹Ü¿ª·¢Ð§ÂʵÄΪÄúµÄÏîÄ¿´øÀ´Öʵı¼ÌÚ £¬ÔÚÇ¿ÁÒµÄÊÖÒÕ¾ºÕùÖÐÍÑÓ±¶ø³ö¡£

±êÇ©:
±à¼­: ÀîÖ¾Ô¶
ÍøÕ¾µØÍ¼