Как мне применить тайлинг цикла?

#c #loops #gcc #openmp #tiling

#c #циклы #gcc #openmp #тайлинг

Вопрос:

Я пытаюсь применить тайлинг кода, но я действительно этого не понимаю, я видел кое-что о внутреннем цикле, но у меня нет никаких внутренних циклов. Кто-нибудь может мне это объяснить? Я использую компилятор gcc.

   
  #pragma omp parallel for reduction ( :outputBins)
  for (int i = 0; i < inputData.numDataPoints; i  ) { 
    // Transforming from cylindrical to Cartesian coordinates:
    const FTYPE x = inputData.r[i]*COS(inputData.phi[i]);
    const FTYPE y = inputData.r[i]*SIN(inputData.phi[i]);

    // Calculating the bin numbers for these coordinates:
    const int iX = int((x - xMin)*binsPerUnitX);
    const int iY = int((y - yMin)*binsPerUnitY);

    // Incrementing the appropriate bin in the counter
      outputBins[iX][iY];
  }
}
/// I tried this, but doent do re correct thing because it messes with paralelization
  const int N = 20000;
  
  #pragma omp parallel for reduction ( :outputBins)
  for (int j=0; j < inputData.numDataPoints; j =N){

    for (int i = j; i < (j N); i  ) { 
      // Transforming from cylindrical to Cartesian coordinates:
      const FTYPE x = inputData.r[j]*COS(inputData.phi[j]);
      const FTYPE y = inputData.r[j]*SIN(inputData.phi[j]);

      // Calculating the bin numbers for these coordinates:
      const int iX = int((x - xMin)*binsPerUnitX);
      const int iY = int((y - yMin)*binsPerUnitY);

      // Incrementing the appropriate bin in the counter
        outputBins[iX][iY];
    }
  }

 

Комментарии:

1. Пожалуйста, укажите, что именно вы подразумеваете под «тайлингом цикла». В чем проблема с первой версией? OpenMP должен автоматически распределять цикл по потокам в «плитках» (при условии статического планирования). Если у вас есть гнездо цикла, вы можете захотеть тайлинг в более чем одном измерении, если это оптимизирует локальность кэша. Но в вашем случае это не требуется, как вы сами заметили.

2. Я уже сделал это, я ссылался на то, как применить блокировку, я был немного растерян, спасибо за помощь: D

3. Выполняется потоковая передача одномерных входных данных. Практически нет смысла применять тайлинг здесь, особенно если координаты распределены случайным образом.

4. Окей, тай, я могу применить разворачивание и замятие, верно?