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

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

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

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

A¼¶ÍøÕ¾½ÒÃØA¼¶ÍøÕ¾ÓÅÊÆ´òÔìÍøÂ籦²Ø¿â,̽Ë÷¸ßÐ§ÍøÂçÀûÆ÷-´óËþ

ʱ¼ä: 2025-10-24 05:00:07 ȪԴ:°¢Ã·ÀûÑÇ

ÍâµØÊ±¼ä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Á¦ ¡£ÓÉÓÚÆä¹ÌÓеÄÖØ´óÐԺͿÉÒÆÖ²ÐÔÏÞÖÆ£¬×îÃ÷ÖǵÄʵ¼ù·½·¨Êǽ«×ÔÓÉ»ã±àµÄÓÅÊÆÓë¸ß¼¶ÓïÑÔµÄÒ×ÓÃÐÔÏà͎ᣬ½ÓÄÉ»ìÏý±à³ÌµÄÕ½ÂÔ ¡£

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

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