VolkAddingNewKernels
Adding New Volk Kernels
TODO: Explain how to create/register new Volk kernels
Dealing with Volk Profile Puppets
If the Volk kernel does not 'fit' the the standard set of function parameters expected by the volk_profile structure, you need to create a Volk puppet function to help the profiler call the kernel.
This is essentially due to the function run_volk_tests
which has the form:
bool run_volk_tests(struct volk_func_desc, void(*)(), std::string, float, lv_32fc_t, int, int, std::vector *, std::string);
However the line in volk_profile.cc
expects to have the Volk kernel function to call, tolerance, a scalar, length, number of iterations and a results pointer.
The relevant macro is defined in volk/lib/qa_utils.h
:
#define VOLK_PROFILE(func, tol, scalar, len, iter, results) run_volk_tests(func##_get_func_desc(), (void (*)())func##_manual, std::string(#func), tol, scalar, len, iter, results, "NULL")
So - for the puppet function, instead of using the VOLK_PROFILE
macro in volk_profile.cc
, the VOLK_PUPPET_PROFILE
macro is used, which again is defined in volk/lib/qa_utils.h
:
#define VOLK_PUPPET_PROFILE(func, puppet_master_func, tol, scalar, len, iter, results) run_volk_tests(func##_get_func_desc(), (void (*)())func##_manual, std::string(#func), tol, scalar, len, iter, results, std::string(#puppet_master_func))
So the relevant parameters to the puppet function are tolerance, scalar, length, iterations, and result/output pointer.