- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello All,
I just installed intel fortran compiler 8.0.040 on my dell inspiron 8100 laptop which is running fedora core 1. The following codes is not working with ifc 8.0 but still working with ifc 7.1:(successfully compiled but 8.0 gives wrong answer)
it is used to calculate the atomic distances in 3 dimensional space, where coord(3,i) is the cartesion coordinate of atom i and dm(i,j) is the atomic distance between atom i and atom j, both are double precision arrays, if you're curious about the purpose of the codes.
The problem is although ifc7.1 can calculate the distances correctly, it seems to me that ifc8.0 will just skip the forall loop and the whole array of dm(i,j) will remain 0.0d0 after the execution. If I change the forall loop to do loop or if rewrite the forall loop like this:
ifc8.0 will give the correct answer. But there're a bunch of simiar loops in my codes and the i
Is it a bug of ifc8.0 or something wrong with using the mask in forall loop? It seems to me it's more like a bug of ifc8 'coz the same codes worked on ifc7.1 and sun compiler, but I'm not really confident about it. Also if it's a bug, how can I make Intel aware of this and patch it? Or someone can help me figure out a workaround?
Many thanks!
Allen
I just installed intel fortran compiler 8.0.040 on my dell inspiron 8100 laptop which is running fedora core 1. The following codes is not working with ifc 8.0 but still working with ifc 7.1:(successfully compiled but 8.0 gives wrong answer)
dm=0.0d0
forall(i=1:n,j=1:n,idm(i,j)=(coord(1,i)-coord(1,j))**2 &
+(coord(2,i)-coord(2,j))**2+(coord(3,i)-coord(3,j))**2
dm(j,i)=dm(i,j)
end forall
dm=dsqrt(dm)
it is used to calculate the atomic distances in 3 dimensional space, where coord(3,i) is the cartesion coordinate of atom i and dm(i,j) is the atomic distance between atom i and atom j, both are double precision arrays, if you're curious about the purpose of the codes.
The problem is although ifc7.1 can calculate the distances correctly, it seems to me that ifc8.0 will just skip the forall loop and the whole array of dm(i,j) will remain 0.0d0 after the execution. If I change the forall loop to do loop or if rewrite the forall loop like this:
forall(i=1:n,j=1:n)
dm(i,j)=(coord(1,i)-coord(1,j))**2 &
+(coord(2,i)-coord(2,j))**2+(coord(3,i)-coord(3,j))**2
end forall
ifc8.0 will give the correct answer. But there're a bunch of simiar loops in my codes and the i
Is it a bug of ifc8.0 or something wrong with using the mask in forall loop? It seems to me it's more like a bug of ifc8 'coz the same codes worked on ifc7.1 and sun compiler, but I'm not really confident about it. Also if it's a bug, how can I make Intel aware of this and patch it? Or someone can help me figure out a workaround?
Many thanks!
Allen
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
That does look like a correct usage. If this happens with the current update, pl043, please submit a report on premier.intel.com. I doubt the efficiency of it. For one thing, the loop would probably run over the entire extent of the arrays, even though it skips the operations half the time. Thus, a nested doloop would probably be faster.You would have to change the order of the data to facilitate vectorization if you want speed.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page