PDA

View Full Version : 64bit vs 32bit Noise



RedBull
02-16-2008, 03:45 PM
Has anyone done much testing between 32bit and 64bit architectures on their same machine? Recently it came to my attention that my 64bit renders are often slow in comparison to LW32 (Running under WOW32) in XP64 and Vista x64.... Generally i was expecting no speed-ups and no slow-downs...

But i get really varying inconsistent results.... I made some simple test scenes that show some of differences. One thing that struck me is the Floating Point calculations seem to be different between 32bit and 64bit....

What this means generally is anything with Procedurals is slower on my 64bit system usually by a significant amount.... I do know that FP calcs between Macs, Intels and AMD's (and even various revisions of chips) are often different but I'm surprised to see such a difference on the same architecture.

Anyone give me an explanation of why this is happening? Should scenes and renders between LW9.31 32bit and 64bit, be showing a LOT of difference between each other on the same machine and OS?

Is this a problem of 80bit or 128bit wide SSE registers, only being 64bit wide on 64bit machines, or something else?

The 64bit renders i compared seem to always have more to render than their 32bit counterpart, i.e Here is a quick render of mainly some procedural noise, the render on the left is 64bit was about 10+ seconds slower than the image on the left. You can see that their is a lot more noise showing on that image, it seems that the 64bit FPU likes to often draw more noise than in 32bit mode,
as it's always slower, never quicker!

Exception
02-16-2008, 05:14 PM
I think it has something to do with the color scheme of your windows 8/

But seriously, if you found a nicely repeatable scene, that's good material to send into the fog... cause it shouldn't be different...

RedBull
02-16-2008, 05:45 PM
I think it has something to do with the color scheme of your windows 8/ But seriously, if you found a nicely repeatable scene, that's good material to send into the fog... cause it shouldn't be different...

Yeah i would really like Mike or perhaps Jarno to comment on this one....
Hehehe, I have no doubt that it's just the FPU giving different results, and that bit could be fairly normal.

The machine that was rendered on is known on the network as RED (So Windows is set accordingly, as are Blue, Green and Yellow) But i have not set my color schemes back up on either 32 or 64bit yet. It was just to remind me what version i was rendering in... :)

But the shading and noise differences are very noticeable, and that accounts for the render time differences. I will also note that the rendertimes are more noticeably different when using Sparse Convolution Noise.

I was going to contact Marvin, as he originally wrote the RAPTS procedurals.
And i know he has compiled some 64bit stuff, so he may know more than anyone on this issue.

Edit PS Is that image to dark for people?
I have many different monitors and on my rendermachine it's fine, but on my Internet machine it's SO way too dark...

Lightwolf
02-16-2008, 06:20 PM
Yeah i would really like Mike or perhaps Jarno to comment on this one....
I'll try to create a sample scene to check what's going on there.
It shouldn't happen, not even on completely different CPU types - at least not to that extent. (Heck, we're renderfarming across different CPU brands and I've yet to see something like that - even though I heard that tiny differences may show up - yours isn't tiny though).

SSE/SSE2 the fpu or 32bit vs. 64bit shouldn't be the culprit either.
(on 32bit machines LW runs different code depending on the capabilities of the processors - NT uses the intel compiler which supports code paths).

While there are differences, the magnitude is so small that it shouldn't affect your scene.
Could you post a sample object? Which procedural are you using? Does it happen with all of them?

I'm actually suspecting a bug in the procedural, but that's hard to tell without comparing it to others (especially something like Denis' plugins, Marvin's and LW native ones).

Cheers,
Mike

RedBull
02-16-2008, 06:38 PM
I'll try to create a sample scene to check what's going on there. It shouldn't happen, not even on completely different CPU types - at least not to that extent. (Heck, we're renderfarming across different CPU brands and I've yet to see something like that - even though I heard that tiny differences may show up - yours isn't tiny though).

SSE/SSE2 the fpu or 32bit vs. 64bit shouldn't be the culprit either.
(on 32bit machines LW runs different code depending on the capabilities of the processors - NT uses the intel compiler which supports code paths).

While there are differences, the magnitude is so small that it shouldn't affect your scene. Could you post a sample object? Which procedural are you using? Does it happen with all of them?

Yeah i noticed differences of small magnitude on most procedurals, however using Convolution Sparse Noise (as opposed to Perlin Noise or others)
seems to yield the most dramatic differences. (I will look into this part of the code) However I'm not sure if the code is identicle to rapts anymore or compiler differences could be making the difference. (I cannot compile my own 64bit plugins)

I'm actually suspecting a bug in the procedural, but that's hard to tell without comparing it to others (especially something like Denis' plugins, Marvin's and LW native ones).

Yes this is what I'm thinking I have the code for rapts, and have written some of my own procedurals.... I have not looked into Convolution Sparse Noise, to see what makes that do things differently.

Doing a search for this kind of problem led me to a Ubuntu forum, which showed a simple 2 line C code give different FPU results (quite large differences) on the 32bit and 64bit compiles, but still not sure of the exact cause. I will post the scenes and objects, in my next post..... (Playing TF2 currently) :)

You can Add a Null - Hypervoxels, Volume - HyperTexture - And also get similar results, well at least on speed. (I didn't do a visual comparison) Thanks for response.

Lightwolf
02-16-2008, 06:45 PM
Doing a search for this kind of problem led me to a Ubuntu forum, which showed a simple 2 line C code give different FPU results (quite large differences) on the 32bit and 64bit compiles, but still not sure of the exact cause.
If found it. It seems to be related to storing temp results in a floating point register or not. If the compiler does that is probably also related to the floating point optimizations on the compiler. From what I gatheres this is not a problem inherent to 32 vs. 64-bit but can happen in 32bit only as well with different compiler options.

The thread you've been reading links to this PDF (http://gcc.fyxm.net/summit/2003/Porting%20to%2064%20bit.pdf) which explains it in a bit more detail.

Cheers,
Mike