#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. Окей, тай, я могу применить разворачивание и замятие, верно?