2011-12-13 5 views
7

scalacl plugin을 사용하는 데는 어떤 단점이 있습니까?배열 성능으로 스칼라 작업 수행 (scalacl 플러그인)

내 프로젝트에서 scala를 사용할 계획입니다. 나는 실행 시간을보기 위해 약간의 코드를 스칼라로 작성했다.

플러그인없이

(1 to 1000000).map(1 + _).sum 

1. 이런 식으로 컴파일 : 약 375 MS scalacl 플러그인으로

2에

BoxesRunTime.unboxToInt(((TraversableOnce)Predef..MODULE$.intWrapper(1).to(1000000).map(new MyScala..anonfun.1(), IndexedSeq..MODULE$.canBuildFrom())).sum(Numeric.IntIsIntegral..MODULE$)); 

실행

,639,637,

259 MS

내가 생각할 수있는
+2

30 %의 개선은 그리 많지 않습니다. 내 코드의 한 부분을 최적화했는데, 배열과 while 루프를 사용하여 100 배의 속도 향상을 얻었습니다. 관용적 인 스칼라는 정말로 느릴 수 있습니다. 예를 들어 복싱을 없애면 더 인상적인 것을 얻을 수 있습니다. – ziggystar

+0

Btw,'Range # sum'은 이제 트렁크에서 최적화되어'O (n)'대신에 일정 시간'O (n)'에서 실행됩니다. 알고리즘 개선은 대부분의 경우에 선호됩니다. – soc

답변

10

가능한 단점 :

1) 루프 최적화 작업을 표시하고 개발자가 매우 유능 보이지만, 그것은 "소개 ScalaCL"화면에 굵은 글씨로 말한다 " ScalaCL은 프로덕션 준비가되어 있지 않습니다! "입니다. 즉, 버그와 불안정성이 발생할 가능성이 조금 있습니다.

2) 플러그인으로 컴파일 할 때마다 기억해야합니다. 그렇지 않으면 성능 문제가 갑자기 발생할 수 있습니다. 플러그인이 중장기 적으로 유지/호환 될 수 있는지 확인하십시오.

3) 병목 현상을 식별하고 손으로 최적화하면 더 빠른 코드로 이어지는 반면에, 비효율적 인 코드를 작성하는 데 최적화 될 수 있습니다 즉, 실제로 "균열이있는 용지"

4) 추가 라이브러리 종속성으로 인해 빌드 파일에 복잡성이 추가됩니다.

당신은 죄수를 요구했지만, 이것들은 그것의 찬성에 비해 꽤 사소한 것입니다. 개인적으로 개인 프로젝트에 루프 최적화를 사용하는 것에 대해 주저 할 필요가 없습니다. 아직 cl 컬렉션에 대해 확신하지는 못했습니다. (GPL이 내 CPU보다 약간 느립니다. obv는 사용 가능한 하드웨어에 달려 있습니다.)하지만 나는 프로젝트가 자체적으로 또는 통합 된 큰 미래를 가지고 있다고 생각합니다. 표준 컴파일러와 라이브러리. 일부 코드의 경우 극적으로 빠른 속도 향상 (20 배 빨라짐)을 보았습니다.