Does Intel IPP 8.0 support in-place operations?

610 Views Asked by At

IPP <= 7.1 has special in-place functions.

In IPP 8 they are deprecated: deprecation-summary

It is not clear if the new out-of-place functions also support in-place operation.

My guess is that for some of the functions it is OK to pass the same pointers for src/dst, but for others it is not, but this is not documented.

Here is the documentation

3

There are 3 best solutions below

1
On

I've had similar question and have posted it under Intel's developer zone. The following link will take you to my post and to the answer I got from Intel:

http://software.intel.com/en-us/forums/topic/498093

Here is a short quote from the above link:

in IPP 8.1 (will be available on the web on ww06 2014) deprecation message removed from all ipps in-place functionality (based on customers' feedback). The same is planned be done for ippi domain in the nearest future.

Hope you find this helpful (I did).

0
On

Here is a list of functions deprecated in 7.1, with recommended substitutes. You should notice that the non in-place functions are typically recommended as substitutes for their in-place counterparts.

Here is a forum discussion where in an intel engineer affirms that non in-place functions can be used in place of their in-place counterparts, by setting src==dst.

There is a caveat, though. If you're using IPP 7.0, the compiler will issue deprecation warnings. However, for at least some of those functions, using the src==dst method produces corrupt output. This doesn't appear to be fully implemented until 7.1. I've experienced this issue personally with filter functions, and there's a question in the discussion about it, though Intel never responded to it.

It's frustrating that Intel hasn't been more forthcoming about clearly documenting this change. The resulting bugs are very difficult to diagnose, and could easily be overlooked entirely. The only way to catch them, is by comparing the output of both functions, and few people would bother to do that.

0
On

Here's a quote from Intel's comment on the deprecated functions:

In-place functionality will be removed: In-place functions accept only one pointer for input and output. The out-of-place versions often offer the same functionality but with the additional flexibility of specifying a different output buffer.

In my experience, all out-of-place functions with deprecated in-place variants support in-place operation, pSrc and pDst may point to the same memory.

Therefore my answer is: Yes, IPP 8.0 still supports in-place operations, but it's not documented well.