[CIG-SEISMO] BG/P support for SPECFEM3d

Dimitri Komatitsch dimitri.komatitsch at univ-pau.fr
Wed Mar 3 10:06:16 PST 2010


Dear all,

Please also note that we will release a much faster,
brand new version (version 5.0.0) in a few days, which
runs up to twice faster on some machines. Therefore I suggest you 
upgrade to that version as soon as it is released
(probably tomorrow or on Friday).

Best regards,
Dimitri.

Dimitri Komatitsch wrote:
> 
> Dear all,
> 
> I agree, the problem comes from the fact that the code is compiled
> on a frontend machine that cannot run the executable code, and we need
> "xcreate_header_file" to be able to run on the machine on which we compile.
> 
> I see two options:
> 
> 1/ if the xlf compiler is also installed on the Blue Gene nodes,
> create a script that runs "make all" on one node instead of on the frontend
> 
> 2/ otherwise, this will work:
> 
> - create two copies of the Makefile:
> 
> mv Makefile Makefile1
> cp Makefile1 Makefile2
> 
> In Makefile1 put this instead of the current values:
> 
> FLAGS_CHECK = -O0
> FLAGS_NO_CHECK = -O0
> 
> and replace
> 
> create_header_file: $O/program_create_header_file.o $(LIBSPECFEM)
>  ${FCCOMPILE_CHECK} -o xcreate_header_file 
> $O/program_create_header_file.o $(LIBSPECFEM)
> 
> with
> 
> create_header_file: $O/program_create_header_file.o $O/exit_mpi.o 
> $(LIBSPECFEM)
>   ${MPIFCCOMPILE_CHECK} -o xcreate_header_file 
> $O/program_create_header_file.o $O/exit_mpi.o $(LIBSPECFEM)
> 
> In Makefile2 comment out these two lines:
> 
> #OUTPUT_FILES/values_from_mesher.h: xcreate_header_file
> # ./xcreate_header_file
> 
> 
> Then:
> 
>  make -f Makefile1 clean
>  make -f Makefile1 create_header_file
>  ./xcreate_header_file
>  make -f Makefile2 clean
>  make -f Makefile2 meshfem3D
>  make -f Makefile2 specfem3D
> 
> should work.
> 
> I am going to cut and paste this in the user manual.
> (or maybe change the "configure" script)
> 
> Best regards,
> Dimitri.
> 
> 
> Peter Danecek wrote:
>> On 27 Feb 2010, at 09:37, Mark Cheeseman wrote:
>>
>>> Sorry, I forgot to include the error messages I receive:
>>>
>>> When I first try to compile with the IBM XLF90 compiler, I first get  
>>> the error message about the xcreate_header_file binary
>>>
>>> 1501-510  Compilation successful for file exit_mpi.f90.
>>> mpixlf90  -O3 -qsave -qstrict -qtune=450 -qarch=450d -qfree=f90 - 
>>> qsuffix=f=f90 -qhalt=e -qsigtrap - qinitauto 
>>> =7Fswap_all,mxm_m1_m2_5points,mxm_m1_m1_5points,mxm_m2_m1_5points -C  
>>> -qddim -qfloat=nans -qfullpath -o xmeshfem3D j/exit_mpi.o obj/ 
>>> libspecfem.a
>>> mkdir -p OUTPUT_FILES
>>> ./xcreate_header_file
>>> make: *** [OUTPUT_FILES/values_from_mesher.h] Illegal instruction
>>>
>>> Running the ./xcreate_header_file seems to work fine with the  
>>> required header file being generated in the OUTPUT_FILES  
>>> subdirectory.  Next, I comment out the call to the  
>>> xcreate_header_file binary in the main Makefile and rerun make.  The  
>>> result is a large number of error messages about zero-sized arrays  
>>> in the following source code files
>>>
>>>     compute_forces_crust_mantle.f90
>>>     compute_forces_inner_core.f90
>>>     compute_forces_outer_core.f90
>>>     write_movie_volume.f90
>>>
>>> with the error messages being
>>> .
>>> .
>>> "./write_movie_volume.f90", line 425.14: 1511-013 (W) The value of  
>>> the DO-loop increment should be negative when initial value is  
>>> greater than the terminal value.
>>> "./write_movie_volume.f90", line 429.12: 1516-152 (S) Zero-sized  
>>> arrays must not be subscripted.
>>> "./write_movie_volume.f90", line 431.18: 1516-152 (S) Zero-sized  
>>> arrays must not be subscripted.
>>> "./write_movie_volume.f90", line 432.28: 1516-152 (S) Zero-sized  
>>> arrays must not be subscripted.
>>> ** write_movie_volume_vector   === End of Compilation 4 ===
>>> "./write_movie_volume.f90", line 495.16: 1511-013 (W) The value of  
>>> the DO-loop increment should be negative when initial value is  
>>> greater than the terminal value.
>>> "./write_movie_volume.f90", line 502.52: 1516-152 (S) Zero-sized  
>>> arrays must not be subscripted.
>>> ** write_movie_volume_divcurl   === End of Compilation 5 ===
>>> 1501-511  Compilation failed for file write_movie_volume.f90.
>>> .
>>> .
>>> .
>>> The actual offending parameters (after some tracking) are those  
>>> defined in the header file
>>>
>>>     ./OUTPUT_FILES/values_from_mesher.h
>>>
>>> and include
>>>
>>>    NSPEC_CRUST_MANTLE, NSPEC_OUTER_CORE, NSPEC_INNER_CORE
>>>
>>> It looks like I am missing an important configuration step or  
>>> datafile.  Any assistance would be greatly appreciated.
>>>
>>
>>
>> Hi Mark,
>>
>> The xcreate_header_file executable is used to create some header file  
>> (values_from_mesher.h) which otherwise would be created by the mesher  
>> exec. But in contrast to the mesher itself, it does not need to be 
>> run  in parallel though the queuing system. Instead 
>> xcreate_header_file  calculates/estimates the size of several arrays 
>> immediately and can be  executed during compilation process.
>>
>>  From what you are writing, i would guess as well that the problem  
>> arrises from the cross compiler environment. The xcreate_header_file  
>> binary is created for the target machine, but executed on the  
>> compiling machine itself. That's why the makefile fails. So you could  
>> try two things:
>>
>> (1) compile the xcreate_header_file exec for the local compiling  
>> machine (not with the cross compiler) to generate the  
>> values_from_mesher.h header file during compilation. You probably 
>> need  to compile some dependences too and it is probably not straight  
>> forward to get the Makefile working properly.
>> NOTE: I am not very sure to which extend architectural differences  
>> will influences the resulting estimates in values_from_mesher.h file.  
>> So be careful with this approach.
>>
>> (2) use the more conservative way: First (cross-)compile the mesher  
>> executable only (make target: meshfem3D) and run it through the queue  
>> system. Than use the generated values_from_mesher.h file to compile  
>> the solver (make target: specfem3D) .
>>
>> Running xcreate_header_file through the queue system (serial job) --  
>> as I understand you have tried -- might also work, though I do not 
>> see  any benefits with respect to approach (2). From the error 
>> messages,  however, it looks like the generated  values_from_mesher.h 
>> is not  valid or incomplete. Check if the content looks reasonable. 
>> (does the  execution really complete correctly, is your Par_file 
>> reasonable)
>>
>> An other problem might arrise from running the ./configure script (on  
>> the compiling machine, i suppose). To my understanding this should  
>> fail for the same reason the xcreate_... binary does, or at best give  
>> results relative to the compiling machine and not relative to the  
>> target machine. You might want to check this.
>>
>> In conclusion I would suggest you:
>> - check if your configure really work fine, and if the results are  
>> relative to the target machine
>> - check your configuration in Par_file
>> - recompile the mesher (make meshfem3D)
>> - run it
>> - check and copy the values_from_mesher.h file
>> - compile the solver
>>
>> Hope this could be helpful ....
>> ~petr
>>
>>
>> ---------------------------------------------------------
>> Peter Danecek, PhD -- Ricercatore
>> Istituto Nazionale di Geofisica e Vulcanologia (INGV)
>> Sezione di Bologna
>> via Donato Creti, 12, I-40128 Bologna
>>
>> tel: (+39) 051 4151-458
>> fax: (+39) 051 4151-499
>> ---------------------------------------------------------
>>
>> _______________________________________________
>> CIG-SEISMO mailing list
>> CIG-SEISMO at geodynamics.org
>> http://geodynamics.org/cgi-bin/mailman/listinfo/cig-seismo
>>
> 

-- 
Dimitri Komatitsch - dimitri.komatitsch aT univ-pau.fr
Professor, University of Pau, Institut universitaire de France,
CNRS and INRIA Magique3D, France   http://www.univ-pau.fr/~dkomati1


More information about the CIG-SEISMO mailing list