2013-09-09 6 views
0

При написании многопоточных программ по умолчанию используется память обмена данными между всеми потоками, и нужно указать, что является приватным. Можно ли объявить все данные приватными?Обмен данными в openmp

С уважением, -Mohd

+0

типы данных, объявленные вне параллельного блок разделяются (если это не индекс в параллельном цикле), а те, которые объявлены внутри параллельного блока, являются частными. См. Мой ответ [здесь] (http://stackoverflow.com/questions/18500301/use-openmp-to-find-minimum-for-sets-in-parallel-c/18512800#18512800) –

+0

Отличная ссылка, спасибо, Я хотел сделать многопоточность в моей программе, не меняя код очень, кажется, что это невозможно. – Mohd

+0

Опубликуйте код, который вы пытаетесь распараллелить (попробуйте сделать его читаемым и не слишком длинным). –

ответ

0

Вы можете, for example:

#include <omp.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main (int argc, char *argv[]) 
{ 
int nthreads, tid; 

/* Fork a team of threads giving them their own copies of variables */ 
#pragma omp parallel private(nthreads, tid) 
    { 

    /* Obtain thread number */ 
    tid = omp_get_thread_num(); 
    printf("Hello World from thread = %d\n", tid); 

    /* Only master thread does this */ 
    if (tid == 0) 
    { 
    nthreads = omp_get_num_threads(); 
    printf("Number of threads = %d\n", nthreads); 
    } 

    } /* All threads join master thread and disband */ 

} 

Однако, вы не можете заменить общие данные с асинхронными сообщениями в качестве задач OpenMP не гарантирует выполнение asynchonously:

Use Threads Correctly = Isolation + Asynchronous Messages

+0

Я хотел сделать это, не указав, какие идентификаторы являются частными. Я ожидал, что для этого объявления (частные данные) будет доступна команда. – Mohd

+0

[Память может быть объявлена ​​как закрытая двумя способами] (http://software.intel.com/en-us/articles/getting-started-with-openmp). Во-вторых, объявить переменную внутри цикла (т. Е. Внутри параллельной директивы OpenMP) без статического ключевого слова. – cpp