Қысқарту операторы - Reduction Operator

Жылы Информатика, азайту операторы[1] түрі болып табылады оператор әдетте қолданылады параллель бағдарламалау массив элементтерін бір нәтижеге келтіру үшін. Редукция операторлары болып табылады ассоциативті және жиі (бірақ міндетті емес) ауыстырмалы.[2][3][4] Сияқты элементтер жиынтығын азайту бағдарламалау модельдерінің ажырамас бөлігі болып табылады Картаны азайту, мұнда төмендету операторы қолданылады (картаға түсірілген ) олар азайғанға дейін барлық элементтерге. Басқа параллель алгоритмдер күрделі операцияларды шешу үшін төмендету операторларын негізгі операциялар ретінде қолдану. Мәліметтерді барлық процессорларға тарату үшін тарату үшін көптеген төмендету операторларын пайдалануға болады.

Теория

Редукция операторы түпкілікті нәтиже алуға болатын ішінара нәтижелерді есептеу арқылы тапсырманы әртүрлі ішінара тапсырмаларға бөлуге көмектеседі. Ол белгілі бір сериялық операцияларды қатар жүргізуге және сол операциялар үшін қажетті қадамдар санын азайтуға мүмкіндік береді. Редукция операторы ішінара тапсырмалардың нәтижесін айнымалының жеке көшірмесінде сақтайды. Осы жеке көшірмелер соңында ортақ көшірмеге біріктіріледі.

Оператор төмендету операторы болып табылады, егер:

  • Ол массивті жалғыз скалярлық мәнге дейін төмендете алады.[2]
  • Соңғы нәтиже құрылған ішінара тапсырмалардың нәтижелерінен алынуы керек.[2]

Бұл екі талап массивтің барлық элементтеріне қолданылатын коммутативті және ассоциативті операторларға қойылады.

Осы талаптарды қанағаттандыратын кейбір операторлар қосу, көбейту және кейбір логикалық операторлар (және, немесе, т.б.).

Редукция операторы кіріс жиынтығында тұрақты уақытта қолдануға болады туралы векторлары бар әрқайсысы элементтер. Нәтиже операцияның элементтері болып табылады және орындау соңында көрсетілген түбірлік процессорда сақталуы керек. Егер нәтиже болса есептеу аяқталғаннан кейін әр процессорда болуы керек, оны көбіне Allreduce деп атайды. Төмендетудің оңтайлы дәйекті сызықтық-уақыттық алгоритмі әрдайым екі векторды оның барлық элементтеріне қолданылатын операцияның нәтижесімен ауыстыра отырып, операторды алдыңғыдан артқа қарай қолдана алады, осылайша бір векторы аз болатын дананы жасайды. Бұл қажет қадамдар ғана қалды. Тізбектелген алгоритмдер сызықтық уақытқа қарағанда жақсы жұмыс істей алмайды, бірақ параллель алгоритмдер оңтайландыру үшін біраз орын қалдырады.

Мысал

Бізде массив бар делік . Бұл жиымның қосындысын '+' операторының көмегімен массивті біртұтас қосындыға тізбектей азайту арқылы дәйекті түрде есептеуге болады. Жиынтықты массивтің басынан бастағаннан:

'+' Коммутативті де, ассоциативті де болғандықтан, ол төмендету операторы. Сондықтан бұл қысқартуды бірнеше ядролардың көмегімен қатар жүргізуге болады, мұнда әр ядро ​​массивтің ішкі жиынын есептейді, ал азайту операторы нәтижелерді біріктіреді. A пайдалану екілік ағаш қысқарту 4 ядроны есептеуге мүмкіндік береді , , , және . Сонда екі ядро ​​есептей алады және және, ақырында, бір ядролы есептеу . Осылайша, қосындысын есептеу үшін барлығы 4 ядроны пайдалануға болады қадамдарының орнына сериялық нұсқаға қажет қадамдар. Бұл параллельді екілік ағаштар техникасы . Әрине нәтиже бірдей, бірақ тек төмендету операторының ассоциативтілігі арқасында. Редукция операторының коммутативтілігі маңызды болар еді, егер жұмысты бірнеше процессорларға бөлетін негізгі ядролар болса, содан кейін нәтижелер кез-келген тәртіпте негізгі процессорға жетуі мүмкін. Коммутативтілік қасиеті нәтиженің бірдей болатындығына кепілдік береді.

