2013-01-15 2 views
13

나는 의 MArrays에 대해 일하고 있습니다. 속도가 중요하므로 가능한 한 많이 최적화하고 싶습니다.속도를 위해 MArray 함수를 올바르게 최적화하는 방법은 무엇입니까?

현재 간단히 정렬 기능이 INLINE입니다. 이렇게하면 최적화되지 않은 코드에 비해 코드가 10 배 이상 빨라집니다. 그러나 여러 곳에서 함수를 사용하고 컴파일 속도가 느려지면 코드 크기가 쉽게 폭발 할 수 있습니다.

유일한 대안은 MArray의 모든 기존 인스턴스에 대한 기능을 SPECIALIZE하는 것 같습니다. 또한 결과 코드가 확대되지만 함수가 몇 번 사용 되느냐에 의존하지 않는 상수 요소에 의해서만 확장됩니다. 문제는 MArray의 새로운 인스턴스가 나타날 가능성이 있습니까? 아니면 MArray가 특별하고 Haskell의 내부에 바인딩되어있어 다른 모듈에서 새 인스턴스를 정의 할 수 없다는 것을 확신 할 수 있습니까?

+0

INLINABLE pragma를 사용하려는 것 같습니다. http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html#inlinable-pragma –

+0

@JohnL 하지만 GHC의 결정에 의해 인라인 될 수있는 정렬 함수가 너무 커서 추가 SPECIALIZE pragma로만 작동 할까 봐 걱정됩니다. 그러나이 조합은 현재의 모든 인스턴스를 전문으로하고 사용자가 선언 한 새로운 'MArray'인스턴스를 전문화하도록 알리는 합리적인 해결책이 될 수 있습니다. –

+0

성능이 정말로 중요한 경우 벡터 또는 repa를 대신 사용해보십시오. –

답변