Паралелно програмиране: описание, технология, задачи и ползи

Идеите за паралелни изчисления и обработка на информация отдавна са прерогатив на специалистите и доста значителен проблем по отношение на изпълнението. Не толкова отдавна са придобили особено значение и масов интерес. Може да се твърди, че развитието на интернет технологиите даде нов тласък и паралелното програмиране придоби нови потребителски качества. Това доведе не само до очевидния напредък на технологиите и езиците за програмиране. Това всъщност създаде обратен ефект върху разбирането на паралелния процес.


Технологиите за паралелно програмиране са се променили драстично. Първоначалното приложение на компютърните устройства като изчисления постепенно се превърна в употреба като информационни манипулатори. Твърдите архитектурни решения отстъпиха на семантиката и гъвкавото разпределение на софтуерната функционалност за "хардуерните изпълнители".

Паралелни изчисления: съдържание и изпълнение

Първоначално основите на паралелното програмиране бяха заложени в архитектурата на изчислителните устройства. Предложена е класификация въз основа на понятието поток. Последователността на командите, данните, функционално пълните последователни алгоритми се разглеждат като обект, който може да се изпълни паралелно с друг подобен обект.
При този подход същността на всеки обект не е имала смисъл, а значението на такова разделяне в паралелни участъци от кода, което може да се извърши независимо, т.е. данните на входа и изхода на всеки поток не се пресичат. Всеки поток не зависи от товаот друга нишка и ако имаше нужда от данни от друга нишка, след това се прехвърли в режим на готовност.