Жоқ

Матрицаны көбейту болып табылады емес азайту операторы, өйткені жұмыс ауыстырылмайды. Егер процестерге матрицаны көбейтудің нәтижелерін кез-келген тәртіпте мастер-процеске қайтаруға рұқсат берілсе, мастер есептейтін соңғы нәтиже, егер нәтижелер тәртіптен шыққан болса, қате болуы мүмкін. Алайда, матрицаны көбейту ассоциативті екенін ескеріңіз, сондықтан екілік ағаштарды азайту әдістемесіндегідей, егер дұрыс тапсырыс берілген болса, нәтиже дұрыс болады.

Алгоритмдер

Биномдық ағаш алгоритмдері

Параллель алгоритмдерге қатысты параллельді есептеудің екі негізгі моделі бар параллель кездейсоқ қол жеткізу машинасы процессорлар мен ортақтасқан жады бар жедел жадының кеңеюі ретінде жаппай синхронды параллель компьютер байланыс қажет ететін және үндестіру ескереді. Екі модель де әртүрлі әсер етеді уақыттың күрделілігі, сондықтан екі алгоритм көрсетіледі.

PRAM-алгоритмі

Бұл алгоритм кірістерді өңдеудің кең таралған әдісін ұсынады екінің күші. Кері процедура көбінесе хабар тарату элементтері үшін қолданылады.[5][6][7]

Алгоритмді р = 8, m = 1, және азайту операторы ретінде қосу арқылы визуалдау
үшін дейін істеу
үшін дейін параллель жасаңыз
егер белсенді болады
егер аз болса туралы содан кейін орнатылады
орнатылды белсенді емеске
басқаша болса

Векторларға арналған екілік оператор элементтік тұрғыдан анықталған . Алгоритм бұдан әрі басында деп болжайды барлығына және екі қуат болып табылады және өңдеу қондырғыларын қолданады . Әр қайталануда өңдеу қондырғыларының жартысы жұмыс істемей қалады және әрі қарайғы есептеуге ықпал етпейді. Суретте алгоритмнің қосымша ретінде оператор ретінде көрнекілігі көрсетілген. Тік сызықтар сол сызықтағы элементтердің есептеулері жүретін өңдеу бірліктерін білдіреді. Сегіз кіріс элементі төменгі жағында орналасқан және анимацияның әр қадамы алгоритмнің орындалуындағы бір параллель қадамға сәйкес келеді. Белсенді процессор берілген операторды элемент бойынша бағалайды ол қазіргі уақытта және қайда орындалатын минималды индекс болып табылады , сондай-ақ қазіргі қадамда белсенді емес процессорға айналуда. және міндетті түрде енгізу жиынының элементтері болып табылмайды өрістер қайта жазылады және бұрын бағаланған өрнектер үшін қайта пайдаланылады. Әр қадамдағы өңдеу қондырғыларының рөлдерін олардың арасында қосымша байланыс тудырмай үйлестіру үшін, өңдеу блоктарының сандармен индекстелуі дейін қолданылады. Әр процессор оған қарайды - ең аз бит және енжар ​​немесе операторды өз элементі бойынша есептеп, индексі бар элементті есептейтін шешім қабылдайды. -ші бит орнатылмаған. Алгоритмнің негізгі байланыс үлгісі биномдық ағаш болып табылады, демек алгоритмнің атауы.

Тек нәтижені соңында ұстайды, сондықтан ол түбірлік процессор. Allreduce операциясы үшін нәтижені тарату керек, оны таратылымды қосу арқылы жасауға болады . Сонымен қатар, нөмір процессорлардың қуаты екіге тең болады. Мұны процессорлардың санын екеуінің келесі қуатына ауыстыру арқылы көтеруге болады. Сондай-ақ, осы жағдайға бейімделген алгоритмдер бар.[8]

Жұмыс уақытын талдау

Негізгі цикл орындалады параллель орындалған бөлікке уақыт қажет өңдеу блогы ретінде екі векторды біріктіреді немесе белсенді болмайды. Сонымен қатар уақыт PRAM үшін . Оқу мен жазудағы қақтығыстармен жұмыс істеу стратегиясын эксклюзивті және эксклюзивті жазу (EREW) сияқты шектеулі етіп таңдауға болады. Жылдамдық алгоритмі болып табылады сондықтан тиімділік болып табылады . Белсенді өңдеу қондырғыларының жартысы әр қадам сайын белсенді болмай қалатындықтан, тиімділік те төмендейді бірліктер қадамда белсенді .

