My application is using many IPP (Intel Performance Primitives) functions. When I profile it with vTune, I can see how much time IPP functions use, but I can't see the names of the IPP functions. Instead, I see function names like func@0x18107b040:
Function / Call Stack Effective Time by Utilization Spin Time Overhead Time Module Function (Full) Source File Start Address
func@0x18107b040 2.1% 0s 0s ippie9-8.2.dll func@0x18107b040 0x18107b040
func@0x180c81da6 2.0% 0s 0s ippie9-8.2.dll func@0x180c81da6 0x180c81da6
It would be very useful to know the name of the IPP function, e.g. ippiSet_8u_C1R instead. Is this possible?
I'm using IPP 8.2, vTune 2015, in a 64bit mixed managed/native application
You need to check linked IPP libraris or called DLLs, if they provide debugging information. I suppose that most of release products have no debugging information:-(
You can raise your questions to this forum.
Did you try adding the directories containing the libraries you linked to the VTune binary search path? You needn't repeat data collection after such changes, only re-resolve.
What Tim meant - use "amplxe-cl -finalize -search-dir=Lib-Dir -r result-dir". But PDBs in Lib-Dir still are required, so VTune Amplifier can relocate performance data on associated functions.
VTune can resolve export functions of a .dll. But internal fucntions of a library, that are not exported, require .pdb files that we hardly can have for ipp.
If you do a collection with stacks you will be able to see performance statistics aggregated to an export ipp functon that is called from user's code and have resolved name and probably it will be more valuable.
Thanks & Regards, Dmitry
I'm not sure I understood your response: You're saying that in a basic hotspot collection (with stacks) I should see an ipp function name somewhere in the call stack, right?
Then it's not working. I see call stacks like this:
ippie9-8.2.dll!func@0x181153a20 - [Unknown] ippie9-8.2.dll!func@0x180f38e60+0x2f3 - [Unknown]:[Unknown] ippie9-8.2.dll!func@0x180158180+0x17d5 - [Unknown]:[Unknown] ippie9-8.2.dll!func@0x180158160+0x19 - [Unknown]:[Unknown] Inspections.dll!GradientReconstructionFilter::Filter+0x74a - gradientreconstructionfilter.cpp:86
The last line is a function in my module. The locations above are all in ipp dlls, none of them have a name. It's the same for every function.
(Small rant: Intel sells IPP and vTune in the same package. You should really include IPP PDB files if vTune needs PDB files, then...)
I see your point.
Could you please let know what function call you have in your source - gradientreconstructionfilter.cpp line 86? Probably it will give us a clue why it was not resolved through export functions.
Thank & Regards, Dmitry
Sure, here's GradientReconstructionFilter.cpp line 86:
CHECK_IPP_CALL(ippiFFTInv_PackToR_32f_C1IR(picFft32f.GetPixels(), picFft32f.GetStep(), m_FFT32f, buffer));
(CHECK_IPP_CALL is a macro to check the returned IppStatus.)
Could this be because I'm profiling a mixed managed/native application?
> CHECK_IPP_CALL is a macro to check the returned IppStatus.
A macro function cannot be displayed in call stack. If you don't have pdb files for symbol info, as Dmitry said, exported dlls still can be viewed in call stack, but you need to check if your interest of functions are exported.
Use: dumpbin /exports dll-file
I think that you can see in posted screeshot substituted macro with call to ippiFFTInv_PackToR_32f_C1IR() and subsequent called functions.
I'm not sure - what screenshot are you talking about? I can see the function name in the code, obviously, but I'd like to see it in the call stack in vTune.