07-12-2011 06:47 AM
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 :-(
07-12-2011 07:47 AM
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;
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 !?
07-12-2011 08:18 AM
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)
07-12-2011 08:40 AM
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 !