2014-09-16 3 views
3

SubArray 및 기타 배열 작업이 향후 eventually due for a performance overhaul이라고 들었습니다. 당분간은 SubArray이 느려서 코드에 약간의 속도 저하가있었습니다. 다음은 예입니다 :스케일에 대한 대안! SubArray 객체에 대해

A=rand(Float32,20000,20000); 
B=sub(A,2:19999,2:19999); 
@time scale!(A,0.2f0); 
@time scale!(B,0.2f0); 

elapsed time: 0.245619038 seconds 
elapsed time: 11.706939438 seconds 

결과 등 scale!Array보다 SubArray 비슷한 크기의 약 40 ~ 50 배 느리다.

당분간 에 scale!을 사용할 수있는 간단한 해결 방법이 있습니까? 또는 다음 릴리스에서 개선 될 때까지 기다려야합니까?

해결 방법이없는 경우 큰 문제는 아니며 단지 궁금해서 생각했습니다.

답변

3

성능을 향상 시키려면 성능을 근본적으로 향상시키는 것이 특히 어렵지는 않습니다. scale!은 선형 인덱싱이 아닌 직교 (다차원)를 사용하는 구현이 필요합니다. 지금은 Base.Cartesian의 익숙하지 않은 구문을 사용해야한다는 것을 의미합니다.

scale!is here의 핵심 코드입니다. this implementation of copy!과 더 비슷하게 보이게하고 싶을 것입니다. 함수 본문은 문자 그대로 2 문자 씩 변경됩니다 (할당의 RHS에 s* 추가).

물론 Julia 0.3을 고수하고 싶다면 자신 만의 고유 한 구현을 사용하는 것이 가장 좋습니다.