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