[Bf-committers] optimising the code

Jean-Luc Peurière bf-committers@blender.org
Sat, 29 May 2004 17:27:41 +0200


Le 29 mai 04, à 01:00, Jean-Luc Peurière a écrit :

> I had the curiosity of using a profiler and code analyser (shark on Os =

> X) on blender application.

> By changing a few lines in *ONE* function I was able to get a 11% 
> speed-up of rendering time !
...

> * floor --> floorf
> * constant of the correct type (float)
> * spliting 3 variables in int and float versions
>
> Now I would be interrest to know if theses simple changes have the 
> same drastic effect on other plaforms ?

We had a very interesting discussion about this optimisation thing on 
IRC with Ton, LarstiQ, Jesterking and Desoto.

- It appears that Blender was moved from float to double math for Intel 
support on linux reasons around 2000.
- C99 standard define float math but not all compilers implement it 
fully.
- some compilers, while supporting float math have different naming or 
ressort to a special library
- Ton quotes :  we can make a bfloat.h with platform #ifdefs mapping 
float calls to double ones,
                            i wont mind introducing rule that all *f 
calls can be used, but only with a bfloat.h include to allow some 
platforms to patch it
- optimising like this dont infer on portability, and do not have the 
drawback of using platform specific code like SSE, altivec or assembly.
- It still allow to do a reduced set of routines in platform specific 
code like SSE or altivec.

the functions available in C99 are :

float acosf(float)
float asinf(float)
float atanf(float)
float atan2f(float, float)
float cosf(float)
float sinf(float)
float tanf(float)
float coshf(float)
float sinhf(float)
float tanhf(float)
float expf(float)
float frexpf(float, int *)
float ldexpf(float, int )
float logf(float)
float log10f(float)
float modff(float, float *)
float powf(float, float)
float sqrtf(float)
float ceilf(float)
float fabsf(float)
float floorf(float)
float fmodf(float, float)

The first thing to know is what is the status of these functions on 
supported platforms (this must be done for each compiler and version 
available).

I'm then willing to pass some time analysing the code and modifying 
where needed. To do that efficiently, I will need .blend files each 
testing deeply a very reduced set of routines (procedurals func, UV's, 
and all render aspects). the goal is 2' render time on my comp (G4 867 
Mhz) to have enough profiling samples. If someone else could provide 
this, that would help speeding up things.

-- 
Jean-luc (lukep)