[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CPU usage by call of C++ code through system() on Linux
From: |
Kai Torben Ohlhus |
Subject: |
Re: CPU usage by call of C++ code through system() on Linux |
Date: |
Mon, 29 Jun 2020 16:49:34 +0900 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 |
On 6/26/20 3:58 PM, Andreas Stahel wrote:
> On 6/26/20 6:28 AM, Kai Torben Ohlhus wrote:
>> On 6/26/20 1:17 AM, Andreas Stahel wrote:
>>> Dear Octave Users
>>>
>>> Maybe one of you can give me a hint on how to make my Octave code run
>>> faster.
>>> Within a good size program (run time 40 sec) the command system() is
>>> used to call a C++ code.
>>> The C++ code uses pthreads.
>>> While the code is running htop show approximately 40% of load by the
>>> kernel on each CPU and 60% "normal" (user space?).
>>>
>>> When running the same code in Matlab only the "normal"load shows and
>>> very little kernel load on the CPUs.
>>> The computation time by Matlab is also only 60% of the time consumed by
>>> Octave (5.2.0)
>>> The system is an Ubuntu 20.04 on a AMD Ryzen 3950X.
>>>
>>> Any hints on what is slowing Octave down?
>>>
>>> With best regards
>>>
>>> Andreas
>>
>>
>> Dear Andreas,
>>
>> Maybe I do not understand your setup correctly. You have a C++ code
>> using threads compiled to, e.g. "code.exe" (the suffix does not matter),
>> and an Octave script "benchmark.m" with somewhere the code line
>>
>> system ("code.exe")
>>
>> First question is, do "benchmark.m" and "code.exe" interact with each
>> other? Means, does "code.exe" compute something that "benchmark.m"
>> processes further by importing results? What is the purpose of Octave
>> calling "code.exe"? Benchmarking with tic-toc?
>>
>> Second question, does "code.exe" (standalone, without Octave or Matlab)
>> or "benchmark.m" (called from Octave or Matlab) have a run time of 40
>> seconds?
>>
>> Now to your observation. When running "benchmark.m" in Octave and
>> Matlab you observe Octave is slower. I do not understand how this is
>> related to the CPU "kernel" and "normal" usage? What is the runtime of
>> "benchmark.m" in Matlab and Octave, respectively? Do you complain not
>> all CPU cores are used?
>>
>> Maybe it is best to give us (some) code to better understand the
>> situation.
>>
>> Kai
>>
> Dear Kai
>
> Thank you for the quick reply and attempt to locate the problem.
> The code in "benchmark.m" is a loop with 600 iterations.
> In each iteration a C++ code is called through system().
> The C++ code is heavily threaded, and using FFTW extensively. FFTW is
> used as single thread library.
> Thu multithreading is "hand coded"
> I have two options set up
> NumIter = 0, no FFT computations
> NumIter = 2, many FFT computations
> In addition I called the binary with a loop in bash.
> These are the observed wall times, averaged for one call of the binary
>
> – Octave NumIter=2 : 59.6 ms, NumIter=0 : 16.3 ms,
> – MATLAB NumIter=2 : 38.3 ms, NumIter=0 : 20.1 ms,
> – bash NumIter=2 : 37.9 ms, NumIter=0 : 19.2 ms,
>
> This puzzles me thoroughly!
>
> Andreas
>
> PS. on nabble these messages show up in the wrong thread!
Dear Andreas,
The maintainers list was not in the CC. Sorry for the late reply.
I am still not really convinced, that I understand your setup and the
purpose of your computation.
Is there any output or synchronization between "code.exe" or
"benchmark.m"? The Octave interpreter interpreting a for-loop alone
consumes already "lots of time" compared to your fast overall
computation time.
a = 0; tic; for i = 1:600, a = a + i; end; toc
Octave 1.53995 ms.
Matlab 0.025 ms.
So maybe you just measure "slow" code interpretation when the body of
the for-loop is "heavier" than the one shown above?
Do you measure your wall time inside "code.exe" or in "benchmark.m" by
tic-toc, like in my example? Maybe you find no differences, if you use
a more precise C/C++ library to measure the wall time and return it for
further processing by Octave or Matlab?
Kai
- Re: CPU usage by call of C++ code through system() on Linux,
Kai Torben Ohlhus <=