Kalombyr
@Kalombyr

Можно ли и имеет ли смысл этот код перенести на OpenCL?

Доброго дня!
Есть вот такой участок кода:

struct TTour {
   QVector<int> tour;
   double cost;
};

TTour Tournamet::iter(const TTour &currentTour)
{
    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. "попробуй, да узнаешь" - обязательно попробую. Но хочется понять почему может быть бессмысленно в плане производительности и прочего и может быть лучше пробовать на другом примере...
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Скорее всего параллелизм ничего не даст. Дело в том что параллелятся задачи когда
1) Shared nothing. Есть множество процессов и они работают со своими массивами данных а потом сливают результат в некий итог.
2) Шарятся данные но при этом они иммутабельные.
В твоём случае используются операции такие std::reverse, QVector::mid. Они ломают общий снапшот данных и не дают выполится пункту (2).

Вобщем надо серъезно сломать алгоритм чтобы получить ползу от параллелизма.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы