Julian Karch
2015-Sep-09 13:46 UTC
[Rd] Profiling function that contains both C++ and Fortran Code
Hello, I am trying to profile a function of OpenMx (http://openmx.psyc.virginia.edu) for CPU time. My operating system is OS X 10.10. OpenMx contains C++ and Fortran code. I have read the section regarding profiling compiled code in the manual (https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Profiling-compiled-code). This section and this post (http://blog.fellstat.com/?p=337) lead me to try Instruments. Here is what I did: -Opened Instruments -Chose the Time Profiler Template -Pressed Record -Started my script using RStudio The output of instruments looks like this: http://i.stack.imgur.com/aKIQm.jpg. The command line tool "sample" returns the same output The problem is that it looks like "omxunsafedgemm_", the functions that consumes the vast majority of the time, would be called directly from the Main Thread. However, this is a low level Fortran function. It is always called by a C++ function called "omxDGEMM". In this example "omxDGEMM" is first called by "omxCallRamExpection" (so almost at the bottom of the call tree). The total time of "omxDGEMM" is 0. Thus, the profiling information is currently useless. In the original version of the package "omxDGEMM" is defined as inline. I changed this in the hope that it would resolve the issue. This was not the case. "omxunsafedgemm" is called by "omxDGEMM" like that F77_CALL(omxunsafedgemm)(&transa, &transb, &(nrow), &(ncol), &(nmid), &alpha, a->data, &(a->leading), b->data, &(b->leading),&beta, result->data, &(result->leading)); Any ideas how to obtain a sensible profiler output? Best, Julian Karch