Я, кажется, один из немногих людей, использующих кодер Matlab (команда codegen), чтобы получить ускорение, судя по тому, что так мало обсуждений или помощи в режиме онлайн. В некоторых случаях я получил невероятные ускорения. Я никогда не видел его документированным, но когда я делаю MEX-файл с использованием codegen из скрипта Matlab с циклом parfor, он часто будет обрабатывать полученный MEX. Функция Parfor в функциях порождает несколько процессов, которые часто менее эффективны, чем просто потоки (я выхожу из этого, наблюдая за вершиной в Linux и рассматривая несколько 100% процессов в функциях Matlab, но один, например, 1000% -ный процесс при запуске конвертированного MEX). Сейчас я работаю над случаем, когда я действительно могу использовать ускорение, но я не вижу доказательств того, что несколько потоков используются в MEX, хотя parfor работает в базовой функции. Кто-нибудь знает, что такое зависание, или как выбирает кодер при потоке?Когда Matlab выбирает нить при использовании codegen и parfor
1
A
ответ
0
Он будет обрабатывать только парную петлю, это было бы опасно для предсказателя, и невозможно вычислить, где есть соответствующий параллелизм.
Если бы я был вами, я бы постарался поместить parfor вместо любого места в коде Matlab, который я мог бы сделать.
А теперь, как определить, является ли приемлемым цикл распараллелить:
- его используют ли какие-либо результаты из предыдущего расчета, если это так, то не попробовать, если серьезно, то будет только хуже
Используется ли IO в любой форме, если это так, то нет, это будет замедлять его и удалите детерминизм из кода
есть петля для parfor заменить? Если нет, тогда вам придется иметь дело с производительностью, потому что может быть не быть чем-то распараллеливать.
Смежные вопросы
- 1. ошибка при использовании parfor в matlab
- 2. Ошибка при использовании parfor внутри блока spmd - matlab
- 3. Избегайте условий гонки при использовании parfor в MATLAB
- 4. Matlab parfor и файлы ввода
- 5. MATLAB ошибка parfor
- 6. Ошибка при помощи parfor в MATLAB
- 7. Matlab parfor work distribution
- 8. Ошибка использования matlab parfor
- 9. Matlab parfor slice правильно
- 10. Ошибка сборки Matlab Codegen
- 11. Parfor в Matlab
- 12. Matlab parfor loop indexing
- 13. matlab parallization by parfor
- 14. Параллельный и непараллельный скрипт Matlab - использование parfor
- 15. matlab using evalin in parfor
- 16. оптимизации, сокращения переменных и MATLAB parfor
- 17. parfor multi core processing matlab
- 18. MATLAB parfor и классификация/использование переменных
- 19. MATLAB parfor обрабатывает статическое использование памяти?
- 20. Использование parfor Loops on matlab
- 21. Принудительное назначение parfor в MATLAB
- 22. MATLAB нарезка переменной PARFOR петля
- 23. Использование Matlab Parfor с 'Eval'
- 24. MATLAB parfor error "Переменная в parfor не может быть классифицирована".
- 25. parfor с Matlab «переменной __ в parfor не может быть классифицирована»
- 26. MATLAB Parallel Parfor Использование памяти Опрос
- 27. Matlab Codegen Eig Function - это ошибка?
- 28. Как избежать ячеек при использовании parfor для кода ниже в MATLAB
- 29. Ошибка при помощи parfor в MATLAB // переменная в parfor не может быть классифицирована
- 30. Как собрать результаты с parfor в MATLAB
'parfor' в MALTAB работает на фоне рабочих процессов. MATLAB Coder преобразует 'parfor'-loops в многопоточный код C/C++, используя OpenMP (поиск' #pragma omp' в сгенерированном коде): http://www.mathworks.com/help/coder/ref/parfor.html , http://www.mathworks.com/help/coder/ug/acceleration-of-matlab-algorithms-using-parallel-for-loops-parfor.html – Amro
Вы можете указать максимальное количество потоков, используя 'NumThreads' ввод в 'parfor'. Однако, насколько я знаю, не указано, как выбрано количество потоков до этого максимума. Возможно, Эдди узнает, если он слушает? –
@SamRoberts: вы можете использовать переменные среды для управления максимальным количеством потоков. Попробуйте установить 'setenv ('OMP_NUM_THREADS', '8')' перед запуском скомпилированной MEX-функции. Обратите внимание, что это может повлиять и на другие встроенные функции, которые также многопоточны (я думаю, что на Intel MKL, поддерживающие процедуры BLAS/LAPACK/FFT) – Amro