Параллельді үрдістер арасындағы деректер алмасу
Деректерді беру режимдері
Бұрын қарастырылған MPI_Send функциясы хабарлама жіберудің Стандартты (Стандартты) режимін ұсынады, онда:
функцияның орындалу уақытында хабарлама жіберуші процесі бұғатталады,
функция аяқталғаннан кейін буферді қайта пайдалануға болады,
жіберілген хабарламаның күйі әр түрлі болуы мүмкін - хабарлама жіберуші процесінде орналасуы мүмкін, жіберу процесінде болуы мүмкін, алушы процесінде сақталуы мүмкін немесе алушы mpi_recv функциясын қолдана отырып қабылдауы мүмкін.
Стандартты режимнен басқа MPI де хабарламаларды берудің келесі қосымша режимдері қарастырылған:
Синхронды (синхронды) режим-хабарлама жіберу функциясының аяқталуы тек алушыдан жіберілген хабарламаны қабылдаудың басталғаны туралы растауды алған кезде, жіберілген хабарлама немесе алушы процесінде толығымен қабылданған немесе қабылдау күйінде болады,
Буферленген (Буферленген) режим оларға жіберілген хабарламаларды көшіру үшін қосымша жүйелік буферлерді пайдалануды қамтиды; нәтижесінде хабарлама жіберу функциясы хабарламаны жүйелік буферге көшіргеннен кейін бірден аяқталады,
Дайын беру режимі (Ready) хабарлама қабылдау операциясы басталған жағдайда ғана қолданыла алады. Хабарлама жіберу функциясы аяқталғаннан кейін хабарлама буферін қайта пайдалануға болады.
MPI-де әр түрлі жұмыс режимдері үшін хабарлама жіберу функцияларын атау үшін mpi_send функциясының атауы қолданылады, оған префикс ретінде тиісті жұмыс режимінің атауының бастапқы белгісі қосылады, яғни.
Mpi_ssend-синхронды режимде хабарлама жіберу функциясы,
Mpi_bsend-буферлік режимде хабарлама жіберу функциясы,
MPI_Rsend-хабарламаны дайындық режимінде жіберу функциясы.
Барлық тізімделген функциялардың параметрлер тізімі MPI_Send функциясының параметрлерінің құрамына сәйкес келеді.
Буферленген тасымалдау режимін пайдалану үшін хабарламаларды Буферлеу үшін MPI жад буферін құру және беру керек – бұл үшін қолданылатын функция келесідей
int MPI_Buffer_attach(void *buf, int size),
қайда
хабарламаларды буферлеуге арналған жад буфері,
size-буфер өлшемі.
Буфермен жұмыс аяқталғаннан кейін ол функция арқылы MPI-ден ажыратылуы керек:
int MPI_Buffer_detach(void *buf, int *size).
Режимдерді практикалық қолдану үшін келесі ұсыныстарды келтіруге болады:
Дайындық режимі формальды түрде ең жылдам, бірақ сирек қолданылады, өйткені әдетте қабылдау операциясының дайындығына кепілдік беру қиын,
Стандартты және буферленген режимдер де тез орындалады, бірақ ресурстардың (жадтың) үлкен шығындарына әкелуі мүмкін - жалпы қысқа хабарламаларды жіберу үшін ұсынылуы мүмкін,
Синхронды режим ең баяу, себебі ол қабылдауды растауды қажет етеді. Сонымен қатар, бұл режим ең сенімді-оны ұзақ хабарламаларды жіберу үшін ұсынуға болады.
Достарыңызбен бөлісу: |