Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

GCC __attribute__((hot))

More than 3 years have passed since last update.

GCCはFunction Attributeとして __attribute__((hot)) という属性を関数に付与することができます。

https://gcc.gnu.org/onlinedocs/gcc-4.3.5/gcc/Function-Attributes.html から引用すると、

The hot attribute is used to inform the compiler that a function is a hot spot of the compiled program. The function is optimized more aggressively and on many target it is placed into special subsection of the text section so all hot functions appears close together improving locality.
When profile feedback is available, via -fprofile-use, hot functions are automatically detected and this attribute is ignored.
The hot attribute is not implemented in GCC versions earlier than 4.3.

この属性が付与された関数は積極的に最適化を行い多くの環境で特別なsubsectionに配置される、とあります。GCC 4.3から入ったようです。

これの何が嬉しいのかというと(上記説明にもありますが)、よく呼ばれる関数が一箇所に固まっているとCPUキャッシュのローカリティが高まり、L1/L2キャッシュのヒット率が向上することが期待できます。今年のLLVM Developer's MeetingでもCode Placementがパフォーマンスに与える影響についてIntelの人が話していました。(http://schd.ws/hosted_files/llvmdevelopersmeetingbay2016/d9/LLVM-Conference-US-2016-Code-Alignment.pdf)

special subsectionはどのようなものでしょう。LinuxのELFでは .text.hot というセクションに配置されるようです。確認してみましょう。


int foo()
  return 1;

int main(void)
  int a = foo();

special subsectionはLoaderが解釈するものではありませんから、バイナリ表現では確認できません。そのため出力されるアセンブリをみてみます。

$ gcc -O3 -S hot.c
    .file   "hot.c"
    .section    .text.hot,"ax",@progbits
    .p2align 4,,15
    .globl  foo
    .type   foo, @function
    movl    $1, %eax
    .size   foo, .-foo
    .section    .text.startup,"ax",@progbits
    .p2align 4,,15
    .globl  main
    .type   main, @function
    xorl    %eax, %eax
    .size   main, .-main
    .ident  "GCC: (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005"
    .section    .note.GNU-stack,"",@progbits

.text.hot というsectionが確認できました。

Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away


No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
Help us understand the problem. What is going on with this article?