2013-05-26 37 views
-1

實際上,爲什麼我的循環不停止工作?它應該進行大約100次迭代,但不會停止,請幫助。 我拿了min_block_size這是我的緩存1級的10%,而max_block_size這是我的l2緩存內存的10%!執行操作時處理元素到內存塊的速度

#include <iostream> 
#include <Windows.h> 
#include <time.h> 
#include <fstream> 
#define MIN_BLOCK_SIZE 13108 
#define MAX_BLOCK_SIZE 104858 
#define STEP 1024 
using namespace std; 

int main() 
{ 
    setlocale(LC_CTYPE, "Russian"); 


    int i, j, c, b; 
    clock_t c1, c2; 
    int*p = (int*) malloc(MAX_BLOCK_SIZE); 
    int tmp = 0; 
    LARGE_INTEGER start, finish, freq; 
    c1 = clock(); 
    int n = 0; 
    for (b = 13108; b < 104858; b = +1024) 
    { 
     QueryPerformanceFrequency(&freq); 
     QueryPerformanceCounter(&start); 
     for (c = 0; c <= b; c += sizeof (int)) 
     { 
      tmp += *(int*) ((int) p + c); 
      *(int*) ((int) p + c) = tmp; 
     } 
     QueryPerformanceCounter(&finish); 
     double time = (finish.QuadPart - start.QuadPart)/(double) freq.QuadPart; 
     n++; 
     cout << "Размер" << n << "блоков:" << (MIN_BLOCK_SIZE + 1024 * (n - 1)) << "KB" << endl; 
     cout << "Время o6pаботки" << n << "блоков" << time * 1000000 << "мкс" << endl; 
     cout << "время обработки одного елемента" << time * 1000000000/(MIN_BLOCK_SIZE + 1024 * (n - 1)) << "наносек" << endl; 
    } 
    c2 = clock(); 
    cout << "All the time is" << c2 - c1 << "sec"; 
    cin.get(); 
    cin.get(); 
    return 0; 
} 
+1

'TMP + = *(INT *)((int)的P + C);'有一個很好的機會,指針轉換'int'丟失信息,並從閱讀(然後寫入)你不擁有的內存。使用'int * q = p'和'++ q;'有什麼問題? –

+0

您有幾個已回答的問題,並且您沒有接受答案。解決問題時請接受答案。 –

回答

2

這條線:

for (b = 13108; b < 104858; b = +1024) 

意味着永遠運行一個循環,因爲b重置爲+1024(沒有加入1024!)。想必你的意思是寫:

for (b = 13108; b < 104858; b += 1024) 
+0

好眼睛。我自動更正,當撇取(但沒有空間)。 –

+0

@DanielFischer:幸運的是,我大多隻會自動更正我自己的代碼。如果我稍微離開它,然後回頭看看它,它會有很大的幫助,所以我不會讀我寫的內容而不是我實際寫的內容。 :-) – torek

+0

以及謝謝,我還沒有看到 –

相關問題