我正在为一个需要提高性能的Java应用程序开发一个C模块(请参见Improving performance of network coding-encoding),这需要一些性能改进。我尝试使用SSE指令集来优化代码,它比Java版本快了大约20%。然而,它仍然不够快。
不幸的是,我对优化C代码的经验有限。因此,我希望能够得到一些关于如何改进当前实现的想法。
构成热点的内部循环如下:
不幸的是,我对优化C代码的经验有限。因此,我希望能够得到一些关于如何改进当前实现的想法。
构成热点的内部循环如下:
for (i = 0; i < numberOfGFVectorsInFragment; i++) {
// Load the 4 GF-elements from the message-fragment and add the log of the coefficeint to them.
__m128i currentMessageFragmentVector = _mm_load_si128 (currentMessageFragmentPtr);
__m128i currentEncodedResult = _mm_load_si128(encodedFragmentResultArray);
__m128i logSumVector = _mm_add_epi32(coefficientLogValueVector, currentMessageFragmentVector);
__m128i updatedResultVector = _mm_xor_si128(currentEncodedResult, valuesToXor);
_mm_store_si128(encodedFragmentResultArray, updatedResultVector);
encodedFragmentResultArray++;
currentMessageFragmentPtr++;
}