How to accelerate exponent (exp) calculation in MATLAB?

Hello everyone. I developed a program and I find it spends lots of time on calculating exp(-ax). So is there any way to accelerate such calculations exp(-ax)? Many thanks~

4 comentarios

KSSV
KSSV el 21 de Abr. de 2017
It depends on how you have coded....we can help you only on knowing how your code is.
Walter Roberson
Walter Roberson el 21 de Abr. de 2017
Are you doing a symbolic calculation?
Tian
Tian el 21 de Abr. de 2017
Not a symbolic calculation, just need to calculate tens of thousands of simple exp(ax). I have tried to use arrayfun, or matrix calculation, but too much memory is required.
ZZZ = rand(1,1E6);
timeit(@() exp(ZZZ),0)
This is about 0.0045 seconds, so even 10^8 exp() would take less than 1/2 second.

Iniciar sesión para comentar.

 Respuesta aceptada

Jan
Jan el 21 de Abr. de 2017
Editada: Jan el 21 de Abr. de 2017

1 voto

No. exp() is an expensive operation. The only way to accelerate it is to reduce repeated calls with the same argument.
I've experimented with the implementation of netlib.org, but did not found a significant acceleration and the results are lesss accurate. I assume this is the reason why it is not used in Matlab (in opposite to e.g. acos, which is taken from netlib).
A parfor loop might help to distribute the calculation to multiple cores.
Note: Think twice. If there would be a way to accelerate the computation of a specific function, it would have been included by Mathworks certainly. It is very pitty, but there are no magic tricks to make Matlab faster.

3 comentarios

Tian
Tian el 21 de Abr. de 2017
Thank you for your answer. I will try other ways. I've tried parfor, but it is not so efficient in my code. Thanks again~
Adam
Adam el 21 de Abr. de 2017
Make sure you vectorise calls to exp as much as yo can too.
Tian
Tian el 21 de Abr. de 2017
OK, thanks a lot.

Iniciar sesión para comentar.

Más respuestas (1)

Rangeet Mitra
Rangeet Mitra el 10 de Nov. de 2018

0 votos

Try replacing exp() by a custom function using a Hermite approximation for exp() (which is learnt a-priori for the dynamic range of your code). Without loss of performance, you will get a considerable speedup!!!

Categorías

Más información sobre 循环及条件语句 en Centro de ayuda y File Exchange.

Preguntada:

el 21 de Abr. de 2017

Respondida:

el 10 de Nov. de 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!