MATLAB Answers

0

How to make command line free while a program rans?

Yevgeny Gayev さんによって質問されました 2019 年 8 月 18 日
最新アクティビティ Walter Roberson
さんによって コメントされました 2019 年 9 月 17 日
Imagine, I made a program that contineously executes loop FOR-END (a Watch, for example). I'd like to run another program while the first one is still running. However, the command line >> is busy. How to "free" it?
Of course, this is the problem of parallel computing. I am a newbile in it now. As far as I learned, there are several ways to start parallelization, either ">> pmode start" or ">> pool = parpool(2)". (I have two 'Workers').
Do I follow the right way?
After ">> pmode start" we get two-splitted Window with Lab1 and Lab2. How to submit a job to only one of them?
Looking forward,
Yevgeny

  7 件のコメント

Ted Shultz
2019 年 8 月 28 日
One other option is to just start up another instance of matlab.
Yevgeny Gayev 2019 年 8 月 29 日
Yes, I know this, and tried this, thanks.
I guess however that it is somewhat illegal. Besides, I try to learn and exploit MATLAB's power in parallelization, and this was an example. Documentation about the parallelization is huge and difficult, and do not correspond exactly to what I am looking for.
Generally, two ways for parallelization are known, two or more threads on the same processor, and splitting task to several processors if present. I am speaking mainly about the first way.
Thanks to all the discussing experts!
Stephen Cobeldick
2019 年 8 月 29 日
"Do you mean to make a GUI-envelope, Stephen?"
I have no idea what a "GUI-envelope" is.
I often use graphics callbacks to run code, thus keeping the command line "free" for me to do other things. Of course this requires writing a small GUI, but that is not very difficult.
"I tried this way, no succes."
As you did not show what you tried it is difficult for us to help you fix it.
"May be, I should use OOP-features in MATLAB?"
I don't see how OOP is related to the topic you are asking about.

サインイン to comment.

製品


リリース

R2019a

4 件の回答

Walter Roberson
回答者: Walter Roberson
2019 年 8 月 29 日
 採用された回答

The only way to "free the command line" in MATLAB is to run your code with a timer, or in response to a callback (such as as a serial port bytes available function). The function that is run must return fairly soon, as the command line would not process commands while the function is running.
pmode does not free the command line. None of the facilities in the Parallel Computing Toolbox free the command line.
In some situations what is needed is not that the command line be freed, but instead that the user be able to trigger interactions while the code is running. In such cases it may be possible to build a GUI that has buttons or controls that allow parameters to be configured and then to trigger an action, with the action being executed in the context of a callback for the graphics object. For this to work, the main looping code that is executing must cooperate, by periodically permitting any pending callbacks to be executed, by calling pause() or drawnow() or waitfor() or uiwait()

  1 件のコメント

Yevgeny Gayev 2019 年 8 月 30 日
" by periodically permitting any pending callbacks to be executed, by calling pause() or drawnow() or waitfor() or uiwait()" -- this suggestion sounds promissing, thanks!

サインイン to comment.


Jason Ross
回答者: Jason Ross
2019 年 8 月 29 日

You can use the batch function to send work to a parallel worker and then retrieve the results later. While the batch job is running, the command prompt is freed. If you want to send the job to only one worker you can specify that in the batch command.

  1 件のコメント

Walter Roberson
2019 年 8 月 29 日
Also I forgot about parfeval()

サインイン to comment.


回答者: Chidvi Modala 2019 年 8 月 29 日

To submit a job to only one of the window, pmode is not the best fit. The commands you type at the pmode prompt in the Parallel Command Window are executed on all workers at the same time.
You can refer to following link to get more information

  0 件のコメント

サインイン to comment.


回答者: Yevgeny Gayev 2019 年 8 月 30 日

Dear experts, unfortunately, I have no chance to continue this discussion immediately, because I am busy with our new study year starting now. But I certainly come to this problem somewhat later. However, few comments right now.
“no idea what a "GUI-envelope" is" -- Sorry, Stephen for my English!
I had in mind that most intellect is usually invested in the program. The GUI, I guess, is an envelope only to make the program friendly, nice and pretty like a sweet.
"I don't see how OOP is related to the topic".
I had in mind the following. To do other things when MATLAB-instance is busy with loops and iterations of their current task (like in the Watch program suggested as an example), we need to run another execution thread, thus to use parallelization like in Java. Perhaps, some interruption points are to be foreseen in the program. It is my hope that such a feature has been foreseen in the MATLAB OOP. May be, I am wrong.
Thanks to all the commentators!

  2 件のコメント

Yevgeny Gayev 2019 年 9 月 17 日
Dear experts, I'd like to thank Walter Roberson who suggested: "The only way to "free the command line" in MATLAB is to run your code with a timer".
Yes, I tried this way and it looks promising, what I had in mind.
Indeed, the TIMER object allows scheduling several tasks to MATLAB. However, I met several unclear problems, like "You cannot set the read-only property 'executionmode' of timer". Unfortunately, features of this object have not been sufficiently explained.
Perhaps, the object TIMER runs one of several execution threads, like Thread class or Runnable interface in Java. Where can I find more information about this?
Thanks.
Walter Roberson
2019 年 9 月 17 日
Timers can interrupt the currently executing code at the end of any line of MATLAB code. They do not use a different thread for execution of the MATLAB code. It is not impossible that there is a different thread associated with scheduling them -- that would be an internal detail not exposed to the user.
You cannot set executionmode of a timer that is started. To change the execution mode of a timer, you must stop() the timer.

サインイン to comment.



Translated by