gcc でコンパイルするときに、カーネル モジュールのコード最適化を無効にする方法を理解しようとしています。私はこのようなプラグマを与えてみました
#pragma optimize("",off)
void rt_ct_use_cpu(unsigned long long n_cicle){
unsigned long long i;
for(i=0;i<n_cicle;i++);
}
#pragma optimize("",on)
しかし、コンパイラはこれらのプラグマを無視するという警告を出します。私はまた、コンパイラがループをロールするのを避けるようなものを作ってみました
void rt_ct_use_cpu(unsigned long long n_cicle){
unsigned long long i;
unsigned long long time=0;
unsigned long long timebase = rt_get_cpu_time_ns();
for(i=0;i<n_cicle;i++) {
time += rt_get_cpu_time_ns();
time -= timebase;
}
}
ただし、この場合、cicle の長さ (n_cicle の大きさ) は問題ではありません。プログラムは常に同じ時間 (数ミリ秒) 実行されます。
手伝って頂けますか?