Ця розробка задумана для полегшення програмування і обчислення поширених завдань на багатопроцесорних кластерах. В Qt вона реалізована для мультиядерних систем.
API виглядає так:
QFutureПрипустимо що нам потрібно порахувати частоту появи слів в декількох документах:mappedReduced(list, mapFunction, reducefunction);
В цьому випадку map функція буде рахувати входження слів в кожному документі паралельно, а reduce об'єднає результати в фінальне значення частоти.
На вході маємо список текстів що містять документи:
QListmap функція бере документ і повертає хеш із данними про кількість входження кожного слова в документі.list;
QHashmapFunction(const QString &document);
Reduce функція братиме проміжні результати виконання map і формуватиме фінальний результат. Система забезпевить виклик reduce тільки однією map одночасно.
void reduceFunction(QHasht&finalResut, const QHash &intermediateResult);
Тепер можна використати це все разом:
QFuture<qhashОскільки mappedReduced( ) повертає QFeature є декілька способів синхронізуатися з результатом. Найпростіший спосіб це просто викликати QFuture::result() що заблокує виконання поки результат не буде готовий. Якщо блокування не допустиме (програма має графічний інтерфейс) можна використати сигнал-слот зв'язок щоб відобразити стан обчислень та отримати результат. Також можливо зупинити обчислення QFuture::cancel().>counting = mappedReduced(list, mapFunction, reduceFunction);
Таким способом зручно виконувати багато поширених завдань: пошук, сортування, компресія, тощо.
Лінки:
Qt Concurrent integrated!
MapReduce was originally developed by Google to simplify writing parallel algorithms for computer clusters.
Немає коментарів:
Дописати коментар