私は最近target_clones
、gcc 6.1 以降で利用可能な属性をいじってみました。これはかなり気の利いたものですが、今のところ、やや不器用なアプローチが必要です。マルチバージョン化が必要なすべての関数には、属性を手動で宣言する必要があります。以下の理由により、これは最適とは言えません。
- コンパイラ固有のものをコードに入れます。
- 開発者は、どの関数がこの処理を受ける必要があるかを特定する必要があります。
利用可能な場合、AVX2 命令を利用するコードをコンパイルしたい例を見てみましょう。-fopt-info-vect
を使用してビルドすると、どの関数がベクトル化されたかが-mavx2
わかるため、コンパイラーは既にこれを認識しています。グローバルに、コンパイラに次のように伝える方法はありますか? そうでない場合は、お願いできますか?