Тази идея доведе до четири архитектури:
  • SISD е прост поток от команди и прост поток от данни;
  • MISD - множество команди за поток и прост поток от данни;
  • SIMD е прост поток от команди и множество потоци от данни;
  • MIMD е многопосочен поток от команди и множествен поток от данни.
  • Тези идеи съществуват относително дълго, но не водят до специални ефекти. Днес е история за труден старт. Но това начало създаде основата за съвременните постижения.

    Липса на архитектурна идея: липса на семантика

    Подобно на изграждането на жилищна сграда, архитектурата на компютърната система не засяга семантиката. Как ще живеят обитателите в къщата, които те могат да направят и които решават да инсталират мебелите, никога не се притесняват строителите. В самото начало на паралелната система за програмиране, също не дава смисъл на алгоритъма, който трябва да бъде изпълнен. Самият процесор разделя кода и данните на секции, които се изпълняват паралелно. Това доведе до забележимо увеличение на производителността, но беше развълнувано по-специално:
  • проблемът с разпределението на паметта между процесите;
  • логиката на изчакване на един поток от резултатите от друг поток;
  • механизъм за защита на паметта на един процес от друг процес;
  • логиката на взаимодействието на независими процесори, ядра;
  • логиката на превключване между процесите;
  • обмен на данни "в движение" между процесите
  • Разработчиците са по-фокусирани върху хардуерните механизми, които са лишенипаралелното многонишково програмиране има способността да има семантика и не позволява на програмиста да управлява процесите адекватно на задачата.

    Индустриално прилагане на паралелизъм

    Първо назначаване на компютри: сложни математически изчисления, промишлени приложения и всичко, което не е свързано с ежедневието, мобилността и интернет. Естествено, когато проблемите на паралелното програмиране са толкова "ограничени", е трудно да се очакват интересни постижения. Когато компютрите станаха масово произведени продукти, имаше интернет и мобилни устройства, изискванията за паралелизъм се промениха драстично, а разработчиците трябваше радикално да променят стила и скоростта на работа. Първата лястовица беше идеята за съобщения между процесите. MPI интерфейсът за съобщения, паралелното програмиране, нуждите на разработчиците и очакванията на потребителите станаха междинен етап.
    Windows и нейните подобни системи са консолидирали тази идея и всъщност я превръщат в правна норма: паралелизмът и съобщенията са едно цяло за всеки многопроцесорен, многоядрен и по същество - за всяка информационна система.

    От компютри до обработка на информация

    Изчисляването е частен случай на обработка на информация. От паралелни архитектури, внедрени чрез хардуер до мобилни софтуерни решения: паралелните програмни езици наистина станаха собственост на историята. Модерният език осигурява реални паралелни процеси, но за това той не е задължително да има специални оператори в синтаксиса или допълнителнитебиблиотеки към езика. "Индустриално" мислене в програмирането, когато целта е паралелното многонишково програмиране, а не средство, не беше дълго. Кои фундаментални резултати води, е трудно да се каже. Няма съмнение обаче, че програмирането, което беше до епохата на интернет програмирането, беше в основата на отличните идеи и добрия потенциал на съвременните езици и инструменти.

    Хардуерен компонент

    Първите компютри са били чудовища, заемат една четвърт от футболното игрище и разпределят толкова топлина, че е лесно да се загрява малка местност, а не да се харчат за изграждането на електроцентрали.
    Следващото поколение компютри - лично. Личността беше поставена на работния плот, а мобилните телефони можеха да се носят на раменете си. Личността бързо се променя и придобива модерен облик, дава живот на лаптопи, таблети и други устройства, а мобилните телефони се превръщат в удобни, мултифункционални смартфони.
    Производителят на електронни компоненти се възползва изцяло от идеите от минали години и паралелното програмиране вече съществува на всяко устройство, независимо от това как се отнася до този или онзи разработчик на софтуер. Днес броят на процесорните ядра, броят на процесорите, нивото на технологиите, паралелизмът и функционалността на кода са критични дори за непосветения потребител.

    Математически апарат

    Теория на графиките и масовата поддръжка, като частни варианти, изчисления на линии и криви за визуално представянеИнформацията като основа за видеокартите доведе до ясна функционалност на хардуерния компонент, който получи статут и качество на стандарта. Може да се говори за броя на ядрата в процесора на устройството, но процесорът за показване на информация отдавна е такъв и се занимава с техния бизнес. Видеокартата може да има не само един процесор и не едно ядро, а математическото устройство, което се имплантира. Компютърният процесор просто формулира прости команди за показване на информация или проба от видеопамет, а другата - за процесора на видеокартата. Всъщност математическите изчисления отдавна са отделени от главния процесор от математическия копроцесор. В момента това е и норма на нещата. Всъщност, като се има предвид паралелното програмиране на хардуерно ниво, можете да си представите модерен компютър, като набор от паралелно работещи подсистеми, които осигуряват на разработчика всичко необходимо за реализиране на разнообразни идеи, разпределени и паралелна обработка на информация.
    Смята се, че основните хардуерни ресурси за всяка информационна система са в перфектно състояние и се развиват стабилно. Програмистът може само да напише висококачествен код.

    Обектно-ориентирано програмиране

    При класическото програмиране алгоритъмът е последователност от команди. В обектно-ориентираното програмиране алгоритъмът на решението е набор от обекти, всеки от които има свои данни и методи.
    С помощта на методите обектите взаимодействат помежду си и по този начин как те ще се изпълняват от хардуерната част на компютъра(devaysa), програмистът най-малко се притеснява. Но логиката на взаимодействието на обекта е компетентността на програмиста. Информационната система, изградена върху обекти, като правило, е система от абстракции, която позволява различни опции за създаване на обекти от различни типове и дестинации. Описани на ниво абстракции, информационните системи могат да предоставят различни комбинации от обекти, включително създаването на самите тях. Казано по-просто, когато обектно-ориентираното програмиране е трудно да се свърже изпълнението на обекта на ядрото или процесора, за да се гарантира паралелното изпълнение. Това значително ще забави цялостния процес. Един обект може да съществува в десетки случаи, но това не означава, че съществуването на всеки един трябва да изчака, когато съществуването на предишното е завършено.

    Клъстери и разпределени паралелни

    Съвременните интернет програми за решаване на сложни, уникални задачи предлагат единственото възможно решение: ръчна работа! За ежедневни и търговски приложения се използват многобройни и разнообразни системи за управление на обекти. Характерна особеност на интернет програмирането:
  • несигурност;
  • плурализъм;
  • едновременност.
  • Когато създавате сайт, програмистът (често екип от програмисти) не знае колко посетители ще трябва да приемат уеб ресурса, но със сигурност знае, че сайтът трябва да предостави на един и същ клиент минимално време за отговор за всяко действие. Очевидното решение е да се постави сайт на набор от сървъри или клъстери на териториална основа, след което всеки регион ще бъдеобслужват конкретен сървър. Но съвременният сайт не само предоставя информация, но и го използва. Например, един онлайн магазин не може да търгува с въздух и ако един продукт е закупен в Москва, той трябва да изчезне от склада за потребител във Владивосток.
    Осъществяването на разпределена обработка на информация в действителност означава осигуряване на паралелна работа на една и съща функционалност на различни сървъри за различни групи потребители, при условие че действията на потребителите се показват в системата и не си противоречат. В този контекст паралелното програмиране придобива съвсем различно значение. Ако по-рано разработчикът постави механизма на паралелизма в горната част на ъгъла, без да има предвид самата задача, днес разработчикът се тревожи по-малко за това как паралелизмът се реализира на ниво оборудване или инструмент, интересува се от паралелизъм на ниво клиенти, т.е. -resursu.

    Клъстерът като възможност за паралелно изпълнение

    Счита се, че клъстерът е вид разпределена паралелна обработка на информация. Това е набор от компютри, свързани с високоскоростни комуникационни линии. Характерно е, че клъстерът може да се състои от различни компютри, които могат да бъдат разположени на различни места на планетата, но по дефиниция: клъстерът е единична единица. Системите за управление на сайтове, базирани на клъстери, не позволяват пряк контрол на компонентите на клъстера чрез компютри, но осигуряват скрито, паралелно управление на всички процеси на ниворешена задача. Разработчикът, работещ с клъстери, може да планира и реализира своя собствена функция на паралелно разпределена обработка на информация. Това е много значителен напредък в модерния дизайн.

    "Живот" на модерен обект

    Днес е много трудно да се намери уеб ресурс, базиран на статични или динамични страници, формирани изцяло. Модерният сайт е колекция от динамични страници, които са запълнени паралелно с технологията AJAX. Текущата динамична страница се състои от различно съдържание, всяка страница от страницата може да бъде свалена самостоятелно, в зависимост от поведението на посетителя. В този контекст обектно-ориентираното програмиране показва, че не се разкрива целият му потенциал. Всъщност поведението на клиента води до заявка за сървър за актуализиране на част от страницата. Заявката е изработена, създадена е маса от обекти, сървърът изпраща резултата обратно. Следващата заявка отново е масата на обектите, резултатът се връща отново. В действителност, се оказва, че с модерния подход, сървърът "не помни" какво, кога и къде е изпратил. При всяко третиране той повтаря минимално необходимите действия, създава еднакви системни обекти.
    Програмистът не може да променя логиката на сървъра, но може лесно да емулира собствения си сървър на физическото си ниво. Ще се появи напълно ново качество на разпределената паралелна обработка на информацията. Собственият сървър ще поддържа необходимата система от обекти в текущото състояние, което значително ще ускори обработката на заявки от една страница и от всички страници,отворен за всички уеб пространства за конкретен уеб ресурс.

    Свързани публикации