1

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 の大きさ) は問題ではありません。プログラムは常に同じ時間 (数ミリ秒) 実行されます。

手伝って頂けますか?

4

3 に答える 3

2

GCC プラグマのドキュメントを参照してください6.59.13 Function Specific Option Pragmas like in#pragma GCC optimize ("O0")

于 2013-12-16T21:35:08.927 に答える