Таратылған жад алгоритмі

PRAM-алгоритмінен айырмашылығы үлестірілген жад модель жады процессорлар арасында ортақ пайдаланылмайды және өңдеу блоктары арасында мәліметтер нақты алмасуы керек. Сондықтан, деректер алгоритмде көрсетілгендей, бірліктер арасында нақты түрде алмасуы керек.

үшін дейін істеу
үшін дейін параллель жасаңыз
егер белсенді болады
егер аз болса туралы содан кейін орнатылады
жіберу дейін
орнатылды белсенді емеске
басқаша болса
алу

Таратылған алгоритм мен PRAM нұсқасының арасындағы айырмашылық тек нақты байланыс примитивтерін қосу болып табылады, жұмыс принципі өзгеріссіз қалады.

Жұмыс уақытын талдау

Бөлімшелер арасындағы байланыс кейбір қосымша шығындарға әкеледі. Алгоритмге қарапайым талдау BSP-моделін қолданады және уақытты қосады байланысты бастау үшін қажет және байт жіберу үшін қажет уақыт. Сонда алынған жұмыс уақыты болады , сияқты вектордың элементтері әр қайталануда жіберіледі және олардың мөлшері болады жалпы алғанда.

Құбыр-алгоритм

Құбыр-алгоритмін р = 5, m = 4 және азайту операторы ретінде қосу арқылы визуалдау.

Таратылған жад модельдері үшін желілік байланысты қолдану мағынасы болуы мүмкін. Бұл әсіресе кезде салыстырғанда аз . Әдетте, желілік құбырлар деректерді немесе тапсырмаларды кішірек бөліктерге бөліп, оларды кезең-кезеңімен өңдеңіз. Биномдық ағаш алгоритмдерінен айырмашылығы, желілік алгоритм векторларды бөлуге болмайтынын, бірақ операторды жалғыз элементтер бойынша бағалауға болатындығын қолданады:[9]

үшін дейін істеу
үшін дейін параллель жасаңыз
егер
жіберу дейін
егер
алу бастап

Алгоритм жұмыс жасау үшін жіберу және қабылдау операциялары бір уақытта орындалуы керек екенін ескеру маңызды. Нәтиже векторы -де сақталады аяқ кезінде. Байланыстырылған анимация алгоритмнің төрт өңдеуші бірлігі бар төрт өлшемді векторларда орындалуын көрсетеді. Анимацияның екі қадамы бір параллель орындалу қадамын елестетеді.

Жұмыс уақытын талдау

Параллель орындау кезіндегі қадамдар саны , ол алады соңғы өңдеу блогы өзінің алғашқы элементін алғанға дейін және қосымша барлық элементтер алынғанға дейін. Сондықтан, BSP-модельдегі жұмыс уақыты болып табылады , деп ойлаған - вектордың жалпы байт өлшемі.

Дегенмен тұрақты мәні бар, вектордың элементтерін логикалық түрде біріктіріп, азайтуға болады . Мысалы, төрт өлшемді векторлармен проблемалық дананы векторларды әрқашан бірге тасымалданатын және есептелетін алғашқы екі және соңғы екі элементке бөлу арқылы шешуге болады. Бұл жағдайда әр қадам сайын екі еселенген көлем жіберіледі, бірақ қадамдар саны шамамен екі есеге азаяды. Бұл параметр дегенді білдіреді жалпы байт өлшемі екі есе азайды өзгеріссіз қалады. Орындалу уақыты бұл тәсілдің мәніне байланысты , егер ол оңтайландырылса болады және белгілі. Бұл үшін оңтайлы , бұл кішігірім нәтижеге әкеледі деп болжайды бұл түпнұсқаны бөледі.

Қолданбалар

