雨谷の日和

過去19年で2,600を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

Cでの行列式計算(Borland C、再帰有)

まずは再帰呼び出し有の場合のソースコードコンパイルし、実行時間を見てみよう。

動的メモリ確保、malloc/free

20:16:31 result: 489261678 20:16:37 result: 489261678 20:16:42

最適化無:約6秒、最適化有:約5秒

動的メモリ確保、alloca

20:16:42 result: 489261678 20:16:47 result: 489261678 20:16:51

最適化無:約5秒、最適化有:約4秒

事前メモリ確保、malloc/free

20:16:51 result: 489261678 20:16:55 result: 489261678 20:16:59

最適化無:約4秒、最適化有:約4秒

事前メモリ確保、alloca

20:16:59 result: 489261678 20:17:03 20:17:09

最適化無:約4秒、最適化有:error


以上のような結果となった。
gcc の場合に見られたような、malloc/freeの場合の大幅な性能劣化はBorland C の場合には無いようである。
これらの結果から、kp氏の指摘のようにgccmalloc/free に関するコンパイルがおかしいのか、それともBorland C のコンパイルが優秀なのかのどちらかを意味していると考えて良いだろう。
引き続き、関数へ展開した場合と、ループに展開した場合についても同様の実測を行おうと思う。


ちなみに、Borland C の場合に事前メモリ確保の場合のalloca の実装で、最適化有にするとエラーで実行が止まってしまうという現象があった。これが何を意味しているのかはよく分からない。