Главная страница
Навигация по странице:

  • – позволяет прокидывать в параллельное выполнение итераций объекты необходимые объекты из глобального окружения. . packages

  • Алгоритм Краскала. Cинтаксис на слайде. Аргументы конструкции foreach позволяет передавать любое количество итераторов


    Скачать 16.9 Kb.
    НазваниеCинтаксис на слайде. Аргументы конструкции foreach позволяет передавать любое количество итераторов
    Дата02.06.2022
    Размер16.9 Kb.
    Формат файлаdocx
    Имя файлаАлгоритм Краскала.docx
    ТипДокументы
    #564997

    Введение — Бывает такое, что появляется необходимость многократного выполнения какой-либо операции. Повторные выполнения можно выполнять вручную, но выполнение повторяющихся операций становится довольно утомительным. К счастью, 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 пакет.


    написать администратору сайта