If you are writing something involving the math between vectors in C/C++, you may want to check out Vlfeat (http://vlfeat.org).
It is designed to be a library for Computer Vision related stuff, but it also bring you a wrapper for SSE2 acceleration for vector computation.
Say your original code for the calculation of vectors product looks like this:
float productOfVectors(const float *vecA, const float *vecB, const int dimension) {
float value = 0.0f;
for (int i = 0; i < dimension; i++)
{
value += (vecA[i] * vecB[i]);
}
return value;
}
It can save you time significantly by adding vlfeat to your project and replace it with this:
float productOfVectors(const float *vecA, const float *vecB, const int dimension) {
float value = 0.0f;
vl_eval_vector_comparison_on_all_pairs_f(&value, dimension, vecA, 1, vecB, 1, vl_get_vector_comparison_function_f(VlKernelL2));
return value;
}
It's pretty easy but it really works. It takes use of the SSE2 instructions provided by your CPU which result in an non-trivial acceleration when you are doing large scale computation.
You can find more supported forms of calculation here, thanks for the developer's good job.
You must be logged in to post a comment.