Доброго дня!
Есть вот такой участок кода:
struct TTour {
QVector<int> tour;
double cost;
};
TTour Tournamet::iter(const TTour ¤tTour)
{
int n = currentTour.tour.count();
TTour bestTour = currentTour;
for(int i=1; i<n-2; ++i){
for(int j=i+1; j<n+1; ++j) {
if(j-i == 1) continue;
QVector<int> swap = currentTour.tour.mid(0, i);
QVector<int> l1 = currentTour.tour.mid(i, j-i);
QVector<int> l2 = currentTour.tour.mid(j);
std::reverse(l1.begin(), l1.end());
swap.append(l1);
swap.append(l2);
TTour newTour = {swap, cost(swap)};
if( newTour.cost < bestTour.cost ) bestTour = newTour;
}
}
}
double Tournamet::cost(const QVector<int> &points)
{
double total = 0;
for(int i=1; i<points.count(); ++i) {
total += _distancer->dist(points[i-1], points[i]); //-- Внутри расстояние отдаётся из QHash, каждый раз не вычисляется.
}
return total;
}
Подумал, что пришло время изучить OpenCL, что бы оптимизировать этот участок.
Собственно вопрос, можно ли, а главное - имеет ли смысл (в плане распараллеливания и ускорения) его переносить?
P.S. "попробуй, да узнаешь" - обязательно попробую. Но хочется понять почему может быть бессмысленно в плане производительности и прочего и может быть лучше пробовать на другом примере...