Конспект-справочник 'Моделирование на C++'


Многопоточное программирование



Download 1,26 Mb.
Pdf ko'rish
bet54/62
Sana20.03.2022
Hajmi1,26 Mb.
#504043
1   ...   50   51   52   53   54   55   56   57   ...   62
Многопоточное программирование 
В этом разделе очень сжато скажем несколько слов о том, как ускорить 
вычисления. До этого момента все вычисления производились 
последовательно, используя один поток исполнения. Если система позволяет 
использовать одновременно несколько вычислительных ядер центрального 
процессора, то вычисления, которые можно разделить и сделать независимо, 
можно существенно ускорить. Для распараллеливания вычислений есть 
несколько способов. Наиболее простым, не требующим детальных знаний о 
многопоточном программировании, является применение декларативных 
расширений языка, а именно открытого стандарта распараллеливания 'OpenMP' 
для компиляторов С, С++, FORTRAN или расширения языка от Intel - Cilk Plus. 
И 'OpenMP' и 'Cilk Plus' не являются подключаемыми библиотеками, а 
представляют собой расширение языка, реализованное в компиляторе. 
89 


'OpenMP' поддерживается компилятором MinGW в редакции TDM, 
устанавливаемым вместе с Code::Blocks. Для того, чтобы воспользоваться 
преимуществами многопоточности нужно сделать два действия: включить в 
исходный текст заголовочный файл и в настройках проекта, во вкладке 
настроек компоновщика (Project->Build options... вкладка 'Linker settings') 
добавить имя библиотеки: 'gomp'. 
Ниже приведен пример из Wikipedia. К используемым директивам даны 
комментарии. Более полный список параметров для директив OpenMP в одном 
месте собран там же, на английской странице OpenMP в Wikipedia. 
#include  
using namespace std; 

#include  

int main(int argc, char *argv[]) 


// выполняется в каждом ядре процессора. 4 ядра -
// 
будет выведено 4 строки. 
#pragma omp parallel 
cout << "This runs in each core in parallel" << endl;

// выполняется в каждом ядре процессора своя часть цикла 
#pragma omp parallel for 
for (int i = 0; i < 4; i++) 
cout << "\'for\' body is paralleled. This is No" << i << endl;
int th_id, nthreads; 

// распараллеливает исполнение 
#pragma omp parallel private(th_id) shared(nthreads)

th_id = omp_get_thread_num(); 
#pragma omp critical 
// взаимное исключение обеспечивает что этот блок
// 
единовременно исполняет только один поток и дает
// 
допечатать строку до конца 

cout << "Hello World from thread " << th_id << endl; 

#pragma omp barrier 
// дождаться завершения всех потоков в этой точке 
 

// это не распараллеливается (master thread only) 
#pragma omp master 

nthreads = omp_get_num_threads(); 
cout << "There are " << nthreads << " threads" << endl; 


90 



return 0; 

Расширением директив 'OpenMP', использующим также вычислительные 
возможности графических ускорителей, является 'OpenACC'. 

Download 1,26 Mb.

Do'stlaringiz bilan baham:
1   ...   50   51   52   53   54   55   56   57   ...   62




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish