비베가 워낙 느리니,
비베 속도 개선에 대해서 알아보던 중이었는데,
이런 얘기가 있음.
Save intermediate results in mathematical calculations. For example, this code:
Xsquare = x * x Ysquare = y * y a = 2 * Xsquare + 3 * Ysquare b = 3 * Xsquare + 5 * Ysquare If a + b > 50 Then ...is faster than this version:
If 2 * x * x + 3 * y * y + _ 3 * x * x + 5 * y * y > 50 _ Then ...난 당연히 후자가 빠를줄 알았는데,
전자가 빠르다고 하는데,
다른 언어도 그런가여?
ㅇㅇ
최적화 안 된다고 가정할시 ㅇㅇ
해보니 역시 후자가 더 빠른데. 디버그 릴리즈 모두. 다른 언어에서는 후자가 더 느릴만한 껀덕지가 있나?
어? 전자가 빠른게 맞음? 그럼 뭘 잘못한거지... 걍 바로 다른 언어로 실험해봐야되나? ㅠㅠ
후자는 x*x나 y*y를 여러번 곱하는데 전자는 미리 변수에 저장해놔서 한번만 곱해서 그럴걸
ㄴ 그러고보니 그러네여. 근데 막상 실험해보면 전자가 느림... 뭐지...? 일부러 반복루프 밖으로 저 변수선언 다 빼기까지 했는데...
후자가 더 빠르면 그거 가지고 객체라도 생성한다든지 해서 오버헤드 걸리는 경우. 전자가 빠른 건 어디까지나 로우레벨 관점에서의 얘기임.
동적 할당이라든지
다시 해봤는데, 디버깅할때는 확실히 전자가 2배이상 느림. 근데 릴리즈로 최적화된건 전자가 20% 정도 빠름. 빠른게 맞긴 하네... 아까 릴리즈도 후자가 빠르다는건 반복횟수가 적어서 나타난 오해였음. 릴리즈하면 최적화해서 시간이 확 줄어드니까. 그래서 1천만회 돌린걸 1억회 돌려서 전자가 빠르다고 확인함.