2010-07-22 37 views
1

我而執行使用的openmp在VS2008 C++OpenMP的錯誤消息

線程編號方案得到了與錯誤消息的輸出如下:0

線程號:1

致命用戶錯誤1002 :for for循環執行 之間的參數不一致

我的程序會執行以下操作g:

omp_set_dynamic(0); 
    omp_set_num_threads(2); 

    int i = 0; 
    int start_pos = 0; 
    int end_pos  = 0; 

#pragma omp parallel default(none) private(i, start_pos, end_pos) 
    { 
     int nThreadNum = omp_get_thread_num(); 
     printf("thread number: %d\n", nThreadNum); 
     start_pos = 0; 
     end_pos  = (number_of_model_points/2 + 1); 
     if (nThreadNum != 0) { 
      start_pos = (number_of_model_points/2) + 1; 
      end_pos  = (number_of_model_points); 
     } 

#pragma omp for 
     for(i = start_pos; i < end_pos; i++) { 
         ...some code here... 
     } 
} 

這裏有什麼問題?如果我犯了一個錯誤,請糾正我。

回答

1

那麼爲什麼還有一個額外的for循環的編譯指示?您已經完成了您的流程。 如果你真的想再次分岔(不要這樣做,請!),那麼「我」需要再次設置爲私人。不過,我認爲你只是想刪除「omp for」編譯指示。

+0

這是錯誤原因的正確答案。你通常希望在'#pragma omp parallel'裏面做一個'#pragma omp for'來利用工作共享 - 'omp for'會爲你分割循環,否則你會擁有所有的線程(而不是進程)執行相同的循環。 **但是**,在這裏你已經完成了自己手動分解循環的工作;有時這是有利的,雖然我沒有看到這方面的好處。所以你希望所有的線程都爲循環做同樣的事情,每個線程都在自己的區域內進行。所以你不需要omp。 – 2012-04-04 15:15:14