Try   HackMD

2016q3 Homework1 (raytracing)

熟悉Gprof

  • 原理 ->
    在程式編譯或連結時, gcc 在每個函式中加上 mcount 的函式,當每執行函式時,會調用 mcount,mcount 會紀錄所有函式的使用表,並利用函式使用 stack 來紀錄子函式和父函式的地址

  • 以 Gprof 進行編譯, 產生 gmon.out 檔 ->
    gcc –o raytracing –pg main.c

  • 執行程式 ->
    ./raytracing

  • 顯示函式使用表 ->
    gprof raytracing gmon.out -b

    • -b 輸出圖表中每個函式的詳细描述。
    • -p 只輸出函式的使用表(Call graph 的那部分訊息)。
    • -q 只輸出函式的時間消耗列表。
    • -e Name 输出函式Name 及其子函式的使用表(除非它們有未被限制的其它父函式)。可以给定多个 -e 標誌。一个 -e標誌只能指定一个函式。
    • -z 顯示使用次數為零的例程(按照使用次數和累積時間計算)。
  • 當有許多程式碼有許多文件一起進行編譯時,要在每個產生.o檔的命令上加上-pg

對Ray tracing做最佳化

  • gprof的結果圖

這些函式都呼叫過千萬以上,所以會對這些函式做最佳化

  • 還未做最佳化的時間
    Execution time of raytracing() : 4.409498 sec

  • 使用loop unrolling
    Execution time of raytracing() : 3.859694 sec

  • 使用多執行緒