Nano Hash - криптовалюты, майнинг, программирование

Многопоточность с C++ API

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

Я хотел бы поделиться переменными в члене функции, который я определил (и инициализировал) в классе. Если я правильно понял, невозможно выполнить #pragma omp parallel shared(foo) элементов данных (например, int, boost::multi_array и std::vector) класса. например: использование push_back() для члена векторных данных в классе. обновление значений boost::multi_array.

Мой вопрос в том, подходит ли для этого OpenMP, или мне следует использовать boost::thread или tbb? или что-то еще... что поддерживает C++ API

Соответствует


  • Просто к вашему сведению, предложение shared на самом деле избыточно — любая переменная, объявленная вне параллельного блока, которая не объявлена ​​как private (или любой другой параметр), автоматически разделяется. 29.06.2011

Ответы:


1

Как указано в документации, shared определяет, что объект помещается в память только один раз. Например, если ваш объект foo содержит std::vector какого-либо типа, должно нормально работать с push_back элементами в цикле. Но вы должны убедиться, что ваш код является потокобезопасным, либо с помощью атомарных инструкций, либо с секциями мьютекса.

29.06.2011
  • предполагая, что у меня есть массив boost::multi_array<int,1> foo(boost::extents[10]), а затем: #pragma omp parallel for for(int i = 0;i<10;i++) foo[i] = i; нужно ли мне перед доступом к foo atomic или mutex? 29.06.2011
  • Конечно. Это школьный пример использования атомарной операции или чего-то подобного. 29.06.2011
  • Я не согласен с вашим утверждением, что это ясно. Может быть, я не ясно объяснил себя. Предположим, у вас есть массив из 10 элементов. 1-й поток будет работать только с первыми 5 элементами, а 2-й поток — с последними 5 элементами. Нужен ли мне тогда мьютекс? так как каждый элемент обозначает сам себя... 01.07.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..