"Dr Ivan D. Reid" <Ivan.Reid@[EMAIL PROTECTED]
> a écrit :
> You seem to have got the arguments the wrong way around; you
> are reading 4 1-byte items. From man fread:
You're right.
A keyboard-to-chair interface problem.
> size_t fread(void *restrict ptr, size_t size, size_t nitems,
> FILE *restrict stream);
>
>
>>> What am I doing wrong in the fortran version ?
>>
>> Have you tried something like:
>
>> integer :: i, j, k
>> integer :: nx, ny, nz
>> real :: x(720)
>
>> nx = 600; ny = 800; nz = 720
>
>> open(unit=20, file='input.sep', form='binary')
>> open(unit=21, file='a.sep', form='binary')
>
>> do i = 1, nx
>> do j = 1, ny
>> read(20) x
>> write(21) x
>> end do
>> end do
It'a workaround, yes.
>
> It's instructive to look at the times from the time command:
> real user sys
> ifort create file: 12'25" 1'50" 10'02"
> icc copy (original): 42" 32" 7"
> C copy (1x4-byte): 1'17" 33" 8"
> C copy (1x4-byte) -O3: 56" 0.5" 8"
> C copy (720x4-byte): 51" 0.5" 8"
> C copy (720x4-byte) -O3 54" 0.5" 8"
> ifort 9.1 single copy: 14'02" 3'09" 10'26"
> ifort array copy: 51" 0.9" 8"
>
> The C copies and the buffered ifort copy appear to be disk-bound,
> the user+sys is much less than the real time. The original 4x1-byte
copy
> user time appears to suffer from its extraneous looping, and the
single-item
> Fortran reads and writes need much more system and user time, presumably
> re-arranging items into and out of disk buffers. Since I only have
ifort
> 9.1, I couldn't test later versions' stream access.
I get the same computation time with gfortran.
Thanks.
--
Fred


|