Алгоритм Краскала. Cинтаксис на слайде. Аргументы конструкции foreach позволяет передавать любое количество итераторов
Скачать 16.9 Kb.
|
Введение — Бывает такое, что появляется необходимость многократного выполнения какой-либо операции. Повторные выполнения можно выполнять вручную, но выполнение повторяющихся операций становится довольно утомительным. К счастью, R имеет свой собственный встроенный язык, который предназначен для автоматизации утомительных задач, таких как многократное выполнение вычислений R. R поставляется с различными циклическими конструкциями, которые решают эту проблему. Foreach Пакет предоставляет новую циклическую конструкцию для многократного выполнения R-кода. Основная причина использования foreach пакета заключается в том, что он поддерживает параллельное выполнение, то есть может выполнять эти повторяющиеся операции на нескольких процессорах / ядрах вашего компьютера или на нескольких узлах кластера. Если каждая операция занимает более минуты, и вы хотите выполнить ее сотни раз, общее время выполнения может занять несколько часов. Но используя foreach, эта операция может выполняться параллельно на сотнях процессоров в кластере, сокращая время выполнения до нескольких минут. Cинтаксис – на слайде. Аргументы конструкции foreach - … - позволяет передавать любое количество итераторов. .combine – позволяет определить то, как результат каждой итерации после выполнения цикла будет объединен в единый объект. По умолчанию это список, состоящий из результатов выполнения каждой итерации. .inorder – позволяет передать в foreach значение true или false и определить, надо ли выполнять сортировку значения полученного на каждой итерации цикла, или порядок не важен. .export – позволяет прокидывать в параллельное выполнение итераций объекты необходимые объекты из глобального окружения. .packages – позволяет в виде вектора имен пакетов перекинуть названия пакетов которые необходимы для выполнения итерации цикла. То есть, если в теле цикла используются какие то пакеты, их имена необходимо передать в аргумент packages в виде текстового вектора. Первый пример использования - Давайте рассмотрим простой пример использования foreach пакета. В этом примере foreach используется для многократного выполнения функции возведения числа в квадрат, передавая ей значения от 1 до 3 и возвращая результат в виде списка. Второй пример использования – По умолчанию, результат возвращается в виде списка так как список может содержать любой объект R. Но если мы хотим, чтобы результат вернулся в виде вектора, мы используем опцию .combine Третий пример использования – Пример реализации матрицы . Для этого используем cbind, который генерирует четыре вектора из четырех случайных чисел и объединяет их по столбцам, чтобы получить матрицу 4 на 4. Для того, чтобы использовать dopar, мы должны настроить кластер. Настройка кластера на одном компьютере требует сначала выяснить, сколько ядер мы хотим использовать из тех, которые у нас есть. Рекомендуется оставить одно свободное ядро для других задач. Теперь нам нужно определить кластер with parallel::makeCluster()и зарегистрировать его , чтобы он мог использоваться %dopar%with doParallel::registerDoParallel(my.cluster). typeАргумент parallel::makeCluster()принимает строки “PSOCK” и “FORK” для определения типа используемого параллельного бэкенда. Заключение - большая часть параллельных вычислений сводится к трем вещам: разбиению задачи на части, параллельному выполнению частей и объединению результатов вместе. Используя foreach пакет, итераторы помогают разбить задачу на части, %dopar%функция выполняет эти части параллельно, а указанная .combine функция снова собирает результаты воедино. Я продемонстрировал, как простые вещи можно делать параллельно довольно легко, используя foreach пакет. |