On 05/07/2010 19:43, Joern Rennecke wrote:
> Quoting Béla MIHALIK <[email protected]>:
>
>> If I compile it with mingw32 compiler, or VisualC++ then it gives good
>> result.
>>
>> Here are my results for memory bandwith test:
>>
>> Linux: 373.574249 MB/s Win32: 4468.297363 MB/s
>
> I don't think that has anything to do with the code generated by the
> compiler; rather, I think the random function you use on Windows is broken.
It's fine, it's just that the testcase doesn't account for RAND_MAX, which
is only 0x7fff in MSVC runtime, so it only ever ends up swapping entries in
the first 32k (array elements, not bytes) of each block:
> const int nofElems = 64 * 1024 * 1024;
> for ( i=0; i<nofMoves; i++ )
> {
> memRand1[i] = rand() % nofElems;
> memRand2[i] = rand() % nofElems;
> }
> for ( i=0; i<nofMoves; i++ )
> {
> mem1[ memRand1[i] ] = mem2[ memRand2[i] ];
> }
In the GLIBC runtime, RAND_MAX is 0x7fffffff, so that's big enough to cover
the entire span of the nofElems-sized arrays.
Since there's no compiler bug, this is gcc-help@ material; please send any
follow-ups to that list.
cheers,
DaveK