При написании многопоточных программ по умолчанию используется память обмена данными между всеми потоками, и нужно указать, что является приватным. Можно ли объявить все данные приватными?Обмен данными в openmp
С уважением, -Mohd
При написании многопоточных программ по умолчанию используется память обмена данными между всеми потоками, и нужно указать, что является приватным. Можно ли объявить все данные приватными?Обмен данными в openmp
С уважением, -Mohd
Вы, наверное, хотите посмотреть на thread local storage.
Вы можете, 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:
Я хотел сделать это, не указав, какие идентификаторы являются частными. Я ожидал, что для этого объявления (частные данные) будет доступна команда. – Mohd
[Память может быть объявлена как закрытая двумя способами] (http://software.intel.com/en-us/articles/getting-started-with-openmp). Во-вторых, объявить переменную внутри цикла (т. Е. Внутри параллельной директивы OpenMP) без статического ключевого слова. – cpp
типы данных, объявленные вне параллельного блок разделяются (если это не индекс в параллельном цикле), а те, которые объявлены внутри параллельного блока, являются частными. См. Мой ответ [здесь] (http://stackoverflow.com/questions/18500301/use-openmp-to-find-minimum-for-sets-in-parallel-c/18512800#18512800) –
Отличная ссылка, спасибо, Я хотел сделать многопоточность в моей программе, не меняя код очень, кажется, что это невозможно. – Mohd
Опубликуйте код, который вы пытаетесь распараллелить (попробуйте сделать его читаемым и не слишком длинным). –