"CPS"접근 방식은 SML / NJ의 성능에 큰 해를 끼쳤습니다. 원하는 추론


11

Learning F #에 대한 의견 : 기능 개념을 배우기 위해 다른 프로그래밍 언어를 사용하는 어떤 책을 F #으로 변환 할 수 있습니까? 마카 리우스의 말 :

"CPS"접근 방식은 SML / NJ의 성능에 큰 해를 끼쳤습니다. 물리적 평가 모델이 하드웨어에 내장 된 너무 많은 가정을 위반합니다. Isabelle / HOL과 같은 SML의 상징적 인 응용 프로그램을 사용하면 CPS가 포함 된 SML / NJ는 약 기존 스택으로 Poly / ML보다 100 배 느립니다.

누군가 이것에 대한 이유를 설명 할 수 있습니까? (일부 예에서 바람직 함) 여기에 임피던스 불일치가 있습니까?


1
하드웨어는 스택 원칙을 가정하므로 CPS 접근 방식은 이러한 가정을 따르지 않는 성능을 발휘합니다. 그러나 그것은 단지 정보가없는 나의 의견 일뿐입니다.
Andrej Bauer

답변:


9

첫 번째 근사에서는 프로그램이 기존 스택의 증가 및 축소 대신 CPS 스타일의 힙에서 실행되는 경우 메모리 액세스의 "지역성"에 차이가 있습니다. 또한 CPS는 힙에 배치 된 것처럼 보이는 로컬 데이터를 복구하려면 항상 GC가 필요합니다. 이러한 관찰만으로는 하드웨어가 오늘날보다 훨씬 단순했던 10 년 또는 20 년 전에 적절했을 것입니다.

나는 나 자신도 하드웨어 또는 컴파일러 전문가가 아니므로 두 번째 근사치 인 대략적인 이유가 있습니다. Isabelle / HOL에서 볼 수있는 요소 100 :

  • 위의 "첫 번째 근사치"에 따른 기본 성능 손실.

  • SML / NJ 힙 관리 및 GC는 수십 MB 이상으로 확장하는 데 심각한 문제가 있습니다. Isabelle은 이제 일상적으로 100-1000MB, 때로는 몇 GB를 사용합니다.

  • SML / NJ 컴파일 속도가 매우 느립니다. 이는 전혀 관련이 없을 수 있습니다 (Isabelle / HOL은 런타임 컴파일과 실행 코드를 대체 함).

  • SML / NJ에는 네이티브 멀티 스레딩이 부족합니다. CPS가 "별도의 스택없이 사용자 공간에서 스레드를 롤링"하는 것으로 알려 졌기 때문에 완전히 관련이 없습니다.

힙과 스레드의 상관 관계는 Morriset / Tolmach PPOPP 1993 "프로 크 및 잠금 : 뉴저지 표준 ML을위한 휴대용 멀티 프로세싱 플랫폼"( CiteSeerX ) 의 논문에서도 논의됩니다 . 1-10 대신 1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.