Төмендету - басты факторлардың бірі ұжымдық операциялар жүзеге асырылды Хабар алмасу интерфейсі Мұнда қолданылатын алгоритмнің өнімділігі маңызды және әр түрлі жағдайларда үнемі бағаланады.[10]Операторларды параметр ретінде пайдалануға болады MPI_Төмендету және MPI_Allreduce, нәтиже бір (түбірлік) өңдеу блогында немесе олардың барлығында болатындығымен ерекшеленеді. MapReduce үлкен деректер жиынтығын, тіпті үлкен кластерлерді өңдеу үшін тиімді қысқарту алгоритмдеріне сүйенеді.[11][12]

Кейбір параллель сұрыптау алгоритмдер өте үлкен деректер жиынтығын басқара алу үшін қысқартуларды қолданады.[13]

Сондай-ақ қараңыз

Пайдаланылған әдебиеттер

  1. ^ Қысқарту ережесі
  2. ^ а б c Солихин
  3. ^ Chandra p. 59
  4. ^ Коул, Мюррей (2004). «Шкафтан қаңқаларды шығару: қаңқаларды параллель бағдарламалаудың прагматикалық манифесі» (PDF). Параллельді есептеу. 30 (3): 393. дои:10.1016 / j.parco.2003.12.002.
  5. ^ Бар-Ной, Амотц; Кипнис, Шломо (1994). «Бір уақытта жіберу / қабылдау жүйелерінде бірнеше хабарламаларды тарату». Дискретті қолданбалы математика. 55 (2): 95–105. дои:10.1016 / 0166-218x (94) 90001-9.
  6. ^ Сантос, Юнис Э. (2002). «Параллель машиналарда қорытындылау және префиксті қорытындылаудың оңтайлы және тиімді алгоритмдері». Параллель және үлестірілген есептеу журналы. 62 (4): 517–543. дои:10.1006 / jpdc.2000.1698.
  7. ^ Слейтер, П .; Кокейн, Е .; Хедетниеми, С. (1981-11-01). «Ағаштарда ақпарат тарату». Есептеу бойынша SIAM журналы. 10 (4): 692–701. дои:10.1137/0210052. ISSN  0097-5397.
  8. ^ Рабенсейнер, Рольф; Трэфф, Джеспер Ларссон (2004-09-19). Хабарлама жіберетін параллель жүйелердегі екі қуатты емес процессорларды азайтудың тиімді алгоритмдері. Параллельді виртуалды машинадағы және хабарлама жіберетін интерфейстегі соңғы жетістіктер. Информатика пәнінен дәрістер. 3241. Шпрингер, Берлин, Гейдельберг. 36-46 бет. дои:10.1007/978-3-540-30218-6_13. ISBN  9783540231639.
  9. ^ Бар-Ной, А .; Кипнис, С. (1994-09-01). «Хабар жіберетін жүйелер үшін пошта моделінде хабар тарату алгоритмдерін жобалау». Математикалық жүйелер теориясы. 27 (5): 431–452. CiteSeerX  10.1.1.54.2543. дои:10.1007 / BF01184933. ISSN  0025-5661. S2CID  42798826.
  10. ^ Пьешивак-Грбович, Елена; Ангскун, Тара; Босилка, Джордж; Фагг, Грэм Э .; Габриэль, Эдгар; Донгарра, Джек Дж. (2007-06-01). «МПИ ұжымдық операцияларының тиімділігін талдау». Кластерлік есептеу. 10 (2): 127–143. дои:10.1007 / s10586-007-0012-0. ISSN  1386-7857. S2CID  2142998.
  11. ^ Ламмель, Ральф (2008). «Google-дің MapReduce бағдарламалау моделі - қайта қаралды». Компьютерлік бағдарламалау ғылымы. 70 (1): 1–30. дои:10.1016 / j.scico.2007.07.001.
  12. ^ Сенгер, Гермес; Гил-Коста, Вероника; Арантес, Люсиана; Маркондес, Сезар А. С .; Марин, Маурисио; Сато, Лирия М.; да Силва, Фабрисио А.Б. (2016-06-10). «MapReduce операциялары үшін BSP құнын және масштабталуын талдау». Параллельдік және есептеу: тәжірибе және тәжірибе. 28 (8): 2503–2527. дои:10.1002 / cpe.3628. ISSN  1532-0634.
  13. ^ Axtmann, Michael; Бингманн, Тимо; Сандерс, Питер; Schulz, Christian (2014-10-24). «Практикалық массивті параллельді сұрыптау». arXiv:1410.6754 [cs.DS ].

Кітаптар

Сыртқы сілтемелер