2015-01-20 1 views
-2

나는 기본적으로 매우 긴 mpz 정수 (gmpy2 라이브러리에서)와 몇몇 작은 목록을 사용하는 python 스크립트를 작성 중이다. 다른 일반적인 "pythonic"코드 최적화 외에도 스크립트 내에서 계산에 필요한 시간을 줄이기 위해 노력했습니다 (기본적으로 gmpy2의 "mul", "add", "sub"계산) set_cache 함수를 다음과 같이 사용합니다. 글쎄, 심지어 max, 즉 set_cache (1000,16384)로 설정해도, 사용하는 것과 사용하지 않는 것 사이의 차이를 볼 수 없다. 타이밍은 큰 정수의 경우와 동일하다.gmpy2.set_cache 메소드가 올바르게 구성되어 있습니까?

누군가가 get_cache 사용법에 대해 경험이 있거나 어떤 종류의 작업을 설정하는 것이 더 좋으면 몇 가지 정보를 제공해 주시면 감사하겠습니다. 나는 단지 공식 gmpy 페이지가 그것에 대해 (아주 기본적인) 무엇을 말하고 있는지 그리고 인터넷에서 그 방법에 대해 인터넷 검색은 흥미있는 샘플을 제공하지 않는다. (최소한 나는 아직 그들을 찾지 못했다.)

답변

0

나는 gmpy2의 관리자이다. .

set_cache()get_cache()으로 제어되는 캐싱은 새로운 mpz 인스턴스를 만드는 데 걸리는 시간을 줄입니다. 이 개선은 중간 크기의 정수에서만 측정 할 수 있습니다. 매우 큰 숫자로 작업을 시작하면 계산 실행 시간이 오브젝트 작성 시간보다 훨씬 길어지기 때문에 캐싱 효과는 무시할 수 있습니다.

캐시 알고리즘이 캐시 된 개체의 크기를 제한하지 않으면 모든 시스템 메모리를 사용할 수도 있습니다. 아주 초기 알파 버전의 문제였습니다.

이 기능은 주로 테스트 용으로 사용됩니다. 캐시를 줄이거 나 사용하지 않도록 설정하면 메모리가 제한된 시스템에 유용 할 수 있습니다. 일반적으로 캐시 크기를 조정할 때 많은 이점이 없습니다.

코드를 제공하지 않았거나 운영 체제를 식별하지 않았기 때문에 성능 조정에 대한 일반적인 제안 만 할 수 있습니다.

  1. 대신 mul(), add()sub()*, +- 연산자를 사용합니다. 연산자는 오버 헤드가 적습니다.
  2. 파이썬의 long과 gmpy2의 mpz 유형 간의 변환 횟수를 최소화하십시오.
  3. 특정 프로세서 용으로 gmpy2을 컴파일하십시오. 불행히도 이것은 Windows에서 어려울 수 있습니다.
+0

대단히 감사합니다. gmpy2 팀으로부터 직접 피드백을받는 것이 좋습니다! 명성, 당신은 훌륭한 일을하고 있습니다. – iadvd

관련 문제