Avatar
チェックアウトしてそのまま(Debugビルド) original : 6.072 sec. imperative : 2.023 sec. pointer : 334.983 msec. Release Build に変更 original : 5.486 sec. imperative : 1.306 sec. pointer : 102.905 msec. (edited)
12:30 PM
mul2を @_inlineable, Release original : 5.773 sec. imperative : 54.375 msec. pointer : 113.603 msec. (edited)
12:31 PM
mul2とmul3を @_inlineable、Release original : 5.599 sec. imperative : 49.306 msec. pointer : 57.74 msec. (edited)
😮 1
12:33 PM
mul2とmul3を @_inlineable, Debug original : 6.505 sec. imperative : 2.068 sec. pointer : 201.69 msec. (edited)
12:37 PM
おそらく、そもそもsubscriptアクセスを行う関数(ここではmul2とmul3)自体がインライン化されないと、その先のsubscriptのインライン化もされないです。 subscriptだけinlineableであっても、mul2をコンパイルする時点ではジェネリックなRとして取り扱うコードしか生成しようがないからです。 利用時に Int を渡してmul2をインラインコンパイルするときに初めて、その先のsubscriptまで具象型Intが与えられたバージョンが生成されます。
12:41 PM
それと、Releaseビルドで、Optimizationオプションが -O で有効になっていないとだめで、Debugビルドではinlineableであってもインライン化はされないみたいですね。 (edited)