многопоточность в matlab


У меня есть прога, состоящая из тройного цикла. Она работает довольно долго. Собственно вопрос в том, можно ли каждый цикл распараллелить, как в си, для того, чтобы сократить время работы? Матлаб сам это не делает автоматом в случае простых циклов?


Многопоточность в матлабе есть, но для этого надо векторизовать свои циклы.
Вообще странно, что ты не в курсе, что в Матлабе циклы — это страшное зло.


ну я матлаб юзаю третий раз в жизни) а подскажи плз, что гуглить, чтобы понять, как векторизовать циклы?


Начни вот с этого, например: http://www.mathworks.com/help/matlab/matlab_prog/vectorizati...


ок, спасибо!


[нубский вопрос] многопоточность в matlab

Но вопрос векторизации это не вопрос многопоточности.
Ты после векторизации можешь всё равно ускорить вычисления за счёт массивных циклов, которые невозможно векторизовать из-за нехватки памяти.
Самый простой способ это замена


Естественно у тебя должна стоять опция автозапуска пула при появлении parfor в коде.
Иначе его нужно запускать вручную (в пративном случае parfor будет работать как for).


Самый простой способ это замена
Вроде ж в версии 2012 и старше матлаб автоматом использует много ядер при правильно векторизованном коде. На моих скриптах я регулярно вижу все 12 ядер занятые матлабом.


Accelerating MATLAB Performance source files by Yair Altman
Примеры к превосходной книге.

The Matlab programming environment is often perceived as a platform suitable for prototyping and modeling but not for “serious” applications. One of the main complaints is that Matlab is just too slow.
Accelerating MATLAB Performance (CRC Press, ISBN 978-1482211290, 785 pages) aims to correct this perception, by describing multiple ways to greatly improve Matlab program speed.
The book:
  * Demonstrates how to profile MATLAB code for performance and resource usage, enabling users to focus on the program’s actual hotspots
  * Considers tradeoffs in performance tuning, horizontal vs. vertical scalability, latency vs. throughput, and perceived vs. actual performance
  * Explains generic speedup techniques used throughout the software industry and their adaptation for Matlab, plus methods specific to Matlab
  * Analyzes the effects of various data types and processing functions
  * Covers vectorization, parallelization (implicit and explicit distributed computing, optimization, memory management, chunking, and caching
  * Explains Matlab’s memory model and shows how to profile memory usage and optimize code to reduce memory allocations and data fetches
  * Describes the use of GPU, MEX, FPGA, and other forms of compiled code
  * Details acceleration techniques for GUI, graphics, I/O, Simulink, object-oriented Matlab, Matlab startup, and deployed applications
  * Discusses a wide variety of MathWorks and third-party functions, utilities, libraries, and toolboxes that can help to improve performance
Ideal for novices and professionals alike, the book leaves no stone unturned. It covers all aspects of Matlab, taking a comprehensive approach to boosting Matlab performance. It is packed with thousands of helpful tips, code examples, and online references. Supported by an active website, the book will help readers rapidly attain significant reductions in development costs and program run times.
  - Preface
  - Chapter 1: Introduction to Performance Tuning
  - Chapter 2: Profiling MATLAB Performance
  - Chapter 3: Standard Performance-Tuning Techniques
  - Chapter 4: MATLAB-Specific Techniques
  - Chapter 5: Implicit Parallelization (Vectorization and Indexing)
  - Chapter 6: Explicit Parallelization Using MathWorks Toolboxes
  - Chapter 7: Explicit Parallelization by Other Means
  - Chapter 8: Using Compiled Code
  - Chapter 9: Memory-Related Techniques
  - Chapter 10: Graphics and GUI
  - Chapter 11: I/O Techniques
  - Appendix A: Additional Resources
  - Appendix B: Performance Tuning Checklist
  - References & Notes
  - Index
This submission provides the source code for all non-trivial functions in the book.
All the files are named s<section#>_function. For example: s6_1_7_matched_filter_spmd.m refers to the matched_filter_spmd m-function found in section 6.1.7, while s11_7_mexIO.c refers to the C-MEX function found in section 11.7. In order to run these files, you would typically need to remove the s<section#>_ prefix from their filename (i.e., creating matched_filter_spmd.m and mexIO.c).
Саму книгу можно взять тут:


Вот пример из книги:
3.1 Loop Optimization
As of R2014b (MATLAB 8.4 these techniques need to be hand-coded, since they are not applied automatically by the MATLAB interpreter. However, the interpreter is constantly improving, so this may well change in future MATLAB releases.
The following loop optimizations techniques are described (among others) below:

Move loop-invariant code out of the loop

Minimize function calls within loop iterations by inlining

Employ early bail-out conditions to skip unnecessary loop iterations

Simplify loop contents

Unroll simple loops by selectively repeating content

Switch the order of nested loops and in general invest in tuning nested loops

Minimize dereferenced access to object property and array element

Postpone I/O and graphics updates until the loops end

Merge independent loops, or split complex loops

Loop over the shorter dimension

Run loops backwards


Вроде ж в версии 2012 и старше матлаб автоматом использует много ядер
Да, это в старых версиях, но из-за проблем на кластерах ( и системах с большим количеством ядер/процессоров) с масштабируемостью они видимо отошли от этого подхода.
Оставить комментарий
Имя или ник: