1-2 ?‹åˆ¥?½æ•¸?„è??‚方法ï?程å?計æ???

«e¤@¸`©Ò¤¶²Ðªº­p®É¤èªk¥u¬O¤@­Óª½±µ¦³®Äªº¤èªk¡A¦ý¥u¯à¹ï¤@¬qµ{¦¡½X¶i¦æ­p®É¡C¥»¸`±N¤¶²Ð MATLAB ªº¡uµ{¦¡­p®É¾¹¡v¡]Profiler¡A²ºÙ­p®É¾¹¡^¡A¥¦¥i¥H¤À§O­pºâ¨C¤@­Ó«ü¥O©Ò¦û¥Îªº°õ¦æ®É¶¡¡A¨Ã¦C¥X¸Ô²Óªº²Î­pªí¡C¤×¨ä·í§Aªº¨ç¦¡¤S©I¥s¤F¨ä¥L¨ç¦¡¡A¦b¦p¦¹¤@¼h¥]¤@¼hªº±¡ªp¤U¡A°ß¦³¨Ï¥Î MATLAB ­p®É¾¹¤~¯à¦³®Ä¦a­pºâ¥X¨C¤@­Ó¨ç¦¡©Òªáªº®É¶¡¡A¨Ã¶i¦Ó¶i¦æ§ï¶i¡A¥i¯àªº§ï¶i¤è¦V¬O¡G

¦pªG§Aªºµøµ¡§@·~¨t²Î¨Ï¥Î¤F Intel ¦h®Ö¤ß´¹¤ù¡A¬°¤F¨Ï­p®É¾¹¯à°÷¹F¨ì³Ìí©wªºµ²ªG¡A§A¥²¶·¥ý«ü©w MATLAB ¥u¯à¨Ï¥Î¤@­Ó®Ö¤ß¡A¤èªk¦p¤U¡G
  1. «ö¤U Ctrl-Alt-Delete ¥H±Ò°Ê¤u§@ºÞ²z­û¡C
  2. ÂI¿ï¡u³B²zµ{§Ç¡v¤À­¶¡C
  3. ¥H¥kÁäÂI¿ï MATLAB.exe¡A¨Ã¿ï¾Ü¡u³]©w¿Ë©M©Ê(A)...¡v¡C
  4. ¥uÂI¿ï¡uCPU 0¡v¡A¨Ï MATLAB.exe ¥u¯à¦b¦¹®Ö¤ß¤W°õ¦æ¡C
¦pªG§A¬O¨Ï¥Î Linux/Unix §@·~¨t²Î¡A¥i¥H¨Ï¥Î©R¥O¦C¨Ó«ü©w MATLAB ¥u¯à¨Ï¥Î¤@­Ó®Ö¤ß¡A¤èªk¦p¤U¡G
  1. ¥ý¨Ï¥Î¤U¦C«ü¥O§ä¥X MATLAB ©Ò¹ïÀ³ªºµ{§Ç½s¸¹¡]Process ID, or PID¡^¡G
    ps -C MATLAB
  2. °²³] PID ¬O 8674¡A«h§Ú­Ì¥i¥H¨Ï¥Î¤U¦C«ü¥O¨Ó¬d¸ß MATLAB ¥i¥H¨Ï¥Îªº®Ö¤ß¡G
    taskset -pc 8674
  3. ³Ì«á¡A§Ú­Ì¥i¥H³]©w MATLAB ¥u¥Î¤@­Ó®Ö¤ß¡G
    taskset -pc 0 8674
¡]·í§A¨Ï¥Î§¹ MATLAB ­p®É¾¹«á¡A°O±o±N³o¨Ç³]©w§ï¦^­ì¥ýªº³]©w¡C¡^

MATLAB ­p®É¾¹ªº«ü¥O¬O profile¡A¦b¨ä«á¥i¥[¤W¤£¦Pªº¿ï¶µ¡A¥H¥Nªí¤£¦P¥\¯à¡C¨Ò¦p¡A­Y­n¹ï for °j°é¤Î©Ò¥Î¨ìªº«ü¥O¤À§O­p®É¡A¥i¥H°Ñ¦Ò¤U¦C½d¨Ò¡G

Example 1: 01-µ{¦¡­p®É/profile01.mprofile on % ±Ò°Ê­p®É¾¹ for i = 1:1000 a = inv(rand(100)); % ­pºâ 100x100 ¶Ã¼Æ¯x°}ªº¤Ï¯x°} b = mean(rand(100)); % ­pºâ 100x100 ¶Ã¼Æ¯x°}ªº¨C¤@ª½¦æ¥­§¡­È end profile viewer % §e²{­p®Éµ²ªG

°õ¦æ§¹¤W­zµ{¦¡½X«á¡AMATLAB ·|±N°õ¦æ©Òªá¶O®É¶¡ªº²Î­p¸ê®ÆÅã¥Ü¥X¨Ó¡A¦p¤U¹Ï¡G

¥Ñ¤W¹Ï¥i±oª¾¡Amean «ü¥O¦@³Q©I¥s¤F 1000 ¦¸ ¡A¦û¥Îªº Total Time ¬O 0.038 ¬í¡]¥]§t¦b mean ¤º³¡©Ò¦³©I¥s¨ä¥L¨ç¦¡ªº®É¶¡¡^¡A¦Ó Self Time ¥u¦³ 0.022 ¬í¡A¦¹®É¶¡¨Ã¤£¥]§t mean ¨ç¦¡¡]¦b¦¹¬° M Àɮס^¤º³¡©I¥s¨ä¥L¨ç¦¡©Òªáªº®É¶¡¡C¦¹¥~¡Ainv ©M rand ¦U³Q©I¥s 1000 ©M 2000 ¦¸¡A¦]¬°³o¨â­Ó«ü¥O³£¬O³£¬O¤º«Ø«ü¥O¡A¦]¦¹¥L­Ìªº Total Time ·|µ¥©ó Self Time¡A©Òªáªº®É¶¡³£¥i¥H¥Ñ¤Wªí¤@¥ØÁAµM¡C

