2

以下のようなループがあります。問題は、「Seehere」とマークされた内側のforループにあると思います。それの問題は何ですか?

// measure time to write different sizes of data
for (int i = 0; i < sizeof(sizes)/sizeof(int); i++) {
    lengthMod = sizes[i]/sizeof(int) - 1;

    start = wall_clock_time();

    for (unsigned int j = 0; j < 10; j++) // << See here!!!
        tmp = 1;

    // force any write back cache to flush. read from other data source
    for (unsigned int j = 0; j < REPS; j++) // << Or here!!!
        tmp = j;

    end = wall_clock_time();
    timeTaken = ((float)(end - start))/1000000000;
    fprintf(stderr, "%d, %1.2f \n", sizes[i]/1024, ((float)(end - start))/1000000000);
}

完全なソースはGitHub〜line32で確認できます


g++ -O3 cache-write.cpp -o cache-write -lrt
cache-write.cpp: In function ‘int main()’:
cache-write.cpp:36:27: error: expected primary-expression before ‘;’ token
cache-write.cpp:36:27: error: expected ‘)’ before ‘;’ token
cache-write.cpp:36:29: error: name lookup of ‘j’ changed for ISO ‘for’ scoping [-fpermissive]
cache-write.cpp:36:29: note: (if you use ‘-fpermissive’ G++ will accept your code)
cache-write.cpp:36:32: error: expected ‘;’ before ‘)’ token
cache-write.cpp:44:11: error: ‘data1’ was not declared in this scope
make: *** [cache-write] Error 1
4

2 に答える 2

4

REPSを宣言する場所で#defineを使用する代わりに、

const unsigned int REPS = whatever;

通常、C ++では#defineの使用を避けてください。これは、発生している種類の問題を簡単に引き起こす可能性があるためです。

于 2012-10-06T12:05:31.080 に答える
3

REPSの定義の最後にセミコロンがあります。

#define REPS 128 * MB;
于 2012-10-06T12:03:49.170 に答える