проблема с броней fft2 - PullRequest
       50

проблема с броней fft2

0 голосов
/ 23 апреля 2020

Я использую библиотеку armadillo c ++ для выполнения двумерных преобразований Фурье, и я обнаружил, что результаты противоречивы, когда я использую несколько потоков. В частности, я получаю разные результаты от функции fft2.

Данные, которые я передаю в fft2, являются локальными для потока. Я также проверил, что на входные данные не влияют другие потоки, работающие над параллельными задачами. fft2 выдает другие результаты, если есть другие потоки, также вызывающие fft2. Кто-нибудь знает о проблемах с многопоточностью с fft2? Или броненосец вообще?

1 Ответ

0 голосов
/ 23 апреля 2020

Кажется, что у самого Armadillo нет какого-либо состояния, которое могло бы сделать его не ориентированным на многопотоковое исполнение (может быть, проблема со случайной генерацией могла быть проблемой). То есть кажется, что он сохраняет потоки, поскольку библиотеки, от которых он зависит, являются потокобезопасными.

В прошлом у меня также были проблемы с неверными результатами при использовании многопоточности. В моем случае виновником был openblas, который я собирал сам. Чтобы исследовать проблему, я создал небольшой проект , чтобы проверить, что результаты некоторых SVD и умножения матриц были одинаковыми при параллельной и последовательной работе. Они не были. Затем я наткнулся на проблему в репозитории openblas о безопасности потоков, где я увидел флаг, который я мог установить в CMake (USE_LOCKING) при компиляции openblas. После установки USE_LOCKING в значение true при компиляции openblas у меня больше не было проблем с неправильными результатами, данными armadillo.

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

...