- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Dear community,

Dear Intel support,

We had some legacy software from awhile ago. And there is a piece of code that uses nsp.dll, nspa6.dll, nspm5.dll, nspm6.dll , etc. Which are the part of Interl Signal Processing library. And application calls these functions:

void _cdecl nspsRealFftl(float* samps, int order, int flags); void _cdecl nspsCcsFftl(float* samps, int order, int flags);

Here is how they called:

nspsRealFftl(&TrfmData[ctr * ChunkSize], 11, 0x81); // NSP_Forw|NSP_OutBitRev nspsCcsFftl(&TrfmData[ctr * ChunkSize], 11, 0x0202); // NSP_Inv|NSP_OutRCPerm

DLLs creation date is 30.07.1996

1. Does anyone know what are those functions inside?

2. Is there a document fully describing these functions and which exactly algorithm is used to compute FFT? Would anyone be so kind to provide a manual that came with that old version?

I took a look at the manual to Intel Signal Processing Library version 4.5 from year 2000 (the oldest one we have) and there is indeed a description of these functions. But when we try to replace original DLLs with DLLs from version 4.5 the application crushes.

3. Our goal is to update implementation and,maybe, replace these calls with open-source implementations of FFT if possible. If not - we will go with Intel IPP. But we want to ensure complete backwards compatibility, so the output from new application would be 100% identical to the old one. What would be your suggestion, respected friends? What is the best way to migrate this algorithm to a new codebase? Is there a way to migrate and keep output results to be the same?

Thanks.

Link Copied

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

And application calls these functions:

void _cdecl nspsRealFftl(float* samps, int order, int flags);

void _cdecl nspsCcsFftl(float* samps, int order, int flags);

Here is how they are called:

nspsRealFftl(&TrfmData[ctr * ChunkSize], 11, 0x81); // NSP_Forw|NSP_OutBitRev

nspsCcsFftl(&TrfmData[ctr * ChunkSize], 11, 0x0202); // NSP_Inv|NSP_OutRCPerm

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

3) Ruslan, using this version will not take your application to extract all performance benefits from the latest microarchitectures. May be taking the eval version of IPP ( 30 days ) will help you and with this issue?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Yes, it will surely extract. And we would be glad to migrate.

But let me explain my concern again. First, we need to understand what those methods were originally doing,which algorithm they were using under the hood, etc. Then we need to find what methods in latest IPP will give us the same(!) results.

In order to do it, we probably need documentation or any other sort of information about that original package. Thats why I approached you, as an Intel Support Representative, and a whole Intel Development community.

We would appreciate your sincere cooperation on this matter.

Thanks.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

You can look at the IPP FFT into CCS format and make the comparision of ourput results. At the first glance the desrciption of nspsRealFftl and CCS format are similar. Thanks.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Hi Ruslan,

what do you mean under "crashes"? Do you see something like exception, abort, or just the result of IPP FFT differs from NSP one?

Regarding IPP - could you provide a piece of code how do you use FFT functions? The right order is GetBufSize, Init, only then FFT itself.

regards, Igor

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

I've checked IPL v1.00.01 ( an Intel performance library before IPP ) installed on my machine and this is what I have:

... /*--------------------------- Library Version ---------------------------*/ #if !defined _OWN_BLDPCS typedef struct _IPLLibVersion { int major; /* e.g. 1 */ int minor; /* e.g. 00 */ int build; /* e.g. 01 */ const char * Name; /* e.g. "ipl6l.lib","iplm5.dll" */ const char * Version; /* e.g. "v1.00" */ const char * InternalVersion; /* e.g. "[1.00.01, 07/25/96]" */ const char * BuildDate; /* e.g. "Jun 1 96" */ const char * CallConv; /* e.g. "DLL","Microsoft*","Borland*"*/ } IPLLibVersion; ...

and I didn't find any references to functions you've mentioned in Post #1.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

**IPL**version I have is

**2.5**. Take into account that all functions in

**IPL**have a prefix

**ipl**.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page