One open source library that permits access to vector instructions in the processor, without any assembly code. Volk is a part of the GNU Radio initiative, with the objective of getting better performance for DSP applications. Good for DSP, but hum…and for anyone? Windows. What is on Windows? Yes…on Windows. I work for a company that only develops this platform. And we have some issues with the performance of some specific points of our legacy code. Then Volk maybe is a good idea. But I do not find Volk for Windows on the internet. Neither build source is working.
Time to patch and think
Volk developer makes a crazy work with the CMake building. But compiling to Visual Studio 2013–2015 does not work. I found forums and posts about some issues with MMX instructions, but this is no longer compatible with the Microsoft compilers. But my version already has these patches. My hypothesis is another incompatibility in recent versions of the compiler. Making a change in the CMakeLists, I got a workaround for this problem. The project is now compiling and linking. If the flag LV_HAVE_SEE is enabled, I give linkage errors. Then only create a condition if the compiler is VS 2013 or above, not enable the SSE flag.
change lib/CMakeLists.txt
<pre class="wp-block-preformatted">#MSVC 64 bit does not have MMX, overrule it
if (${SIZEOF_CPU} EQUAL 64 AND MSVC)
OVERRULE_ARCH(mmx "No MMX for Win64")
+ if (MSVC_VERSION GREATER 1700)
+ OVERRULE_ARCH(sse "No SSE for Win64 Visual Studio 2013")
+ endif()
endif()
CI AppVeyor
Why the CI of the project is not working with my modifications? Maybe I have made a mistake. The project has a YMLfile to the AppVeyor CI, but cloning does not. I don’t have success in creating my personal YML file, something with the Boost library, showing in the error log. The AppVeyor image has various versions of the Boost, but setting the BOOST_ROOT does not work for the Volk. Neither sets the path to the C:\Library files. Have to be the same as the original YML file; install Boost modules dependencies with NuGet. And pass on arguments in the compiler configuration. Then the build compiles, and generates the artifacts.