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

ÐÂ2ÊÖ»ú»áÔ±¶ËÍøÖ·

ÐÂ2»áÔ±ÊÖ»ú¹ÜÀí¶Ë-ÐÂ2»áÔ±ÊÖ»úÍøÖ·´óÈ«
ÏûºÄÈÕ±¨Íø > ÒªÎÅ

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

ӰƬÆÊÎö!°×ÂéËÖËÖ˽È˶©ÖÆ×î»ð¸èÇúרҵµãÆÀ.Ó°Ï·ÖÐÇáÈáêÓÃÁÐÎò

ʱ¼ä: 2025-10-23 07:16:49 ȪԴ:³ÂÖ¾ÈÙ

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

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

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

ÔÚÕâЩ³¡¾°ÖУ¬¹Å°åµÄÈí¼þ¿ª·¢ÓïÑԺͿò¼Ü£¬ËäÈ»ÔÚÒ×ÓÃÐԺͿª·¢Ð§ÂÊÉÏÓÐËùÓÅÊÆ£¬µ«ÆäÁýͳ²ã¼¶¹ý¸ß£¬ÍùÍùÄÑÒÔ´¥¼°Ó²¼þµÄµ×²ãϸ½Ú£¬´Ó¶øÏÞÖÆÁËÐÔÄܵĽøÒ»²½ÍÚ¾ò¡£´Ëʱ£¬×ÔÓÉ»ã±à£¨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Á¦¡£ÓÉÓÚÆä¹ÌÓеÄÖØ´óÐԺͿÉÒÆÖ²ÐÔÏÞÖÆ£¬×îÃ÷ÖǵÄʵ¼ù·½·¨Êǽ«×ÔÓÉ»ã±àµÄÓÅÊÆÓë¸ß¼¶ÓïÑÔµÄÒ×ÓÃÐÔÏà͎ᣬ½ÓÄÉ»ìÏý±à³ÌµÄÕ½ÂÔ¡£

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

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