JNI 대 유고 인민군 경기력
우리는 원어민이 있습니다.c/asm
GPU(OpenCL)를 위해 GPU를 프로그램입니다.encrypt/decrypt
특정 방법으로 데이터를 처리할 수 있습니다. 문제 없이 완벽하게 작동합니다.프로젝트의 일부(웹 및 배포)는 다음과 같이 개발되고 있습니다.JEE
기본 애플리케이션/프로그래밍을 호출하면 됩니다.
우리는 그것을 분리된 외부 프로세스라고 부르려고 시도했습니다.Process
클래스. 문제는 응용 프로그램(이벤트, 핸들러, 스레드 등)을 제어할 수 없다는 것입니다.우리는 또한 C 코드를 자바 코드로 바꾸려고 했지만, 성능이 떨어졌습니다.네이티브 코드를 프로세스로 실행하는 것 외에는 유고 인민군과 JNI에 대해 생각하고 있지만 몇 가지 질문이 있습니다.
질문:
- 나은 빠른) 솔루션을 되지 않는) 수 [Java(자바(Java의 "/자바(Java)"
ByteBuffer#allocateDirect()
인민군 에서?] JNI 유고모두서에군민인와?서▁)모에두▁j▁both)]▁in? - 네이티브 코드로 프로세스를 관리 및 처리하고 Java 코드(OpenCL lib)를 통해 GPU(공유) 메모리에 액세스할 수 있습니까?
- 성능은 어떻습니까?유고 인민군이 JNI보다 빠릅니까?
Redhat Linux6 x64에는 2개의 AMD W7000 클러스터 장치가 있습니다.
유고 인민군은 JNI보다 훨씬 느리지만 훨씬 쉽습니다.성능이 문제가 되지 않는 경우에는 JNA를 사용합니다.
직접 버퍼를 사용하면 가장 중요한 작업에서 JNI나 JNA를 사용하지 않고 더 빠르다는 장점이 있습니다.그들은 수단이 하나의 기계어 명령어로 바뀔 때 내재적인 것을 사용합니다.
Java 코드가 C보다 상당히 느리면 코드가 충분히 최적화되지 않았을 가능성이 높습니다.일반적으로 GPU가 모든 작업을 수행해야 하므로 Java가 조금 더 느리면 큰 차이가 없을 것입니다.
예를 들어 GPU에서 99%의 시간을 보내고 Java에서 두 배의 시간이 소요되는 경우 총 시간은 99+2% 또는 1% 느려집니다.
나는 간단한 dll을 개발하고 아무것도 하지 않는 빈 기능을 넣었습니다.그리고 나서 저는 JNA와 함께 DLL에서 그 함수를 호출했고 또한 JNI를 호출했기 때문에 그들을 호출하는 비용을 계산하려고 했습니다.많은 통화 후 성과를 보았을 때, JNI는 유고 인민군보다 30-40배 더 빨랐습니다.
유고 인민군의 공식 FAQ에서:
사용자 지정 JNI와 비교했을 때 유고 인민군의 성능은 어떻습니까?
유고 인민군 직접 매핑은 사용자 정의 JNI에 가까운 성능을 제공할 수 있습니다.인터페이스 매핑의 거의 모든 유형 매핑 기능을 사용할 수 있지만 자동 유형 변환에는 약간의 오버헤드가 발생할 수 있습니다.
유고 인민군 인터페이스 매핑을 사용하는 단일 네이티브 통화에 대한 통화 오버헤드는 동등한 사용자 정의 JNI보다 몇 배(약 10배) 더 클 수 있습니다(애플리케이션의 맥락에서 실제로 수행되는지 여부는 별개의 문제입니다).기본적으로 통화 오버헤드는 수십 마이크로초가 아니라 수백 마이크로초입니다.총 통화 시간이 아니라 통화 오버헤드입니다.이 크기는 동적으로 유지되는 형식 정보를 사용하는 시스템과 형식 정보가 정적으로 컴파일되는 시스템 간의 차이에 대한 일반적인 것입니다.방법 호출의 JNI 하드 코드 유형 정보. 여기서 유고 인민군 인터페이스 매핑은 런타임에 유형 정보를 동적으로 결정합니다.
유고 인민군 다이렉트 매핑으로 이동하는 속도가 약 1~3배 빨라지고, 그곳에서 사용자 지정 JNI로 이동하는 속도가 2~3배 빨라질 것으로 예상할 수 있습니다.실제 차이는 사용 및 기능 서명에 따라 달라집니다.다른 최적화 프로세스와 마찬가지로 속도 향상이 필요한 부분을 먼저 결정한 다음 목표 최적화를 수행하여 차이가 얼마나 나는지 확인해야 합니다.일반적으로 사용자 지정 JNI를 사용할 때 Java에서 모든 것을 프로그래밍하는 것의 용이성이 작은 성능 향상을 능가합니다.
C/GPU에서 대량의 숫자 크런치가 수행되며, Java <--> C 인터페이스가 수행하는 모든 작업은 데이터를 셔플하거나 셔플하는 것입니다.이것이 병목 현상이라면 저는 깜짝 놀랄 것입니다.
어떤 경우에도 작업을 수행하는 가장 간단하고 명확한 코드를 작성합니다.성능이 충분하지 않은 것으로 판명되면 병목 현상이 발생한 지점을 측정하고 성능이 정상화될 때까지 하나씩 해결합니다.프로그래머 시간은 매우 특별한 상황을 제외하고는 컴퓨터 시간보다 훨씬 더 가치가 있습니다.
언급URL : https://stackoverflow.com/questions/22288909/jni-vs-jna-performance
'programing' 카테고리의 다른 글
복합 서버 선택기를 사용하여 서버를 선택한 후 30000ms 후 시간 초과가 발생했습니다. (0) | 2023.08.09 |
---|---|
데이터베이스에서 실행 중인 예약된 작업을 나열하려면 어떻게 해야 합니까? (0) | 2023.08.09 |
Oracle DB 및 .NET 사용 시 모범 사례 (0) | 2023.08.09 |
sqdeveloper에서 다른 스크립트를 실행하는 스크립트 (0) | 2023.08.09 |
'Microsoft' 파일 또는 어셈블리를 로드할 수 없습니다.보고서 뷰어.공통, 버전=11.0.0.0 (0) | 2023.08.09 |