Разрешить глобальный доступ к константной строке из различных потоков, вызывающих функцию.
У меня есть следующий код, который выбирает случайный символ из списка символов (разрешенный алфавит) и добавляет его для формированияслучайное словоЯ использую это для генетического алгоритма, но когда я пытаюсь распараллелить его, чтобы сделать его быстрее (домашнее задание), но в конечном итоге он идет медленнее.После того, как я спросил моего профессора и исправил большинство проблем, последняя деталь заключается в том, что мой алфавит не позволяет читать несколько потоков одновременно.
Я попытался определить GENES, а затем использовать #pragma omp threadprivate(GENES)
, что являетсяКоманда, которую, по словам моего профессора, сработает.
Я пытался
const string GENES = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUVWXYZ"
#pragma omp threadprivate(GENES)
, которая возвращает это при компиляции.
error: ‘GENES’ declared ‘threadprivate’ after first use
Я также пытался
string GENES;
#pragma omp threadprivate(GENES)
GENES = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUVWXYZ;
, который возвращает:
error: ‘GENES’ declared ‘threadprivate’ after first use
#pragma omp threadprivate(GENES)
^
error: ‘GENES’ does not name a type
GENES = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRSTUVWXYZ 1234567890, .-;:_!\"#%&/()=?@${[]}";
Наконец, я попытался определить GENES в потоках и передать их в качестве параметра или жестко закодировать их в функцию.Все это замедляет работу программы.
Я ожидал, что программа будет работать быстрее, но на самом деле она идет медленнее, от 0,5 до 1-3 секунд после добавления потоков.Я проверил, и это не из-за времени создания потоков.
Это должно быть исправлено, сделав строку доступной для всех потоков, но я не могу скомпилировать и запустить любые решения, которые я нашел успешно.