OpenCL* for CPU
Ask questions and share information on Intel® SDK for OpenCL™ Applications and OpenCL™ implementations for Intel® CPU
Announcements
This forum covers OpenCL* for CPU only. OpenCL* for GPU questions can be asked in the GPU Compute Software forum. Intel® FPGA SDK for OpenCL™ questions can be ask in the FPGA Intel® High Level Design forum.

pow : crash

Polar01
Beginner
184 Views
Hi,
I use the pow function in my kernel and when I do
float v = pow(0.00001f, 1000.f);
I got a crash !
I use a lot this function and don't know if it is due to my context !
But this simple line make my soft crashing with the last SDK :-(
0 Kudos
6 Replies
Polar01
Beginner
184 Views
Bad news,
The problems sounds related to the context, when I use this method somewhere else... no problem !
So, how can I help you to debug the problem ?
Thanks
Evgeny_F_Intel
Employee
184 Views

Hi,

Can you provide small reprodusor of this issue, few host lines and small kernel?

Thanks,
Evgeny

Polar01
Beginner
184 Views
I think that the problem is more complex than this !
I can't provide you a "simple" reproductor ! It is what I say when I tell you that it is a bad news :-(
In fact, the crash occur when I add the simple following line in my software :
float v = pow(0.1f, 1000.f);
in a specific function !
I have also try to replace the pow with :
inline float POW(float value, float exponent)
{
for(uint i = 0; i < exponent; i++)
value *= value;
return value;
}
And it works ! So there is something wrong with the SDK !
So, I can give you access to the full code, but you will have to invest time to debug this way... it is a big application with a lot of OpenCL code !?
Polar01
Beginner
184 Views
I have also try the following methods, but all failed :

#define POW(VALUE,EXPONENT) powr(VALUE,EXPONENT)
#define POW(VALUE,EXPONENT) pow(VALUE,EXPONENT)
#define POW(VALUE,EXPONENT) pown(VALUE,EXPONENT)
#define POW(VALUE,EXPONENT) exp(EXPONENT*ln(VALUE))
The problem sounds to be in the 'ln' function (not the exp I think)

Polar01
Beginner
184 Views
I have also try :
#define POW(VALUE,EXPONENT) exp(EXPONENT*log1p(VALUE-1.f))
And it works !
Because if I remember :
pow(x, exponent) = exp(exponent * log_e(x))
so, because log1p(x) = log_e(1 + x) I just have to remove 1 !
Of course it is just a fix, you still have a problem in the SDK ! For sure a lot of peoples will use it !
Polar01
Beginner
184 Views
I have finaly fixed it like this :
#define POW(VALUE,EXPONENT) exp(EXPONENT*log(VALUE))
What can I do to help you ?
Reply