Hint
±ýª¾¤@«ü¥O¬O¤º«Ø«ü¥O©Î¬O M ÀɮסA¥Î which «ü¥OÀ˵ø¨ä¨Ó·½§Y¥i¡CŪªÌ¥i¿é¤J which mean ¤Î which inv¡A¬Ý¬Ý¶Ç¦^°T®§¤§¤£¦P³B¡C

­Y­nª¾¹D mean ¨ç¦¡ªº¤º³¡­p®É±¡ªp¡A¥i¥HÂI¿ï¤W­zµøµ¡ªº ¡§mean¡¨ ³sµ²¡Aµ²ªG¦p¤U¡G

¥Ñ¤W¹Ï¥i¥H±o¨ì mean ¨ç¦¡ªº¤º³¡­p®Éµ²ªG¡A§Ú­Ì¬Æ¦Ü¥i¥H¬Ý¨ì³Ìªá®É¶¡ªº±Ô­z¥X²{¦b²Ä 28 ¦C¡A®Ú¾Ú³o¨Ç°T®§¡A§Ú­Ì´N¥i¥H¨Ï¥Î¡u¾à¸é¾à¤ý¡vªº­ì«h¨Ó¹ï¦¹¦C¶i¦æ³Ì¨Î¤Æ¡A¥H¨D¾ãÅé­pºâ³t«×ªº´£ª@¡C¦b¤W¹Ï¦Cªí¡A¥ç¥]§t¤F©Ò¦³¤º«Ø«ü¥Oªº­p®É¸ê®Æ¡C¦¹®É­Y¦AÂI¿ï¥ô¤@­Ó¨ç¦¡³sµ²¡A´N¥i¥H§ó²M·¡¦a¬Ý¥X¨C¤@­Ó«ü¥Oªº parent «ü¥O¡]§Y©I¥s¦¹«ü¥Oªº¤W¼h«ü¥O¡^©M children «ü¥O¡]§Y³Q¦¹«ü¥O©Ò©I¥sªº¤U¼h«ü¥O¡^¡A¥H¤Î¥L­Ì¦U¦Û©Ò¦û¥Îªº®É¶¡¡C

¦b¤W­z½d¨Ò¤¤¡AMATLAB ­p®É¾¹¦b¹w³]ªº±¡ªp¤U¡A¬O¹ï©Ò¦³ªº¨ç¦¡¶i¦æ­p®É¡A³o¨Ç¨ç¦¡¥]§t M ÀɮסBMEX ÀɮסA¥H¤Î¤º«Ø«ü¥O¡C¦ý³q±`¤º«Ø«ü¥O¤w¸g¬O³Ì¨Î¤Æªºª¬ºA¡A³q±`¤£¤Ó¥i¯à¥h¥[³t¡A§Ú­Ì¥i¥H§ïÅÜ­p®É¾¹¡A¥u°w¹ï M ÀɮפΠMEX ÀÉ®×¶i¦æ­p®É¡A¦]¬°³o¨âºØÀɮפ~¤ñ¸û¦³§ïµ½ªºªÅ¶¡¡C±ý¨Ï profile «ü¥O¥u¹ï M ÀɮפΠMEX ÀÉ®×¶i¦æ­p®É¡A¥i¦b profile on ¤§«á±µ¤W¡u-detail mmex¡v¡A¨Ò¦p¡G

Example 2: 01-µ{¦¡­p®É/profile02.mprofile on -detail mmex % ±Ò°Ê­p®É¾¹¡A¹ï M/MEX ÀÉ®×­p®É for i = 1:1000 a = inv(rand(100)); % ­pºâ 100x100 ¶Ã¼Æ¯x°}ªº¤Ï¯x°} b = mean(rand(100)); % ­pºâ 100x100 ¶Ã¼Æ¯x°}ªº¨C¤@ª½¦æ¥­§¡­È end profile viewer % §e²{­p®Éµ²ªG

¦¹®É­p®Éµ²ªG±N¥u¦³¥]§t M ÀɮפΠMEX ÀɮסA¦p¤U¹Ï¡G

¥Ñ©ó§Ú­Ì¥u¦b·N M Àɮס]³o¸Ì¥u¦³ mean «ü¥O¡^©M MEX Àɮס]¦b³o¸Ì¨Ã¥¼¥X²{¡^ªº°õ¦æ®É¶¡¡A©Ò¥H¾ã­Ó³øªíÅܱo¬Û·í²³æ¡C§Ú­Ì¤´µM¥i¥HÂI¿ï¤W­zµøµ¡ªº ¡§mean¡¨ ³sµ²¡A´N¥i¥H¬Ý¨ì¦¹¨ç¦¡¤º³¡°õ¦æ©Òªáªº®É¶¡¡C

Hint
  • profile -detail builtin: ¹ï©Ò¦³¨ç¦¡¡]§t M/MEX ÀɮסB¤º«Ø«ü¥O¡^­p®É¡A¦¹¬°¹w³]­È
  • profile -detail mmex: ¥u¹ï M/MEX ÀÉ®×­p®É


MATLABµ{¦¡³]­p¡G¶i¶¥½g