- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

I calculate matrix matrix product in my program. But I meet some problem.

There are three matrix.

rightv dimension is larger than (svddimbefore,4*Rrealdimbefore).

midmat2 dimension is larger than (rsvddimbefore,4*lsvddimbefore).

coeffguess dimension is larger than (4*Rrealdimbefore,4*lsvddimbefore)

When I use the fortran95 interface

use blas95

call gemm(rightv(1:rsvddimbefore,1:4*Rrealdimbefore),midmat2(1:rsvddimbefore,1:4*lsvddimbefore),&

coeffguess(1:4*Rrealdimbefore,1:4*lsvddimbefore),'T','N',1.0D0,0.0D0)

It failed!

Program received signal SIGSEGV, Segmentation fault.

0: 0x000000000059e35f in dgemm_f95_ ()

But when i use f77 interface

call dgemm('T','N',4*Rrealdimbefore,4*lsvddimbefore,rsvddimbefore,1.0D0,&

rightv(1:rsvddimbefore,1:4*Rrealdimbefore),rsvddimbefore,&

midmat2(1:rsvddimbefore,1:4*lsvddimbefore),rsvddimbefore,0.0D0,coeffguess,4*subMp)

It works.

My question is that why fortran95 interface cannot work in this case.

I used fortran95 interface gemm before, it can work. But this time it doesn't.

Any idea?

Best Regards,

Jiajun

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Please show a complete code example which demonstrates the problem. In particular, the declarations of the array variables must be known, and the matrices being passed to GEMM must conform to the specifications.

Here is an example code that is similar to what you described in passing the matrix arguments as array sections. It runs correctly (verified using Matlab).

program asec_gem use blas95 !test calling F95 GEMM with array sections implicit none real A(5,4), B(4,5), C(3,3) integer i,j ! do i=1,5 do j=1,4 A(i,j)=10*i+j B(j,i)=100*j+i end do end do write(*,'(1x,3F8.1)')((A(i,j),j=1,3),i=1,5,2) write(*,*) write(*,'(1x,3F8.1)')((B(i,j),j=1,5,2),i=2,4) write(*,*) call gemm(A(1:5:2,1:3),B(2:4,1:5:2),C) write(*,'(1x,3F10.1)')((C(i,j),j=1,3),i=1,3) end

Link Copied

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Please show a complete code example which demonstrates the problem. In particular, the declarations of the array variables must be known, and the matrices being passed to GEMM must conform to the specifications.

Here is an example code that is similar to what you described in passing the matrix arguments as array sections. It runs correctly (verified using Matlab).

program asec_gem use blas95 !test calling F95 GEMM with array sections implicit none real A(5,4), B(4,5), C(3,3) integer i,j ! do i=1,5 do j=1,4 A(i,j)=10*i+j B(j,i)=100*j+i end do end do write(*,'(1x,3F8.1)')((A(i,j),j=1,3),i=1,5,2) write(*,*) write(*,'(1x,3F8.1)')((B(i,j),j=1,5,2),i=2,4) write(*,*) call gemm(A(1:5:2,1:3),B(2:4,1:5:2),C) write(*,'(1x,3F10.1)')((C(i,j),j=1,3),i=1,3) end

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

It's my fault. The problem has solved.

Thank you all.

Jiajun

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