- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am using Inspector within a Fortran project and I have noticed that Inspector reports memory leaks for allocatable components of derived type objects which are on the rhs of an assignment at some point during the program execution. If I replace the assignment with a subroutine which does the same work (except of course without relying on ifort's -assume realloc_lhs magic), Inspector does not report those memory leaks.
What am I to conclude? Does Inspector not keep track properly when -assume realloc_lhs is in place, or is realloc_lhs actually causing a memory leak?
What am I to conclude? Does Inspector not keep track properly when -assume realloc_lhs is in place, or is realloc_lhs actually causing a memory leak?
- Tags:
- CC++
- Debugging
- Development Tools
- Fortran
- Intel® Inspector
- Optimization
- Parallel Computing
- Vectorization
Link Copied
5 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Could you please provide you code sample and command line used? I'll try to run it on my side and see what's going on.
To get compiler command line in Visual Studio, go to Project Properties->Configuration properties->Fortran->Command Line.
Also please let me know, what version of Inspector XE do you run? Is it the latest update 2?
Do you build your project with MS or Intel compiler?
To get compiler command line in Visual Studio, go to Project Properties->Configuration properties->Fortran->Command Line.
Also please let me know, what version of Inspector XE do you run? Is it the latest update 2?
Do you build your project with MS or Intel compiler?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi - thanks for getting back to me.
I have not had time to reproduce the problem on a small code example - I'll try to do that soon & will post here. For now, I can only reproduce on my full project.
In the meantime, the command I was using to build:
The version of Inspector is Intel Inspector XE 2011 Update 1 (build 131372)
I didn't know about the update 2 - I downloaded Inspector just a couple of days ago. If you think it might make a difference, I can try with update 2.
I have not had time to reproduce the problem on a small code example - I'll try to do that soon & will post here. For now, I can only reproduce on my full project.
In the meantime, the command I was using to build:
[bash]ifort -fpp -assume realloc_lhs -warn all -gen-interfaces -warn notruncated_source -traceback -heap-arrays -FR -O3 -openmp -openmp-report[/bash]The version of ifort is 12.0.3 20110309
The version of Inspector is Intel Inspector XE 2011 Update 1 (build 131372)
I didn't know about the update 2 - I downloaded Inspector just a couple of days ago. If you think it might make a difference, I can try with update 2.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I cannot reproduce this problem on my side, with a simple test case.
I don't know if this is an old bug in compiler, or this is a bugof Inspector XE for specific case.
#inspxe-cl -version
Intel Inspector XE 2011 Update 1 (build 131372) Command Line tool
Copyright (C) 2009-2010 Intel Corporation. All rights reserved.
#source /opt/intel/composerxe-2011.3.174/bin/compilervars.sh intel64
test program:
Then build it:
[root@NHM02 problem_report]# ifort -g -check -assume realloc_lhs -warn ref_count.f90
[root@NHM02 problem_report]# inspxe-cl -collect mi3 -- ./a.out
Used suppression file(s): []
Creating new instance
In NEW_MY_TYPE %LOC(NEW) = 140736338714992
In DISPOSE %LOC(THIS) = 140736338714832
In defined assignment subroutine
Reference count is: 2
In DISPOSE %LOC(THIS) = 140736338714992
ref_count = 1
Finished creating new instance
New reference begin
In DISPOSE %LOC(THIS) = 140736338714912
In defined assignment subroutine
Reference count is: 2
New reference end
1.000000 2.000000 3.000000
In DISPOSE %LOC(THIS) = 140736338714832
ref_count = 1
In DISPOSE %LOC(THIS) = 140736338714912
ref_count = 0
Finalizing MY_TYPE
Finalizing: 1.000000 2.000000 3.000000
I don't know if this is an old bug in compiler, or this is a bugof Inspector XE for specific case.
#inspxe-cl -version
Intel Inspector XE 2011 Update 1 (build 131372) Command Line tool
Copyright (C) 2009-2010 Intel Corporation. All rights reserved.
#source /opt/intel/composerxe-2011.3.174/bin/compilervars.sh intel64
test program:
[fxfortran]MODULE TEST_MOD IMPLICIT NONE PUBLIC :: MY_TYPE, NEW_MY_TYPE, MY_TYPE_ASSIGNMENT PRIVATE TYPE MY_TYPE PRIVATE REAL, DIMENSION(:), POINTER :: ARR => NULL() INTEGER, POINTER :: REF_COUNT => NULL() CONTAINS PROCEDURE :: SET_ARR PROCEDURE :: GET_ARR FINAL :: DISPOSE END TYPE INTERFACE ASSIGNMENT (=) MODULE PROCEDURE MY_TYPE_ASSIGNMENT END INTERFACE CONTAINS ! Overriding intrinsic assignment SUBROUTINE MY_TYPE_ASSIGNMENT( LHS, RHS ) TYPE(MY_TYPE), INTENT(IN) :: RHS TYPE(MY_TYPE), INTENT(OUT) :: LHS WRITE(*,*) 'In defined assignment subroutine' LHS % ARR => RHS % ARR LHS % REF_COUNT => RHS % REF_COUNT LHS % REF_COUNT = LHS % REF_COUNT + 1 WRITE(*,*) 'Reference count is: ', LHS % REF_COUNT END SUBROUTINE ! Finalizer SUBROUTINE DISPOSE( THIS ) TYPE(MY_TYPE) :: THIS Write(*,*) 'In DISPOSE %LOC(THIS) =',%LOC(THIS) IF ( ASSOCIATED( THIS % REF_COUNT ) ) THEN THIS % REF_COUNT = THIS % REF_COUNT - 1 WRITE(*,*) 'ref_count = ', THIS % REF_COUNT IF ( THIS % REF_COUNT == 0 ) THEN WRITE(*,*) 'Finalizing MY_TYPE' IF ( ASSOCIATED( THIS % ARR ) ) THEN WRITE(*,*) 'Finalizing: ', THIS % ARR DEALLOCATE( THIS % ARR ) END IF DEALLOCATE( THIS % REF_COUNT ) END IF END IF END SUBROUTINE ! Constructor FUNCTION NEW_MY_TYPE( ) RESULT( NEW ) TYPE(MY_TYPE) :: NEW ALLOCATE( NEW % REF_COUNT ) NEW % REF_COUNT = 1 write (*,*) 'In NEW_MY_TYPE %LOC(NEW) =',%LOC(NEW) END FUNCTION ! Accessors SUBROUTINE SET_ARR( THIS, ARR ) CLASS(MY_TYPE) :: THIS REAL, DIMENSION(:) :: ARR ALLOCATE( THIS % ARR( SIZE( ARR ) ) ) THIS % ARR(:) = ARR(:) END SUBROUTINE FUNCTION GET_ARR( THIS ) RESULT( ARR ) CLASS(MY_TYPE) :: THIS REAL, DIMENSION(:), POINTER :: ARR ARR => THIS % ARR END FUNCTION END MODULE SUBROUTINE TEST_SUB USE TEST_MOD IMPLICIT NONE TYPE(MY_TYPE) :: OBJ, OBJ2 REAL, POINTER :: ARR(:) write(*,*) 'Creating new instance' OBJ = NEW_MY_TYPE( ) !<---- Function result value is not finalized after assignment write(*,*) 'Finished creating new instance' CALL OBJ % SET_ARR( [ 1.0, 2.0, 3.0 ] ) write(*,*) 'New reference begin' OBJ2 = OBJ write(*,*) 'New reference end' ARR => OBJ % GET_ARR() WRITE(*,*) ARR END SUBROUTINE PROGRAM TEST CALL TEST_SUB END PROGRAM [/fxfortran]
Then build it:
[root@NHM02 problem_report]# ifort -g -check -assume realloc_lhs -warn ref_count.f90
[root@NHM02 problem_report]# inspxe-cl -collect mi3 -- ./a.out
Used suppression file(s): []
Creating new instance
In NEW_MY_TYPE %LOC(NEW) = 140736338714992
In DISPOSE %LOC(THIS) = 140736338714832
In defined assignment subroutine
Reference count is: 2
In DISPOSE %LOC(THIS) = 140736338714992
ref_count = 1
Finished creating new instance
New reference begin
In DISPOSE %LOC(THIS) = 140736338714912
In defined assignment subroutine
Reference count is: 2
New reference end
1.000000 2.000000 3.000000
In DISPOSE %LOC(THIS) = 140736338714832
ref_count = 1
In DISPOSE %LOC(THIS) = 140736338714912
ref_count = 0
Finalizing MY_TYPE
Finalizing: 1.000000 2.000000 3.000000
0 new problem(s) found
Regards, Peter
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for looking into this.
Unfortunately, the work-around is so easy for me that I have not found time to try to come up with a reproducer. It is good to know your test case is handled well though - if/when I get time to look again at this issue, I'll be sure to update this thread.
Unfortunately, the work-around is so easy for me that I have not found time to try to come up with a reproducer. It is good to know your test case is handled well though - if/when I get time to look again at this issue, I'll be sure to update this thread.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yeah, just a reminder - please use latest ifort 12.3 or above,with Inspector XE 2011 Update 1.
It's better that you can provide me a simple test case to reproduce this problem. Thank you.
It's better that you can provide me a simple test case to reproduce this problem. Thank you.
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