In article <dc95c98e.03102...@posting.google.com>
ki...@s05.itscom.net (Kiwi) writes:
> ããããã€ã³ã©ã€ã³å±éãè¡ããšãããã°ã©ã é åãèšãããå®è¡é床ãäžããã
> ãšèããŸãããããã°ã©ã é åãèšããããšã«ãã£ãŠåœä»€ãã£ãã·ã¥ã®ãããçã
> äžãã£ãŠå®è¡é床ãäžããããšããããšã¯ç¡ãã®ã§ãããã?
ãããããªããïŒããšåããããšããã¡ããçãã¯ããããã§ãã
ã€ã³ã©ã€ã³å±éããæ¹ãåŸãããªãæ¹ãåŸãããªã«ãäºæž¬ã§ããã
ã§ããããå
šéšã®ã³ãŒããäžæ§ã«å®è¡ããããšããããšãªãããŸã
ãªããšããªããããªæ°ãããŸããã©ãã³ãŒãã®å®è¡åæ°ã®äºæž¬ãé£
ããã§ãããã
ãã£ãã·ã¥ã®ã©ã€ã³ãã¶ã€ãããšãã話ãããã®ã§ããããŠã³ãŒã
ã倧ããããæ¹ããå
šäœçã«ã¯åŸãšãã話ããããã§ããããã
å®éã«ã€ã³ã©ã€ã³å±éããªã³ã«ããããªãã«ãããããŠèµ°ãããŠã¿
ãŠå®è¡æéãå³ã£ãŠã¿ãããšã¯ãããã§ãããCPU ãšãã¬ãžã¹ã¿æ°
ãšãã«ãã£ãŠãéãã§ãããããåã«è©Šããã®ã¯ãSPARC ã®ã¬ãžã¹
ã¿ã»ãŠã€ã³ããŠã®å¹æã調ã¹ããšãããã®ã§ããçãã¯ããŒã«ã«å€
æ°ããŠã€ã³ããŠã«å
¥ããããã®å±éããæ¹ããããšããããšã ã£ã
ãšæããŸãããã¬ãžã¹ã¿ã»ãŠã€ã³ããŠããããšæç¶ãåŒåºããèŠã«
ã¯ãªããªãã¯ããªãã ããã©ãå²èŸŒã¿ããã£ããã¹ã¬ããã®ã³ã³ã
ãã¹ãåæ¿ãããªã©ã®å€ä¹±ããããšããã©ãã·ã¥ããããã
> ãªããã€ã³ã©ã€ã³å±éããŠãããã°ã©ã é åãå°ããå Žåãããããšã¯ç¥ã£ãŠããŸãã
ã€ã³ã©ã€ã³å±éã©ããããif æãšãé¢æ°åŒåºãããå¢ããããæ¹
ãéããšããããšããããããå°ããã§ããããäžçæžåœãæ°ãã
æ¹åŒãèããŠïŒïŒïŒ
éãããã€ãããããã®æã®å€åã«é»ãŸããŠã
ãŸãå¹æãå³ããªããšããããšããããŸãã
å
ã®èšäºã¯ãfj.comp.lang.c++ ã«æçš¿ããããã§ãããC++èšèªãš
ã¯ç¬ç«ãã話ãå€ãã®ã§ã Followup-To: fj.comp.arch ãšããŠã
ããŸãã
ãæ°åãéãïŒãããããããããïŒã
ãç波倧åŠãé»åã»æ
å ±ããããããã
In article <YAS.03Oc...@kirk.is.tsukuba.ac.jp>, y...@is.tsukuba.ac.jp (Yasushi Shinjo) writes
> ã€ã³ã©ã€ã³å±éããæ¹ãåŸãããªãæ¹ãåŸãããªã«ãäºæž¬ã§ããã
> ã§ããããå
šéšã®ã³ãŒããäžæ§ã«å®è¡ããããšããããšãªãããŸã
> ãªããšããªããããªæ°ãããŸããã©ãã³ãŒãã®å®è¡åæ°ã®äºæž¬ãé£
> ããã§ãããã
ãã¶ãããããã話ã¯ãinline ã£ãŠã®ãç¥ããšãå
šéšã«inlineã
ä»ãããã£ãŠèšãåŠçã®ããã«ãããã ãšæãã
æ¬åœã«æ©ããªã£ããã©ããå®æž¬ããã£ãŠããè¯ãæ©äŒã«ã¯ãªã
ãã ãã©ã
>åã«è©Šããã®ã¯ãSPARC ã®ã¬ãžã¹
> ã¿ã»ãŠã€ã³ããŠã®å¹æã調ã¹ããšãããã®ã§ããçãã¯ããŒã«ã«å€
> æ°ããŠã€ã³ããŠã«å
¥ããããã®å±éããæ¹ããããšããããšã ã£ã
> ãšæããŸãããã¬ãžã¹ã¿ã»ãŠã€ã³ããŠããããšæç¶ãåŒåºããèŠã«
> ã¯ãªããªãã¯ããªãã ããã©ãå²èŸŒã¿ããã£ããã¹ã¬ããã®ã³ã³ã
> ãã¹ãåæ¿ãããªã©ã®å€ä¹±ããããšããã©ãã·ã¥ããããã
ã¬ãžã¹ã¿ãŠã£ã³ãã¯ãå¿
ãã·ãããããã®ã§ããã€ããŠã£ã³ãã®
ãã©ãã·ã¥ã«ãŒãã³ãåŒã°ãªããšãããªããã¬ãžã¹ã¿ãŠã£ã³ãã¯
ã¹ããŒã¹ãªæ§é ãæã£ãŠããã®ã§ãã©ãã·ã¥ãé
ãã
ãªã®ã§ãµãã«ãŒãã³ã³ãŒã«ãæžããinlineã¯å¹æããããŸãã
inline ã§æ¬²ããã®ã¯ãæ¬æ¥ã¯ããã°ã©ã å€æã§ã®specialization
ã§ãã£ãŠããµãã«ãŒãã³ãªãŒããããã§ã¯ãªãã¯ããSpecialiation
ã¯éåžžã®ãµãã«ãŒãã³ã³ãŒã«ã§ãåºæ¥ãã®ã§ãinlineã¯ã
ãªã«ãééã£ãéžæã ã£ããšæããŸãã
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
æ²³éçæ²» @ çç倧åŠå·¥åŠéšæ
å ±å·¥åŠç§,
ç§ãã¡ãã£ãšåã«x86ã§è©Šããæã¯ãinline å±éã«ãããµãã«ãŒãã³ã³ãŒã«ã®
ãªãŒããŒãããåæžã¯ã»ãšãã©ãããŸããã§ããã
ãšããããæè¿ã®CPUã¯è³¢ãã®ã§ãåŒæ°ãã¬ãžã¹ã¿æž¡ãã«ãããªã£ãŠããã°
ãµãã«ãŒãã³ã³ãŒã«ã®ãªãŒããŒãããã¯ã»ãšãã©ç¡ãã£ãŠæãã§ãã
ããšãã£ãŠ inline å±éã«æå³ãç¡ãã£ãããã§ã¯ãªããé¢æ°ãè·šã£ãããŒã
ããŒã«æé©åãåºæ¥ããšããç¹ã§ã¯å¹æçã§ããã
䌌ããããªåŠçããã inline é¢æ°ã®åŒã³åºããé£ç¶ããŠãããšããã§ã
ãŸãšããŠå
±ééšååŒã®åé€ãšããããããããšãã§ãããšãæ°åãšãã
ãããããªãŒããŒã§ç®ã«èŠããŠé«éåã§ããŠããŸããŸãã
èšäº <3989148...@insigna.ie.u-ryukyu.ac.jp> ã§
Shinji KONOããã¯æžããŸãã
> ã¬ãžã¹ã¿ãŠã£ã³ãã¯ãå¿
ãã·ãããããã®ã§ããã€ããŠã£ã³ãã®
> ãã©ãã·ã¥ã«ãŒãã³ãåŒã°ãªããšãããªããã¬ãžã¹ã¿ãŠã£ã³ãã¯
> ã¹ããŒã¹ãªæ§é ãæã£ãŠããã®ã§ãã©ãã·ã¥ãé
ãã
> ãªã®ã§ãµãã«ãŒãã³ã³ãŒã«ãæžããinlineã¯å¹æããããŸãã
inline å±éã§ã®æ§èœåäžãæåŸ
ãããããªå°ããªé¢æ°ã§ã¯ããã®äžã«
ãµãã«ãŒãã³ã³ãŒã«ãªã©ã¯ããŸãç¡ãã§ãããããšãããšãåŒã³åºãã®
æ·±ãã1段å¢ããã ãã§ããããæ«ç«¯ã®éšåã§ãããã1床ãã©ãã·ã¥ããŠ
ãŠã£ã³ããŠã確ä¿ã§ããã°ãããšã¯ã¬ãžã¹ã¿ãŠã£ã³ããŠã溢ããããšã¯
ã»ãšãã©ç¡ãããããªãã§ããããã
PROJECT TEAM ïœïŒ§ïŒ¡ é«æŽ¥æ£é ta...@doga.jp
TBD0...@nifty.ne.jp
PROJECT TEAM DoGAã®ããŒã ããŒãž â http://doga.jp/
10æ24æ¥(é) ä»æ¥ã®ããŒãã£ãŒã®æ³å [ããŒã¿ãŒã®äºèš]
å®éã«å¿
èŠãã©ãããæéããããŠç¢ºèªããŠãããã¡ã«ãäžå¿
èŠã«ãªãã
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> ãªã®ã§ãµãã«ãŒãã³ã³ãŒã«ãæžããinlineã¯å¹æããããŸãã
ããããããã§ãããå®éãé床èšæž¬ããŠã¿ããã§ããã©
ã¬ãžã¹ã¿ãŠã£ã³ããŠã«å
¥ãããéãªãã° inline å±éãã
é¢æ°ã³ãŒã«ã®æ¹ãéãã£ãã§ãã
==
E-mail: ku...@astec.co.jp
Takuya KUDO ASTEC, Inc.
In article <bna4dl$1gob$1...@maha2.doga.co.jp>, Masamichi Takatsu <ta...@doga.jp> writes
> ãšããããæè¿ã®CPUã¯è³¢ãã®ã§ãåŒæ°ãã¬ãžã¹ã¿æž¡ãã«ãããªã£ãŠããã°
> ãµãã«ãŒãã³ã³ãŒã«ã®ãªãŒããŒãããã¯ã»ãšãã©ç¡ãã£ãŠæãã§ãã
In article <seznfrxn...@astec.co.jp>,Takuya KUDO <ku...@astec.co.jp> writes
> ããããããã§ãããå®éãé床èšæž¬ããŠã¿ããã§ããã©
> ã¬ãžã¹ã¿ãŠã£ã³ããŠã«å
¥ãããéãªãã° inline å±éãã
> é¢æ°ã³ãŒã«ã®æ¹ãéãã£ãã§ãã
ãã®èŸºãã®ä»®å®ãçµæ§æªãããã ããªããã®æ«ç«¯ã®é¢æ°ã ããããªããŠãããŸã§ã®
éçšã§åŒã°ããé¢æ°ã®å±¥æŽãé¢ä¿ãããã ããã
æµ®åå°æ°ç¹ãšãã¯ã¬ãžã¹ã¿ãšããŠã€ã³ãã«ä¹ããªããã䜿ã£ãŠããã¬ãžã¹ã¿ã®
åŸ
é¿ãšããããããåŒãæ°æž¡ãã«äœ¿ã£ãã¬ãžã¹ã¿ã¯å¿
ãåŸ
é¿ãå¿
èŠã§ãããã
åçŽã«inlineã«ããããéããªãã£ãŠããšã¯ããã¡ãããªããã ãã©ã
é¢æ°åŒã³åºãã®ãªãŒããããããªãã£ãŠããã§ããªãã§ãã
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> æµ®åå°æ°ç¹ãšãã¯ã¬ãžã¹ã¿ãšããŠã€ã³ãã«ä¹ããªããã䜿ã£ãŠããã¬ãžã¹ã¿ã®
> åŸ
é¿ãšããããããåŒãæ°æž¡ãã«äœ¿ã£ãã¬ãžã¹ã¿ã¯å¿
ãåŸ
é¿ãå¿
èŠã§ãããã
>
> åçŽã«inlineã«ããããéããªãã£ãŠããšã¯ããã¡ãããªããã ãã©ã
> é¢æ°åŒã³åºãã®ãªãŒããããããªãã£ãŠããã§ããªãã§ãã
èŠç¹ãããããããã«èæ¯ã説æããŸãã
ç§ãæºãã£ã Sparc ããã»ããµã¯éåæã®è©±ã§çµã¿èŸŒã¿çšé
æµ®åå°æ°ç¹æŒç®ãªãïŒåœæã¯ãœãããŠã§ã¢ãšãã¥ã¬ãŒã·ã§ã³ã
䜿ããŸããïŒã®ã¢ãŒããã¯ãã£ã§ãã
å ·äœçã«èšããšå¯å£«é Sparc Lite ã§ãã
In article <3989148...@insigna.ie.u-ryukyu.ac.jp>
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> æ²³éçæ²» @ çç倧åŠæ
å ±å·¥åŠã§ãã
> inline ã§æ¬²ããã®ã¯ãæ¬æ¥ã¯ããã°ã©ã å€æã§ã®specialization
> ã§ãã£ãŠããµãã«ãŒãã³ãªãŒããããã§ã¯ãªãã¯ããSpecialiation
> ã¯éåžžã®ãµãã«ãŒãã³ã³ãŒã«ã§ãåºæ¥ãã®ã§ãinlineã¯ã
> ãªã«ãééã£ãéžæã ã£ããšæããŸãã
inline ããæ代ããã€ãšééãã«èŠããããã«ãªãã®ã§ããããã
å€æ°ã® register 宣èšã¿ããã«ããã ãregister ã inline ããŸ
ã ãŸã å¯æããã®ã§ããããã°ã©ã ã®å¯èªæ§ã¯ããããªã«äžããªã
ããæ®éã¯ç¡èŠããŠãå
šç¶å¹³æ°ã ããã#define ããã¯ãinline
ã®æ¹ãèŠããããã
ãã®éããµãš Linux ã®ãœãŒã¹ãèŠãŠããŠèŸãã£ãã®ã¯ãlikely()
ã§ãã
include/linux/compiler.h:
------------------------------------------------------------
/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented
a mechanism by which the user can annotate likely branch directions and
expect the blocks to be reordered appropriately. Define __builtin_expect
to nothing for earlier compilers. */
#if __GNUC__ == 2 && __GNUC_MINOR__ < 96
#define __builtin_expect(x, expected_value) (x)
#endif
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
------------------------------------------------------------
ããããif æã®äžã«ãããããšãå¯èªæ§ã®äžããããšäžããããšã
ãããªæãã
for( ... )
{
....
if (unlikely(dentry->d_bucket != head))
break;
....
if (likely(move_count == dentry->d_move_count)) {
if (!d_unhashed(dentry)) {
atomic_inc(&dentry->d_count);
found = dentry;
}
}
}
lilely() ãš unlikely() ã¯ããããŠããã£ãŠããšããããã¯ã
ãäœéèããŠãããã ããã®ãã±ãã£ãŠæãããããªã®äººéããã
ããšãããªãã§ãã
ãŸããlikely(), unlikely() ãããŸã inline ãšã register ãš
åãã§ããŸã£ããç¡èŠããŠããããã ãã©ãç¡èŠããã®ã¯ãèŸãã
ãã§ããè±èªnativeãªãå¹³æ°ãªãã§ãããã
ãããããã³ã³ãã€ã«æã®éçãªåå²äºæž¬ã£ãŠãå¹ããã§ãããã
æè¿ã®ããã»ããµã¯ãåçãªåå²äºæž¬ã¯ããŠããããã§ãããã
In article <sek76vkx...@astec.co.jp>
Takuya KUDO <ku...@astec.co.jp> writes:
> ç§ãæºãã£ã Sparc ããã»ããµã¯éåæã®è©±ã§çµã¿èŸŒã¿çšé
> æµ®åå°æ°ç¹æŒç®ãªãïŒåœæã¯ãœãããŠã§ã¢ãšãã¥ã¬ãŒã·ã§ã³ã
> 䜿ããŸããïŒã®ã¢ãŒããã¯ãã£ã§ãã
> å
·äœçã«èšããšå¯å£«é Sparc Lite ã§ãã
ç§ãã€ã³ã©ã€ã³å±éã®å¹æã調ã¹ãã®ãããã®ãããã®æ代ã§ãã
SPARCstation 1 ããããå
·äœçã«ã¯ãinline ã§ã¯ãªããŠã
#define ã䜿ã£ãã®ã§ãããã©ããã®åœæã® gcc ã¯ãinline ããª
ãã£ããšæããŸãã
åãä»äºãããé¢æ°ã #defineã§æžããã®ãšæ®éã®é¢æ°ã§æžããã
ã®ãçšæããŸãããããåçŽã«ã«ãŒãã§åãã®ã§ã¯ãªããŠãé¢æ°ã
ãã¹ããããŸãããããªæãã
f1()
{
int x0,x1,x2,x3,x4,x5;
f2();
}
f2()
{
int x0,x1,x2,x3,x4,x5;
f3();
}
ããã§ãã€ã³ã©ã€ã³ã«ãããšéããªãã®ã§ãããããçšåºŠå¢ãããŠ
ãããšéã«é
ããªããŸããïŒæ®µãïŒæ®µãããã ã£ãããªãã
ããã¯ãæã®è©±ãSPARC ã§è©±ããã£ãã·ã¥ãšã¯ãããŸãé¢ä¿ãªããã
In article <bna4dl$1gob$1...@maha2.doga.co.jp>
Masamichi Takatsu <ta...@doga.jp> writes:
> é«æŽ¥@ããŒã¬ã§ãã
> ç§ãã¡ãã£ãšåã«x86ã§è©Šããæã¯ãinline å±éã«ãããµãã«ãŒãã³ã³ãŒã«ã®
> ãªãŒããŒãããåæžã¯ã»ãšãã©ãããŸããã§ããã
> ãšããããæè¿ã®CPUã¯è³¢ãã®ã§ãåŒæ°ãã¬ãžã¹ã¿æž¡ãã«ãããªã£ãŠããã°
> ãµãã«ãŒãã³ã³ãŒã«ã®ãªãŒããŒãããã¯ã»ãšãã©ç¡ãã£ãŠæãã§ãã
æè¿ãPentium III ã§ã®è©±ã§ãããTempo ãšãã specializer ã§
ã€ã³ã©ã€ã³å±éã調æŽãããšå¹ãããšããããŸãããšããããã€ã³
ã©ã€ã³ã«ããªããšspecialization ã®å¹æãå
šç¶åºãŠããªãããšã
ãããŸãããé¢æ°åŒåºãã§ãã¹ã¿ãã¯ã«åŒæ°ãç©ãæãåé€ããã®
ãå¹ããŠããããã«æããŸãã
> ããšãã£ãŠ inline å±éã«æå³ãç¡ãã£ãããã§ã¯ãªããé¢æ°ãè·šã£ãããŒã
> ããŒã«æé©åãåºæ¥ããšããç¹ã§ã¯å¹æçã§ããã
> 䌌ããããªåŠçããã inline é¢æ°ã®åŒã³åºããé£ç¶ããŠãããšããã§ã
> ãŸãšããŠå
±ééšååŒã®åé€ãšããããããããšãã§ãããšãæ°åãšãã
> ãããããªãŒããŒã§ç®ã«èŠããŠé«éåã§ããŠããŸããŸãã
æç¶ããè¶ããŠãå ±éåŒåé€ã®æé©åã¯ãã£ãŠãããããã§ãããã
> inline å±éã§ã®æ§èœåäžãæåŸ
ãããããªå°ããªé¢æ°ã§ã¯ããã®äžã«
> ãµãã«ãŒãã³ã³ãŒã«ãªã©ã¯ããŸãç¡ãã§ãããã
å¥ã«å°ããé¢æ°ã«ãã inline ãä»ããŠã¯ãããªããšããèŠåã¯ãª
ãã®ã§ããŒããŒãä»ãã人ãåºãŠããããã§ãã
In article <YAS.03Oc...@kirk.is.tsukuba.ac.jp>, y...@is.tsukuba.ac.jp (Yasushi Shinjo) writes
> > inline å±éã§ã®æ§èœåäžãæåŸ
ãããããªå°ããªé¢æ°ã§ã¯ããã®äžã«
> > ãµãã«ãŒãã³ã³ãŒã«ãªã©ã¯ããŸãç¡ãã§ãããã
> å¥ã«å°ããé¢æ°ã«ãã inline ãä»ããŠã¯ãããªããšããèŠåã¯ãª
> ãã®ã§ããŒããŒãä»ãã人ãåºãŠããããã§ãã
ãã¶ããputchar ã¿ããã«ã
if (buffer_full()) call_flush()
else buffer_op()
ã¿ãããªã®ãå€ãããããªãããªãããŒã¿æ§é ã«å¯Ÿããã¢ã¯ã»ãµ
ãinlineã«ããããªãããç¥ããªãããªããžã§ã¯ãæåçãªèŠ³ç¹
ããã ãšinlineã§ã¯ã ãã§ãã¡ãããšmethod callããªããšãã
ãªãããã§ããã©ãã
é¢æ°åŒã³åºãã®ãªãŒããããã¯æ«ç«¯ã«ã¯ãªããã ãã©ãäžéã«ã¯
ãããŸãã段æ°ãæžãããšèšãæå³ã§æå¹ãªãã ããã
æè¿çºèŠããã®ã¯ãPowerPCãªããã®link register (æ»ãçªå°ãèŠ
ããŠããããã®å°çšã®ã¬ãžã¹ã¿(ããããããªãã§å°çšãªãã ãã?)
ãçµæ§æå¹ã ã£ãŠããšã§ããã¹ã¿ãã¯ãšèšãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã
æžãã®ã§é«éã§ããããã å°çšã¬ãžã¹ã¿ãªã®ã§ããããããããã
ã«ã¯å°çšã®åœä»€ãå¿
èŠã ã£ãŠã®ãããµã€ã
inlineããªãspecializationã£ãŠïŒspecializeããè²ããªããŒãžã§ã³ã®ãµãã«ãŒ
ãã³ãäœãã£ãŠããšã§ããããïŒã ã£ããinliningããŠãè¯ããããªïŒ
æïŒMIPSã®ã³ã³ãã€ã©ã¯ãªããžã§ã¯ããäžéã³ãŒã(uã³ãŒã)ã§åºåããŠãã
ãŠïŒãªã³ã¯æã«æç¶ãéæé©åããããŠããŸãããïŒããã¯å»ãããã§ãã
ãïŒ
> /* Somewhere in the middle of the GCC 2.96 development cycle, we implemented
> a mechanism by which the user can annotate likely branch directions and
> expect the blocks to be reordered appropriately. Define __builtin_expect
> to nothing for earlier compilers. */
åå²äºæž¬ãšããããïŒã©ã¡ããã®ãã¹ãåªå
ããŠåå²ä»¥å€ã®åœä»€ãã¹ã±ãžã¥ãŒ
ã«ãããã§ãããããïŒtrace schedulingã¿ããã«ïŒ
> lilely() ãš unlikely() ã¯ããããŠããã£ãŠããšããããã¯ã
> ãäœéèããŠãããã ããã®ãã±ãã£ãŠæãããããªã®äººéããã
> ããšãããªãã§ãã
if_likelyãšif_unlikelyã ãšå°ãã¯ãŸãã§ããã(倧差ãªãã)ïŒ
åçšã®ã³ã³ãã€ã©ã ãšïŒãããã¡ã€ã©ã®ãã£ãŒãããã¯ã䜿ãããããŸãããïŒ
人éãæã§annotateãããã楜ã§ããïŒ
> ãããããã³ã³ãã€ã«æã®éçãªåå²äºæž¬ã£ãŠãå¹ããã§ãããã
ã«ãŒãã«é¢ããŠã¯ããçšåºŠå¹ãããããªãã§ããïŒ
> æè¿ã®ããã»ããµã¯ãåçãªåå²äºæž¬ã¯ããŠããããã§ãããã
ä»ãïŒåçåå²äºæž¬ãªãã§ã¯è©±ã«ãªããªãã§ãïŒåå²ã®çµæãåãããŸã§åŸ
ã£
ãŠããããã§ãããå
šç¶éã«åããŸããïŒ
æè¿ã®ããã»ããµã®åœä»€ãã§ããã¹ããŒãžã¯ãããŠãïŒ
while (1) {
fetch_block(pc); // è€æ°ã®åœä»€ããã§ãã
pc = predict(pc); // 次ã®ãã§ããçªå°ãäºæž¬
}
ã¿ãããªäœãã«ãªã£ãŠãããšæããŸãïŒ(åå²åœä»€ãå«ãŸããŠããªããããã¯
ãªãïŒäºæž¬åšã¯æ¬¡ã®ãããã¯ã®çªå°ãè¿ãïŒ)
åç°æŠåž
> æè¿çºèŠããã®ã¯ãPowerPCãªããã®link register (æ»ãçªå°ãèŠ
> ããŠããããã®å°çšã®ã¬ãžã¹ã¿(ããããããªãã§å°çšãªãã ãã?)
> ãçµæ§æå¹ã ã£ãŠããšã§ããã¹ã¿ãã¯ãšèšãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã
> æžãã®ã§é«éã§ããããã å°çšã¬ãžã¹ã¿ãªã®ã§ããããããããã
> ã«ã¯å°çšã®åœä»€ãå¿
èŠã ã£ãŠã®ãããµã€ã
ä»ã®RISC(SPARC, Alpha, PA-RISC, MIPS)ã¯æ±çšã¬ãžã¹ã¿ãcallã®linkageã«äœ¿
ããŸããïŒPentium4ãAthlonã¯ïŒãªã³ãããã«return address stackãããã
ã16, 12ãšã³ããªãŒæã£ãŠããŠïŒRETåœä»€ã®åå²å
ãäºæž¬ããã®ã«äœ¿ããŸãïŒ
link registerãå°çšã¬ãžã¹ã¿ã ãšïŒæŽæ°æŒç®ãšcall/returnã®éã«äŸåé¢ä¿ã
ãªããªããŸãïŒãŸãïŒPowerPCã¯æ¡ä»¶call(ãã¹ãŠã®åå²åœä»€ã¯link bit ã1ã
ãšPC ãä¿å), æ¡ä»¶return(branch conditional link registeråœä»€)ããããš
ããæå³ã§ã¯ïŒæ®éã®ã¢ãŒããã¯ãã£ããæ±çšæ§ããããŸãïŒ
åç°æŠåž
In article <m3brs47...@maedapc.cc.tsukuba.ac.jp>, MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes
> inlineããªãspecializationã£ãŠïŒspecializeããè²ããªããŒãžã§ã³ã®ãµãã«ãŒ
> ãã³ãäœãã£ãŠããšã§ããããïŒã ã£ããinliningããŠãè¯ããããªïŒ
å®ã¯ãããªãåŒæ°ã§åŒã¶ã£ãŠã®ãããããããããinlineã«ããã
ãããªã®ã§ãããããå
±çšãããå¯èœæ§ãããããspecialization
ã®æ¹ãåªããŠãããšæããŸãã(subroutine ã®overhead ãå°ãããã°...)
> æïŒMIPSã®ã³ã³ãã€ã©ã¯ãªããžã§ã¯ããäžéã³ãŒã(uã³ãŒã)ã§åºåããŠãã
> ãŠïŒãªã³ã¯æã«æç¶ãéæé©åããããŠããŸãããïŒããã¯å»ãããã§ãã
> ãïŒ
ãªããžã§ã¯ãæåã«èµ·å ããindirect callããshared library çš
ã®dynamick linkãããããŸããçŸç¶ã§ã¯ãããŸãæå³ç¡ããã§ã
ããããããããæ代ã®æµããã
> > ãããããã³ã³ãã€ã«æã®éçãªåå²äºæž¬ã£ãŠãå¹ããã§ãããã
> ã«ãŒãã«é¢ããŠã¯ããçšåºŠå¹ãããããªãã§ããïŒ
åçåå²äºæž¬ãããç¶æ³ã§ã¯ã«ãŒãã§éçäºæž¬ã»ãšãã©æå³ç¡ããš
æããã«ãŒãã§ãªãéšå(æ«åœ¢ã®äžåã®åå²)ã¿ãããªãã®ã®æ¹ãé
çåå²äºæž¬ã¯æå¹ã ãšæããŸãã
In article <m37k2s7...@maedapc.cc.tsukuba.ac.jp>,MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes
> ä»ã®RISC(SPARC, Alpha, PA-RISC, MIPS)ã¯æ±çšã¬ãžã¹ã¿ãcallã®linkageã«äœ¿
> ããŸããïŒPentium4ãAthlonã¯ïŒãªã³ãããã«return address stackãããã
> ã16, 12ãšã³ããªãŒæã£ãŠããŠïŒRETåœä»€ã®åå²å
ãäºæž¬ããã®ã«äœ¿ããŸãïŒ
ã¹ã¿ãã¯ãããã倧åã¡ã¢ãªã«ãããšãããæžãæããå¯èœæ§ãåŠ
å®ã§ããªãã®ã§éçã¯ãããšæããŸããçµå±ãã¹ã¿ãã¯ãã·ã³ã¯ã
éå±€åã¡ã¢ãªã«å¯Ÿå¿ã§ããŠãªãã£ãŠã®ãåã®èããªãã ãã©ã
äžæ¹ã§ãreturn ãšãåå²å€æçšã®å°çšã®ã¬ãžã¹ã¿ããã£ãæ¹ãã
ãããšãããšããããå°ãçåã«æã£ãŠãŸããVAX ã¿ããã«ãPC
ãæ±çšã¬ãžã¹ã¿ã£ãŠæ¹ããã£ã±ãããããããªãããªãæã¯ãäºæž¬
ãäŸåé¢ä¿ã®è§£æ¶ã«ããŒããŠã§ã¢ãå²ããªãã£ããããã ãã ã£ã
ãã ãã©...
> link registerãå°çšã¬ãžã¹ã¿ã ãšïŒæŽæ°æŒç®ãšcall/returnã®éã«äŸåé¢ä¿ã
> ãªããªããŸãïŒãŸãïŒPowerPCã¯æ¡ä»¶call(ãã¹ãŠã®åå²åœä»€ã¯link bit ã1ã
> ãšPC ãä¿å), æ¡ä»¶return(branch conditional link registeråœä»€)ããããš
> ããæå³ã§ã¯ïŒæ®éã®ã¢ãŒããã¯ãã£ããæ±çšæ§ããããŸãïŒ
æŽæ°æŒç®ãšcall/return/branchã«ã¯ãçµå±ãäŸåé¢ä¿ã¯ãããŸãã
if (i+3===hoge) do_process();
ã¿ãããªæãã§ãããããããç©æ¥µçã«äŸåé¢ä¿ã䜿ã£ãŠåäœãäº
枬ããŠè¯ãæ¹ãè¯ããéã«ãããŒããŠã§ã¢éã«å¶éããããªããåœ
什ã®çš®é¡ãå¢ããã®ã¯ãŸããéžæã ãšæãã
r10 = 0x234234234+r11
pc = r10
ã¿ãããªã®ãšãswitch (i) ã¿ãããªã®ã£ãŠããããŸãå€ãããŸãã
ããã
æ¡ä»¶callãæ¡ä»¶returnã䜿ããªãã®ã¯ãã³ã³ãã€ã©ãæžããŠã¿ããš
ããããã ãã©ã
call ããåã«ããªããã°ãªããªãããš
return ããæã«ããªããã°ãªããªãããš
ãå±±çšããããã§ãã
åŒæ°ã®æºå
䜿ã£ãã¬ãžã¹ã¿ã®åŸå§æ« (å€ãå
ã«æ»ããã)
ãã¬ãŒã ãã€ã³ã¿ãããã°ããã®æäœ
C++ ãªã©ããã°ãstack äžã®ãªããžã§ã¯ãã®ç Žå£
ãã¡ããããããªããšããªãã§ããçããµãã«ãŒãã³ã«ã¯æå¹ãªã
ã§ããã©ãã©ããçããµãã«ãŒãã³ã£ãŠã®ã¯ãããŸããªãã¿ããã
ããã°ã©ãã®æ§ããããããã®ã?
ããã«PowerPCã®è€æ°ãããã©ã°ãšãã§åå²äºæž¬ããããããã«ã
ãŠãããšãæ©ãã®åå²ãšããæå³ã§ã¯éã«é
ããªããŸãããŸããC
ã®ãããªèšèªã ãšèšç®ãšåå²ã®é åºããããã®ã¯å±éºãããããªã®
ã§ãçµå±ããã©ã°ã¯äžã€ãã䜿ããªãã£ãŠããšã«ãªããã¡ã
ãã¶ããPowerPC ã«ã¯ãéããããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã
ã£ãŠã®ããã£ãã®ã§ãããããåœä»€ã«ãªã£ããã ãšæããŸãã
ãããè£ç®ã«åºãŠããããªæ°ããããªã
> æ²³éçæ²» @ çç倧åŠæ
å ±å·¥åŠã§ãã
>
> In article <m3brs47...@maedapc.cc.tsukuba.ac.jp>, MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes
> > inlineããªãspecializationã£ãŠïŒspecializeããè²ããªããŒãžã§ã³ã®ãµãã«ãŒ
> > ãã³ãäœãã£ãŠããšã§ããããïŒã ã£ããinliningããŠãè¯ããããªïŒ
>
> å®ã¯ãããªãåŒæ°ã§åŒã¶ã£ãŠã®ãããããããããinlineã«ããã
> ãããªã®ã§ãããããå
±çšãããå¯èœæ§ãããããspecialization
> ã®æ¹ãåªããŠãããšæããŸãã(subroutine ã®overhead ãå°ãããã°...)
ããããªãåŒæ°ã§åŒã¶ã£ãŠã®ãããããããããšããã®ã¯è¯ãåãããªããªãïŒ
ãããéçã«ã§ãããïŒãããªããšãããã»ã©ããã®ããããïŒ
ãpolymorphicãªé¢æ°ãåã«ã€ããŠspecializeããããšããªã䟡å€ã¯ãããšæ
ããã©ïŒ
> In article <m37k2s7...@maedapc.cc.tsukuba.ac.jp>,MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes
> > ä»ã®RISC(SPARC, Alpha, PA-RISC, MIPS)ã¯æ±çšã¬ãžã¹ã¿ãcallã®linkageã«äœ¿
> > ããŸããïŒPentium4ãAthlonã¯ïŒãªã³ãããã«return address stackãããã
> > ã16, 12ãšã³ããªãŒæã£ãŠããŠïŒRETåœä»€ã®åå²å
ãäºæž¬ããã®ã«äœ¿ããŸãïŒ
>
> ã¹ã¿ãã¯ãããã倧åã¡ã¢ãªã«ãããšãããæžãæããå¯èœæ§ãåŠ
> å®ã§ããªãã®ã§éçã¯ãããšæããŸããçµå±ãã¹ã¿ãã¯ãã·ã³ã¯ã
> éå±€åã¡ã¢ãªã«å¯Ÿå¿ã§ããŠãªãã£ãŠã®ãåã®èããªãã ãã©ã
åå²äºæž¬ã¯ïŒå€ããŠãé
ããªãã ããªã®ã§ïŒãå¯èœæ§ãåŠå®ã§ããªããçšåºŠã®
é »åºŠããå€ããªããªãïŒããå©çã®æ¹ã倧ããã®ã§ãïŒ(ã¡ã¢ãªã®åç
§ãæžã
ãããã®ä»çµã¿ã§ã¯ãªãã§ãïŒ)
> äžæ¹ã§ãreturn ãšãåå²å€æçšã®å°çšã®ã¬ãžã¹ã¿ããã£ãæ¹ãã
> ãããšãããšããããå°ãçåã«æã£ãŠãŸããVAX ã¿ããã«ãPC
> ãæ±çšã¬ãžã¹ã¿ã£ãŠæ¹ããã£ã±ãããããããªãããªãæã¯ãäºæž¬
> ãäŸåé¢ä¿ã®è§£æ¶ã«ããŒããŠã§ã¢ãå²ããªãã£ããããã ãã ã£ã
> ãã ãã©...
ããŒã¿ãã¹ãèãããšåãããŸããïŒPCã¯ç¹å¥æ±ãããæ¹ãã»ãšãã©ã®å Žåæ
å©ã ãšæããŸãïŒ
> > link registerãå°çšã¬ãžã¹ã¿ã ãšïŒæŽæ°æŒç®ãšcall/returnã®éã«äŸåé¢ä¿ã
> > ãªããªããŸãïŒãŸãïŒPowerPCã¯æ¡ä»¶call(ãã¹ãŠã®åå²åœä»€ã¯link bit ã1ã
> > ãšPC ãä¿å), æ¡ä»¶return(branch conditional link registeråœä»€)ããããš
> > ããæå³ã§ã¯ïŒæ®éã®ã¢ãŒããã¯ãã£ããæ±çšæ§ããããŸãïŒ
>
> æŽæ°æŒç®ãšcall/return/branchã«ã¯ãçµå±ãäŸåé¢ä¿ã¯ãããŸãã
> if (i+3===hoge) do_process();
> ã¿ãããªæãã§ãããããããç©æ¥µçã«äŸåé¢ä¿ã䜿ã£ãŠåäœãäº
> 枬ããŠè¯ãæ¹ãè¯ããéã«ãããŒããŠã§ã¢éã«å¶éããããªããåœ
> 什ã®çš®é¡ãå¢ããã®ã¯ãŸããéžæã ãšæãã
ããããéæ¥çãªäŸåé¢ä¿ã¯ãã¡ãããããŸããïŒäŸãã°100^2ããã
50^2 + 50^2ãå°ãããªãããã«ïŒåœä»€ã®çš®é¡ãåããæå³ã¯ãããŸãïŒ
äŸãã°æåã®PowerPC601ã¯æ©èœãŠãããããšã«å¥ã
ã®ãªã¶ããŒã·ã§ã³ã¹ããŒã·ã§
ã³ãæã¡ïŒåœä»€ã®çš®é¡ã§ãŸãããããã®ãªã¶ããŒã·ã§ã³ã¹ããŒã·ã§ã³ã«ãã£ã¹
ãããããŠããŸãïŒåå²ãŠãããã®ãªã¶ããŒã·ã§ã³ã¹ããŒã·ã§ã³ã«ã¯æŽæ°æŒç®
ãå
¥ã£ãŠããïŒlink registerãšæ¡ä»¶ã³ãŒãã«é¢ããŠã®ã¿ã®äŸåé¢ä¿ã調ã¹ãŸ
ãïŒ
æ¡ä»¶ã³ãŒããæžãæããæŽæ°æŒç®ã®åŸã«ïŒããã«äŸåããæ¡ä»¶åå²ãããå ŽåïŒ
ãã©ã°ãããã«interlockãããã£ãç¶æ
ã§åå²ããã£ã¹ããããããŸãïŒã
ã©ã°ã®å€ãååæ©ã確å®ããªãã£ãå Žåã¯ïŒ(601ã§ã¯éç)åå²äºæž¬ãçšããŠ
åŠçãé²ããŸãïŒ
ãŸãïŒéã«ïŒåå²ãlink registerãcount registerãæžãæãïŒå
è¡ããæŽ
æ°æŒç®åœä»€ããããã«äŸåããŠããå Žåã¯ïŒrenamingã§äŸåãåãé€ããŸãïŒ
> r10 = 0x234234234+r11
> pc = r10
> ã¿ãããªã®ãšãswitch (i) ã¿ãããªã®ã£ãŠããããŸãå€ãããŸãã
> ããã
ããããèšç®ågotoã¿ãããªã®ã°ã£ããå®éã®ã¢ããªã§äœ¿ããããªãããã§ãã
ããïŒ
> æ¡ä»¶callãæ¡ä»¶returnã䜿ããªãã®ã¯ãã³ã³ãã€ã©ãæžããŠã¿ããš
> ããããã ãã©ã
> call ããåã«ããªããã°ãªããªãããš
> return ããæã«ããªããã°ãªããªãããš
> ãå±±çšããããã§ãã
ããïŒspecializeããsubroutineãªããã¯ïŒäœ¿ã絶奜ã®ãã£ã³ã¹ã«èŠããŸããâŠ
ãããã«ããïŒPowerãARMããããã®åœä»€ã»ããã決ããéã«ã¯çµ±èšçãªæ ¹æ
ã«åºã¥ããŠæ±ºããã¯ãã§ãïŒå®éçãªå€ãªãã§ã¯äœãšãç§ã«ã¯èšããŸããïŒ
> ããã«PowerPCã®è€æ°ãããã©ã°ãšãã§åå²äºæž¬ããããããã«ã
> ãŠãããšãæ©ãã®åå²ãšããæå³ã§ã¯éã«é
ããªããŸãããŸããC
> ã®ãããªèšèªã ãšèšç®ãšåå²ã®é åºããããã®ã¯å±éºãããããªã®
> ã§ãçµå±ããã©ã°ã¯äžã€ãã䜿ããªãã£ãŠããšã«ãªããã¡ã
ããã¯ïŒåå²äºæž¬ãããªããŠè³æºç«¶åã«ããåœã®äŸåãé¿ããããã§ã¯? å¹
ããéãããšèšãã®ã¯äœã®ããšãè¯ãåãããŸãããïŒææ°ã®ããã»ããµã¯ã©
ããåå²ãè¶ããŠææ©çãªèšç®ãè¡ãªã£ãŠããŸãïŒ
> ãã¶ããPowerPC ã«ã¯ãéããããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã
> ã£ãŠã®ããã£ãã®ã§ãããããåœä»€ã«ãªã£ããã ãšæããŸãã
> ãããè£ç®ã«åºãŠããããªæ°ããããªã
å
貎åã®Powerã¯åžžã«IPCã§ã¯ãããã¯ã©ã¹ã®å€ãèªã£ãŠãã(æãããèšèã§
èšãã°brainiac approach)ïŒæ§èœçã«ããããã°ã«ãŒãã«ããŸãïŒãã®åŸãè¿œ
ãPowerPCãïŒç¹ã«ä»åºŠã®970ã¯ã¯ããã¯ãäžããŠããŠãªããªãé 匵ã£ãŠãããš
æããŸããïŒ
# ãããããã¢ã»ã³ããªèšèªããã°ã©ãããèŠããããããã¯ïŒããŸãæ§èœã«
# çµã³ä»ããªãããã«æããŸãïŒ
åç°æŠåž
y...@is.tsukuba.ac.jp (Yasushi Shinjo) ãã writes:
> ãã®éããµãš Linux ã®ãœãŒã¹ãèŠãŠããŠèŸãã£ãã®ã¯ãlikely()
...
> lilely() ãš unlikely() ã¯ããããŠããã£ãŠããšããããã¯ã
> ãäœéèããŠãããã ããã®ãã±ãã£ãŠæãããããªã®äººéããã
> ããšãããªãã§ãã
åæã
> ãŸããlikely(), unlikely() ãããŸã inline ãšã register ãš
> åãã§ããŸã£ããç¡èŠããŠããããã ãã©ãç¡èŠããã®ã¯ãèŸãã
> ãã§ããè±èªnativeãªãå¹³æ°ãªãã§ãããã
ãœãŒã¹ã³ãŒãã®å¯èªæ§ãäžããŸãããã
ãŸã Linux ã¯æ詮混æ²ã®ãªãã§ãããã®ãããã®ãªã®ã§ãŸãšãã«çžæã«
ããã®ã¯ã©ãããšã»ã»ã»ã
ã€ãã§ã«ãããã Unix èªäœã倧åæ±çšæ©ç³»ã®äººéã«èšããããšç¡è¶èŠè¶
ã ããã§ãã
äºæž¬ãšå®éã®èšç®ã®è©±ããã£ã¡ãã«ãªãã®ã§ããããããã§ããã
In article <m3oew45...@maedapc.cc.tsukuba.ac.jp>, MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes
> åå²äºæž¬ã¯ïŒå€ããŠãé
ããªãã ããªã®ã§ïŒãå¯èœæ§ãåŠå®ã§ããªããçšåºŠã®
> é »åºŠããå€ããªããªãïŒããå©çã®æ¹ã倧ããã®ã§ãïŒ(ã¡ã¢ãªã®åç
§ãæžã
> ãããã®ä»çµã¿ã§ã¯ãªãã§ãïŒ)
åå²äºæž¬ã«é¢ããŠã¯ããã§ãããã§ãããµãã«ãŒãã³ã»ã³ãŒã«ã®ç²
ã«å€éšã¡ã¢ãªã«è§Šãã£ãŠã®ã¯éçãããã ããã£ãŠããšã§ãã
PowerPC ã® link register ã¯ãåªããŠãããšæãããã©ãSPARCã®
æ¹åŒã¯å€ãããã€ãã¯å€éšã¡ã¢ãªã«è§ŠãããšããŠãããããã³ã³ã
ã€ã©ãªãããŒããŠã§ã¢ãªãããé ããŠãããããããããã
> ããŒã¿ãã¹ãèãããšåãããŸããïŒPCã¯ç¹å¥æ±ãããæ¹ãã»ãšãã©ã®å Žåæ
> å©ã ãšæããŸãïŒ
äºæž¬ã«é¢ããŠã¯ãåœä»€éšã§äºæž¬ããããªãã©ã³ãã§äºæž¬ãããã®é
ãã ãã ãšæããã ãã©...
ãªããŠããã®ããªã
a = b?3:4
cmp b
jz _2
move r10,3
j _1
_2: move r10,4
_1: st a,r10
ããåå²ãèšç®ã«æžãæãã
a = b*3+(!b)*4
ld r11,b
move r10,3
mul r10,r11
not r11
move r12,4
mul r11,r12
add r11,r10
st r11,a
ã®æ¹ãéãã£ãŠã®ã¯ãåå²ã«æŒç®ãé¢ãã£ãŠãªãããã§ãã£ãŠãæ¬
æ¥ã¯åè
ã®æ¹ãéãã¹ããªããããªãããªãšæããŸããè¿°èªä¿®é£Ÿã¿
ãããªææ³ã¯ãåè
ãã
a = b?3:4
ld r11,b
move r10,3 if r11
move r10,4 if r11
_1: st r10,a
ã«æžãæããããã ãã©ãåå²äºæž¬ããããªãããããªãããšã§
ãã£ãŠæ¬²ãããPredication ã¯ãå®è¡æã«ããã¹ãããšãã³ã³ãã€ã«æ
ã«æŒãã€ããŠããæ°ãããã
ããŒã¿ãã¹çã«ã¯ãPCã«ããç®ããããªããŠã®ã¯ç¢ºãã«åºãŠæ¥ãªã
ã®ã§ãç¡é§ãªã®ããç¥ããªããã§ããShard Library ãšãã®
PIC (Position Independent Code) ãšãããªããžã§ã¯ãæåçãª
éæ¥ã³ãŒã«ãå€éã«åºãŠæ¥ãç¶æ³ã§ã¯ãçµæ§ãæ±çšçã«äœ¿ãããŠãŸãã
> å
貎åã®Powerã¯åžžã«IPCã§ã¯ãããã¯ã©ã¹ã®å€ãèªã£ãŠãã(æãããèšèã§
> èšãã°brainiac approach)ïŒæ§èœçã«ããããã°ã«ãŒãã«ããŸãïŒãã®åŸãè¿œ
> ãPowerPCãïŒç¹ã«ä»åºŠã®970ã¯ã¯ããã¯ãäžããŠããŠãªããªãé 匵ã£ãŠãããš
> æããŸããïŒ
PowerPC ã¯è¯ãã§ããŠãŸãããã ã
cmp flag1
cmp flag2
cmp flag3
jcond flag1,_1
jcond flag2,_2
jcond flag3,_3
ã¿ãããªã®ã£ãŠãããã«ãIPCã®ããã§ãã£ãŠãå®æ§èœãšã¯é¢ä¿ãªã
ã£ãŠæããããŸããã?
cmp
jcond _1
cmp
jcond _2
cmp
jcond _3
ã§ã§ããã¯ãã ã£ãŠããã§ãã
> # ãããããã¢ã»ã³ããªèšèªããã°ã©ãããèŠããããããã¯ïŒããŸãæ§èœã«
> # çµã³ä»ããªãããã«æããŸãïŒ
ã³ã³ãã€ã©ã¯éçäºæž¬ãè¡ãªããCPUã¯åçäºæž¬ãè¡ãªãããã®é
ã®æ©æž¡ããã¢ã»ã³ãã©èšèªã®äºæž¬ã«å¯Ÿããæ©èœã§ããã
äºæž¬ãšåäœèšè¿°ãåããæ¹ãè¯ãã£ãŠããšãªã®ããªã
In article <m3oew45...@maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes:
> > å®ã¯ãããªãåŒæ°ã§åŒã¶ã£ãŠã®ãããããããããinlineã«ããã
> > ãããªã®ã§ãããããå
±çšãããå¯èœæ§ãããããspecialization
> > ã®æ¹ãåªããŠãããšæããŸãã(subroutine ã®overhead ãå°ãããã°...)
> ããããªãåŒæ°ã§åŒã¶ã£ãŠã®ãããããããããšããã®ã¯è¯ãåãããªããªãïŒ
> ãããéçã«ã§ãããïŒãããªããšãããã»ã©ããã®ããããïŒ
ç§ã®æãã ãšã(éçã«) specialization ãããããããã°ã©ã ãš
ããã®ã¯ããŽããŽãããŠãããšæã£ãŠããŸããããšãã°ããããªæ
ãã®ããã°ã©ã ã¯ãããèŠãŸãããã
------------------------------------------------------------
f()
{
for( x=0; x<10; x++ )
{
g( x,y,10 );
}
}
g( x,y,z )
{
if( z >= 10 )
{
h( x, y );
}
else
{
i( x, y );
}
}
------------------------------------------------------------
ã«ãŒãã®äžã§å€ããªãå€æ°ãåŒæ°ã§æž¡ãããããŸãã10 ãªã©ã®å®
æ°ããããããŸã«åºãŠããããšãããã ããããx ãšã y ãšæžã
ãŠãã£ãŠããå®ã¯å®æ°ãšããã®ãããã§ãããã10 ã§
specialization ããããšãããªããŸãã
------------------------------------------------------------
f()
{
for(...)
{
g_10( x,y );
}
}
g_10( x,y )
{
h( x, y );
}
------------------------------------------------------------
ãããããšãã€ã³ã©ã€ã³å±éã¯å¥ã«ãããªããŠããg_10() ã®äžã§
ifæå€ããããèšç®ãé²ãããã§ããããã§ãããŸããé¢æ°åŒåºã
ã®ã€ã³ã©ã€ã³å±éããåé¡äžã¯ãspecialization ã®äžçš®ã§ã¯ãã
ãã§ãããã©ã
ããã«ãx ã§ã«ãŒãã®å±éãã§ããŸãã
> ãpolymorphicãªé¢æ°ãåã«ã€ããŠspecializeããããšããªã䟡å€ã¯ãããšæ
> ããã©ïŒ
ïŒïŒã®ãã³ãã¬ãŒãã®å±é以å€ã«ããäžã®ãããªã³ãŒãã¯ããã£
ãããããŸããããšãå®è¡æã«ããåãããããªããŠããå®è¡æ
specialization ãšããã®ããããŸããå®è¡æã«ã³ãŒãçæããŸãã
åããšãšèšããããªããžã§ã¯ãããšã«ã³ãŒãçæããŠãããå Žåã
ããã§ãããã
ãã¶ããä»ãŸã§ã¯äººéã specialization ãããŠãããã ãšæããŸ
ããããããã¯ãã³ã³ãã€ã©ã«ä»»ããéšåãå¢ãããŠããããšãã
æ¹åã§ãããã ãšæããŸãã
> > ããããªãåŒæ°ã§åŒã¶ã£ãŠã®ãããããããããšããã®ã¯è¯ãåãããªããªãïŒ
> > ãããéçã«ã§ãããïŒãããªããšãããã»ã©ããã®ããããïŒ
> ãããããšãã€ã³ã©ã€ã³å±éã¯å¥ã«ãããªããŠããg_10() ã®äžã§
> ifæå€ããããèšç®ãé²ãããã§ããããã§ãããŸããé¢æ°åŒåºã
> ã®ã€ã³ã©ã€ã³å±éããåé¡äžã¯ãspecialization ã®äžçš®ã§ã¯ãã
> ãã§ãããã©ã
ããã¯åãããã§ãããã©ïŒg_10(), g_20(), g_4()ãšããããããã§ããã
ãããªãã(ã ã£ããã€ã³ã©ã€ã³å±éã®æ¹ãè¯ãããããªãã)ãšããããšã§ãïŒ
ãã¡ãã¡ããg(10, x, y)ã®ããã«ç¹å®ã®åŒæ°ã ãã§åŒã°ãããšããããšãïŒ
ãããªã«ãããã®ãã©ããïŒããšã¯ïŒspecializeçµæãã¡ãããš(åãã€ã³ã¹
ã¿ã³ã¹ãåŒã¶ããã«)å
±æããã®ããããªã«ç°¡åãªã®ãã©ãã(è²ããªãã¡ã€ã«
ããåŒã°ããŠããïŒãšã)ïŒ
åç°æŠåž
In article <m3znfl5...@maedapc.cc.tsukuba.ac.jp>, MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes
> ããã¯åãããã§ãããã©ïŒg_10(), g_20(), g_4()ãšããããããã§ããã
> ãããªãã(ã ã£ããã€ã³ã©ã€ã³å±éã®æ¹ãè¯ãããããªãã)ãšããããšã§ãïŒ
ãŸããåŒã³åºãåŽã§å±éãããåŒã³åºããåŽã§å±éãããã®å·®ãªããã§ããã©ãã
> ãã¡ãã¡ããg(10, x, y)ã®ããã«ç¹å®ã®åŒæ°ã ãã§åŒã°ãããšããããšãïŒ
> ãããªã«ãããã®ãã©ããïŒ
èªæãªäŸã ãšã
inline fd(struct handle hd) { return hd.hoge->hage->fugo->fd; }
ã¿ãããªå¥Žãã§ããããã
fd(hd0) = fd(hd0) + 3;
ã¿ãããªåœ¢ã§åŒã°ããããã ãªã(ãã£ãšå·ŠåŽã«ã¯çœ®ããªãã...)
ãã®å Žåã¯ãinline ãæå¹ãªããã§ãã... ã ããªäŸããèãã
ã®ã¯çµæ§é¢çœãããã
specialize ããé¢æ°ãæã§è€æ°æžãã®ã¯äººéã«ã¯å±ãªãããŸãã
å€æŽãããšãã«ãä»æ¹ãå€æŽããããšãå¿ããããšãå€ãã®ã§ã
# define ã§å·¥å€«ããäŸãã¿ãããšããããã©... ã©ãã ãã¯
å¿ããŸããã
Lisp ã§ã¯è¯ã䜿ãããæè¡ãªãã§ããã©ãã
(defmacro hoge (a b c) ....)
ããŠã
(defun hoge1 (b c) (hoge 1 b c))
(defun hoge2 (b c) (hoge 2 b c))
ã¿ãããª...
> ããšã¯ïŒspecializeçµæãã¡ãããš(åãã€ã³ã¹
> ã¿ã³ã¹ãåŒã¶ããã«)å
±æããã®ããããªã«ç°¡åãªã®ãã©ãã(è²ããªãã¡ã€ã«
> ããåŒã°ããŠããïŒãšã)ïŒ
ãã®ãããã¯è²ããªæè¡ããããããªãã ãã©... äœæ
ãinline
ã ãã䜿ãããŠããã®ããšèšããšãåŒã³åºãåŽã ãèŠãã°è¯ããã
ãªãã ãããªãã§ããæé©åãšãã芳ç¹ããèŠãã°ãå
šäœãèŠãªã
ãã°ã ããªã®ã¯åœç¶ãªãã§ããã©ãã
inline ã§codeã倧ãããªãæ¬ ç¹ãå®ã¯ç¡èŠã§ããªãã®ãšãæ«ç«¯ã®
call ã®æéã¯å®ã¯å°ããã®ãšã§ãinline ã¯ãããŸãæå¹ã§ãªã
ã£ãŠããšãªãã§ããããã
ãã®äžæ¹ã§ãnested function call ãšã indirect function call
ã£ãŠã®ã¯ãããã©ãŒãã³ã¹ã«å¯Ÿãã圱é¿ã¯çµæ§ããããããªããã£
ãŠã®ãåã®æèŠã§ããstack top ã register ã«ãã£ãã·ã¥ããã®
ã¯æå¹ãªæè¡ãªã®ã§ãåçŽã«ãå¿
ãstackã«è§Šãcall/return ãã
ã®ã§ã¯ã ããªããããªããããã£ãŠããã§ããã
> åå²äºæž¬ã«é¢ããŠã¯ããã§ãããã§ãããµãã«ãŒãã³ã»ã³ãŒã«ã®ç²
> ã«å€éšã¡ã¢ãªã«è§Šãã£ãŠã®ã¯éçãããã ããã£ãŠããšã§ãã
>
> PowerPC ã® link register ã¯ãåªããŠãããšæãããã©ãSPARCã®
> æ¹åŒã¯å€ãããã€ãã¯å€éšã¡ã¢ãªã«è§ŠãããšããŠãããããã³ã³ã
> ã€ã©ãªãããŒããŠã§ã¢ãªãããé ããŠãããããããããã
ãã£ãšïŒleaf procedure以å€ã§ã¯å¿
ãlink registerãã¹ã¿ãã¯ã«ã»ãŒããã
ããããªãã§ãããã? ããã¯PowerPCãMIPSãAlphaãåãã§ã¯ïŒ
CISCã ãšïŒleafãžã®callã§ãã¡ã¢ãªãžã®åç
§ãèµ·ããïŒ
SPARCã ãšïŒleaf以å€ã§ãã¡ã¢ãªã«æžããªãããšãããïŒ
æ»ãPCã«é¢ããã¡ã¢ãªãžã®åç
§ã®åæ°ã ãã§èšã£ããïŒ
CISC > PowerPC = MIPS = Alpha = ... >= SPARC
ã§ã¯?
(ãã£ãšãïŒåŒæ°ãå±æå€æ°ãèãããš ä»ã®RISC >= SPARCãšã¯å¿
ãããèšã
ãªããã©ïŒ)
> > ããŒã¿ãã¹ãèãããšåãããŸããïŒPCã¯ç¹å¥æ±ãããæ¹ãã»ãšãã©ã®å Žåæ
> > å©ã ãšæããŸãïŒ
>
> äºæž¬ã«é¢ããŠã¯ãåœä»€éšã§äºæž¬ããããªãã©ã³ãã§äºæž¬ãããã®é
> ãã ãã ãšæããã ãã©...
>
> ãªããŠããã®ããªã
> a = b?3:4
> cmp b
> jz _2
> move r10,3
> j _1
> _2: move r10,4
> _1: st a,r10
> ããåå²ãèšç®ã«æžãæãã
> a = b*3+(!b)*4
...
> ã®æ¹ãéãã£ãŠã®ã¯ãåå²ã«æŒç®ãé¢ãã£ãŠãªãããã§ãã£ãŠãæ¬
> æ¥ã¯åè
ã®æ¹ãéãã¹ããªããããªãããªãšæããŸãã...
åãããããªãåå²äºæž¬ãå¹ããŠïŒåå²ã§ãã£ãæ¹ãéããªãããããªãã§ã
ãïŒ
åããããã®ç¢ºçã ãšãããšïŒåå²ã ãã§é 匵ãã«ã¯ïŒåå²ã®äž¡æ¹åã«ã€ããŠ
ææ©çã«åœä»€ã®å®è¡ãå§ããªããšãããªããšæãã®ã§ããïŒãã®ã¢ãããŒãã
ãšç¡é§ãª(ææ©ã«å€±æãã)åœä»€ãææ°é¢æ°çã«å¢ããŠããŸã£ãŠïŒããã»ããµè³
æºã®ç¡é§äœ¿ãã«ãªããŸãïŒ
> ããŒã¿ãã¹çã«ã¯ãPCã«ããç®ããããªããŠã®ã¯ç¢ºãã«åºãŠæ¥ãªã
> ã®ã§ãç¡é§ãªã®ããç¥ããªããã§ããShard Library ãšãã®
> PIC (Position Independent Code) ãšãããªããžã§ã¯ãæåçãª
> éæ¥ã³ãŒã«ãå€éã«åºãŠæ¥ãç¶æ³ã§ã¯ãçµæ§ãæ±çšçã«äœ¿ãããŠãŸãã
åé¡ã¯é »åºŠã§ããïŒãããã䜿ãæ¹ã(SPEC INTã®ãã³ãããŒã¯ã§é«ãé »åºŠã«
ãªãããã)è¯ãåºãŠãããªãïŒããã»ããµãããã«å¯Ÿå¿ãããšæããŸãïŒ
> PowerPC ã¯è¯ãã§ããŠãŸãããã ã
> cmp flag1
> cmp flag2
> cmp flag3
> jcond flag1,_1
> jcond flag2,_2
> jcond flag3,_3
> ã¿ãããªã®ã£ãŠãããã«ãIPCã®ããã§ãã£ãŠãå®æ§èœãšã¯é¢ä¿ãªã
> ã£ãŠæããããŸããã?
> cmp
> jcond _1
> cmp
> jcond _2
> cmp
> jcond _3
> ã§ã§ããã¯ãã ã£ãŠããã§ãã
ãããïŒäžã®ã³ãŒãã§3ã€ã®cmp ... jcond ãã¢ã®éã®äŸåæ§ãç¡ããããšã
ãã®ãçãã§ãããïŒflagã1ã€ã ãšéäŸå(ãåºåäŸå)ãåºãŠããŠããŸããŸ
ãïŒrenaming ããã°è¯ããšãã話ããããŸããïŒããã¯scoreboarding颚ãªé
äžå¶åŸ¡ã«ããŠãããŸãïŒãã®èŸºã¯design decisionã§ãããïŒ
> > # ãããããã¢ã»ã³ããªèšèªããã°ã©ãããèŠããããããã¯ïŒããŸãæ§èœã«
> > # çµã³ä»ããªãããã«æããŸãïŒ
>
> ã³ã³ãã€ã©ã¯éçäºæž¬ãè¡ãªããCPUã¯åçäºæž¬ãè¡ãªãããã®é
> ã®æ©æž¡ããã¢ã»ã³ãã©èšèªã®äºæž¬ã«å¯Ÿããæ©èœã§ããã
>
> äºæž¬ãšåäœèšè¿°ãåããæ¹ãè¯ãã£ãŠããšãªã®ããªã
ããïŒãã®ãŒãlink registerãæ±çšã¬ãžã¹ã¿ã«ããããšããPCãæ±çšã¬ãžã¹
ã¿ã«ããããšãïŒãçŽäº€ããã¢ãã¬ãã·ã³ã°ã¢ãŒãããšãã¯ïŒå¥ã«éããªããª
ãããšãå€ããšããããšã§ãïŒããšã¯ãOOã®å¹çè¯ãå®è£
ã®ããã®åœä»€ããšã
ãïŒ
åç°æŠåž
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> inline ã§codeã倧ãããªãæ¬ ç¹ãå®ã¯ç¡èŠã§ããªãã®ãšãæ«ç«¯ã®
> call ã®æéã¯å®ã¯å°ããã®ãšã§ãinline ã¯ãããŸãæå¹ã§ãªã
> ã£ãŠããšãªãã§ããããã
çµã¿èŸŒã¿åãã ãšã³ãŒããµã€ãºãç¡èŠã§ããªããŠãã£ãã·ã¥ã«å
¥ã
ãããã©ããã§ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãã§ãŸãã
In article <m3znfl5...@maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes:
> ããã¯åãããã§ãããã©ïŒg_10(), g_20(), g_4()ãšããããããã§ããã
> ãããªãã(ã ã£ããã€ã³ã©ã€ã³å±éã®æ¹ãè¯ãããããªãã)ãšããããšã§ãïŒ
> ãã¡ãã¡ããg(10, x, y)ã®ããã«ç¹å®ã®åŒæ°ã ãã§åŒã°ãããšããããšãïŒ
> ãããªã«ãããã®ãã©ããïŒããšã¯ïŒspecializeçµæãã¡ãããš(åãã€ã³ã¹
> ã¿ã³ã¹ãåŒã¶ããã«)å
±æããã®ããããªã«ç°¡åãªã®ãã©ãã(è²ããªãã¡ã€ã«
> ããåŒã°ããŠããïŒãšã)ïŒ
specialization ã®çµæã®ã³ãŒãã®å
±æããããããªãspecializer
ã¯ãèŠãããšããªãã§ãããç 究ã¬ãã«ã§ã¯ã誰ãããã£ãŠããã
ãªæ°ããããã ããã©ãspecialization ã¯ãé«éåãç®çãªã®ã§ã
ããããããŠé
ããªã£ãããããªãããšããã¹ã¿ã³ã¹ã§ããããã
ãæå³ã§ã¯ãå¿
ãããŸãè¡ãããšã«ãªã£ãŠãããã ãã©ãããŸããã£
ããã©ãã誰ã確ãããããšããåé¡ãæ®ãããšããããšã§ãããã
éã«ãã³ãŒãã®å
±æãæ¬åœã«åŸãªããspecialization ã®éããã
ã°ãããã§ãããã仮㫠generalization ãšåŒã¶ããšã«ããŸãã
ïŒâæ£åŒã®çšèªãããã°ãæããŠãã ãããïŒãç°¡åã«ã§ãã
generalization ã¯ãinline ã®éã« outline ãšãããããããšé¢
æ°åŒåºãã«ãããã®ã§ãã
åã«ãTempo ã®éçºå
ã®äžäººã«ãinline ã®éãããŠã¿ãããšã¯èšã£
ãŠã¯ã¿ããã ãã©ããããªããšã specializer ã«æ±ããããŠãããã
ã¿ãããªåå¿ã§ãããããã¯ããã§ãã
In article <3989159...@insigna.ie.u-ryukyu.ac.jp>
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> æ²³éçæ²» @ çç倧åŠæ
å ±å·¥åŠã§ãã
> èªæãªäŸã ãšã
> inline fd(struct handle hd) { return hd.hoge->hage->fugo->fd; }
> ã¿ãããªå¥Žãã§ããããã
> fd(hd0) = fd(hd0) + 3;
> ã¿ãããªåœ¢ã§åŒã°ããããã ãªã(ãã£ãšå·ŠåŽã«ã¯çœ®ããªãã...)
ïŒïŒã®åç
§åã䜿ãã°ã眮ãããã§ããã£ããïŒïŒã®åç
§åã¯ã
ãœãŒã¹ãèªããªããªãããäžè¬çã«ã¯äœ¿ãããã¯ãªããã ãã©ã
ã®ç¹æš©ã¢ãŒãã®ãããªæãªãèš±ããŠãããããªã
> ãã®ãããã¯è²ããªæè¡ããããããªãã ãã©... äœæ
ãinline
> ã ãã䜿ãããŠããã®ããšèšããšãåŒã³åºãåŽã ãèŠãã°è¯ããã
> ãªãã ãããªãã§ããæé©åãšãã芳ç¹ããèŠãã°ãå
šäœãèŠãªã
> ãã°ã ããªã®ã¯åœç¶ãªãã§ããã©ãã
èšèªã ãš inline ã¯ããã¯ãããã¯ã¯ããã«èŠãããã®ã§ããã
ããæå³ã§ã¯èš±ãããªããregister ãšåãããã«ããã®ãã¡ã³ã³
ãã€ã©ãç¡èŠããããããªãããªãã
inline ã§æå³çã«éãã®ã¯ããªããžã§ã¯ãã«ã·ã³ãã«ãæ®ããªã
ããšã§ããæã® Linux (2.2) ãªããããã®æ©èœã«é Œã£ãŠããŠã
inline ãå€ããã€ãŸããã³ã³ãã€ã«ã»ãªãã·ã§ã³ -O2 ãåããšã
ãªã³ã¯æã«ãšã©ãŒã«ãªããŸãããããã°ãããã ããªã®ã«ãä»ã§ã
ãããªãã§ãããã
In article <septgh9...@astec.co.jp>
Takuya KUDO <ku...@astec.co.jp> writes:
> çµã¿èŸŒã¿åãã ãšã³ãŒããµã€ãºãç¡èŠã§ããªããŠãã£ãã·ã¥ã«å
¥ã
> ãããã©ããã§ããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãã§ãŸãã
ã¡ã¢ãªäœ¿çšéãæžãããªããã€ã³ã¿ããªã¿ã«ãããšãããã§ãããã
æã¯ïŒæ®µéã®ã€ã³ã¿ããªã¿ããã£ãæããŸãããã§ããå
šéšã€ã³ã¿
ããªã¿ãšããããã«ããããªããŠãå±éãšãããã³ã³ãã€ã«ãšãã
ã specialize ãã¹ãæãããã®ã§ãããããã©ã誰ãã©ããã£ãŠ
å€æãããã§ããããã