Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

можливості інтегрованого середовища розробки програм Qt Creator та основи паралельних обчислень мовою програмування С++

Предмет: 
Тип роботи: 
Звіт з практики
К-сть сторінок: 
19
Мова: 
Українська
Оцінка: 

модуль з класами, необхідними для сумісності з бібліотекою Qt версії 3.х.х;

-QtTest — модуль для роботи з UNIT тестами;

-QtWebKit — модуль WebKit інтегрований в Qt і доступний через її класи;

-QtXmlPatterns — модуль для підтримки XQuery 1.0 і XPath 2.0;

-Phonon — модуль для підтримки відтворення і запису відео і аудіо, як локально, так і з пристроїв і з мережі;

-QtCLucene — модуль для підтримки повнотекстового пошуку, застосовується в новій версії Assistant в Qt 4.4;

-ActiveQt — модуль для роботи з ActiveX і COM технологіями для Qt-розробників під Windows. Модуль доступний тільки в комерційній редакції Qt.

Також реалізована технологія WOC — widgets on canvas, за допомогою якої буде реалізована Plasma в KDE 4.1, Буде можливим використовувати віджети бібліотеки Qt прямо в аплетах. Забезпечує розташування віджетів на QGraphicsView з можливістю масштабування і різних графічних ефектів.

Бібліотека використовує власний формат проекту, що іменується .pro файлом, в якому зібрана інформація про те, які файли будуть скомпільовані, за якими шляхами шукати заголовні файли і багато іншої інформації. Згодом за допомогою утиліти qmake з них виходять makefile для make-утиліти компілятора. Також є можливість роботи за допомогою інтеграторів з такими середовищами програмування як Microsoft Visual Studio 2003/2005 і зовсім недавно стала доступна інтеграція в Eclipse, для версії бібліотеки 4.х.х.

 

2. OpenMP

 

OpenMP (Open Multi-Processing) — це набір директив компілятора, бібліотечних процедур та змінних середовища, які призначені для програмування багатопотокових застосунків на багатопроцесорних системах із спільною пам'яттю на мовах C, C++ та Fortran.

Розробку специфікації OpenMP ведуть кілька великих виробників обчислювальної техніки та програмного забезпечення, робота яких регулюється некомерційною організацією, названою OpenMP Architecture Review Board (ARB). Специфікації для мов Fortran і C/C++ з'явилися відповідно в жовтні 1997 року і жовтні 1998 року.

 

2.1 Переваги OpenMP

 

За рахунок ідеї «інкрементального розпаралелювання» OpenMP ідеально підходить для розробників, що прагнуть швидко розпаралелювати свої обчислювальні програми з великими паралельними циклами. Розробник не створює нову паралельну програму, а просто послідовно додає в текст програми OpenMP-директиви.

При цьому, OpenMP — досить гнучкий механізм, що надає розробникові великі можливості контролю над поведінкою паралельного застосунку.

Передбачається, що OpenMP-програма на однопроцесорній платформі може бути використана як послідовна програма, тобто немає необхідності підтримувати послідовну та паралельну версії. Директиви OpenMP просто ігноруються послідовним компілятором, а для виклику процедур OpenMP можуть бути підставлені заглушки (stubs), текст яких приведений в специфікаціях.

Однією з переваг OpenMP розробники вважають підтримку так званих «orphan» (відірваних) директив, тобто директиви синхронізації і розподілу роботи можуть не входити безпосередньо в лексичний контекст паралельної області.

 

2.2 Конструкції OpenMP

 

OpenMP простий у використанні і включає лише два базові типи конструкцій: директиви pragma і функції виконуючого середовища OpenMP. Директиви pragma, як правило, вказують компілятору реалізувати паралельне виконання блоків коду. Всі ці директиви починаються з # pragma omp. Як і будь-які інші директиви pragma, вони ігноруються компілятором, що не підтримують конкретну технологію - в даному випадку OpenMP. 

Функції OpenMP служать в основному для зміни і отримання параметрів середовища. Крім того, OpenMP включає API-функції для підтримки деяких типів синхронізації. Щоб задіяти ці функції бібліотеки OpenMP періоду виконання (виконуючого середовища), в програму потрібно включити заголовний файл omp.h. Якщо ви використовуєте в додатку тільки OpenMP-директиви pragma, включати цей файл не потрібно. 

Для реалізації паралельного виконання блоків додатки потрібно просто додати в код директиви pragma і, якщо потрібно, скористатися функціями бібліотеки OpenMP періоду виконання. Директиви pragma мають наступний формат:

#pragma omp <директива> [розділ [ [,] розділ]...]

OpenMP підтримує директиви parallel, for, parallel for, section, sections, single, master, critical, flush, ordered і atomic, які визначають або механізми поділу роботи або конструкції синхронізації. У цій статті ми обговоримо більшість директив. 

Розділ (clause) - це необов'язковий модифікатор директиви, що впливає на її поведінку. Списки розділів, підтримувані кожної директивою, розрізняються, а п'ять директив (master, critical, flush, ordered і atomic) взагалі не підтримують розділи.

Хоча директив OpenMP багато, всі вони відразу нам не знадобляться. Найважливіша і поширена директива - parallel. Вона створює паралельний регіон для наступного за нею структурованого блоку, наприклад:

#pragma omp parallel [розділ[ [,] розділ]...]

Розглянемо приклад, який визначає середні значення двох сусідніх елементів масиву і записує результати в інший масив. У цьому прикладі використовується нова для вас OpenMP-конструкція # pragma omp for, яка відноситься до директив поділу роботи (work-sharing directive). Такі директиви застосовуються не для паралельного виконання коду, а для логічного розподілу групи потоків, щоб реалізувати зазначені конструкції керуючої логіки. Директива # pragma omp for повідомляє, що при виконанні циклу for в паралельному регіоні ітерації циклу повинні бути розподілені між потоками групи:

#pragma omp parallel

{

#pragma omp for

for(int i = 1; i < size; ++i)

        x[i] = (y[i-1] + y[i+1])/2;

}

Якби цей код виконувався на чотирьох процесорному комп'ютері, а у змінної size було

Фото Капча