현재 네트워크 코딩을위한 Java 기반 라이브러리 (http://en.wikipedia.org/wiki/Network_coding)를 개발 중입니다. 이것은 매우 CPU 집약적이므로 인코딩 단계를 최적화하는 데 도움이 필요합니다. 내가 본질적으로하고있는 것은 원래 데이터의 덧셈 연산이 XOR이고 곱셈 연산이 갈루아 필드 곱셈 (GF (2^16)에서)의 랜덤 - 선형 조합을 만들고 있다는 것입니다.네트워크 코딩 인코딩 성능 향상
나는 최적화가 가능할 때까지 왔습니다. 예를 들어, 다음과 같은 트릭을 사용하고 있습니다 : http://groups.google.com/group/comp.dsp/browse_thread/thread/cba57ae9db9971fd/7cd21eec39ddae1a?hl=en&lnk=gst&q=Sarwate+Galois#7cd21eec39ddae1a 곱셈을 더 빠르게 만듭니다.
따라서이 문제를 더욱 최적화하는 방법에 대한 도움말을 찾고 있습니다. 내가 사용한 프로파일 러가 조작이 가장 비용이 많이 드는 (예 : 배열 조회 또는 XOR) 힌트를 제공하지 않기 때문에 프로파일 링하기가 어렵습니다. 그래서 나는 무작위로 다른 아이디어를 시험해보고 전반적인 성능을 향상시키는 지 테스트 할 시점입니다.
은 더 구체적으로 내가에 도움이 필요 개선의 일부 발생할 수있는 영역은 다음과 같습니다
- 이 어떻게 자바 경계를 검사 건너 뛸 수있는 배열 작업에 있는지 확인 할 수 있습니까?
- HotSpot의 최적화가 완료된 후 실제로 실행되는 바이트 코드를 어떻게 검색 할 수 있습니까?
다음은 알고리즘의 핵심입니다. 문맥을 이해하는 것이 어려울 수도 있지만 불필요하게 값 비싼 작업이 있으면 직접 알려주십시오!
int messageFragmentStart = 0;
int messageFragmentEnd = fragmentCharSize;
int coefficientIndex = fragmentID * messageFragmentsPerDataBlock;
final int resultArrayIndexStart = fragmentID * fragmentCharSize;
for (int messageFragmentIndex = 0; messageFragmentIndex < messageFragmentsPerDataBlock; messageFragmentIndex++) {
final int coefficientLogValue = coefficientLogValues[coefficientIndex++];
int resultArrayIndex = resultArrayIndexStart;
for (int i = messageFragmentStart; i < messageFragmentEnd; i++) {
final int logSum = coefficientLogValue + logOfDataToEncode[i];
final int messageMultipliedByCoefficient = expTable[logSum];
resultArray[resultArrayIndex++] ^= messageMultipliedByCoefficient;
}
messageFragmentStart += fragmentCharSize;
messageFragmentEnd = Math.min(messageFragmentEnd + fragmentCharSize, maxTotalLength);
}
감사합니다. PrintAssembly를 사용해 보았지만 다음과 같은 오류 메시지가 나타납니다. "hsdis-amd64.dll을로드 할 수 없으며 라이브러리를로드 할 수 없으며 PrintAssembly가 비활성화되었습니다." 이 DLL을 어디서 얻을 수 있는지에 대한 생각은? – Yrlec
신경 쓰지 마라. JDK 7 (x86)으로 변경하고 http://classparser.blogspot.com/2010/03/hsdis-i386dll.html에서 해당 DLL을 찾았습니다. – Yrlec