Peter Jacobs
Posted in reply to Nicholas Wilson
| On Monday, 12 August 2019 at 04:01:28 UTC, Nicholas Wilson wrote:
> On Monday, 12 August 2019 at 01:45:24 UTC, Peter Jacobs wrote:
>> We have a flow simulation code (http://cfcfd.mechmining.uq.edu.au/eilmer/) that fails to build optimized with DMD v2.087.0 or v2.087.1. The cryptic message at the end of the attempt to build is:
>> tym = x14
>> makefile:414: recipe for target 'e4shared' failed
>> make: *** [e4shared] Illegal instruction (core dumped)
>> and the compiler flags are:
>> dmd -w -O -release -inline -boundscheck=off -dip1008 ...
>>
>> The build is successful if we omit the -O flag.
>>
>> In contrast, we have successful optimized builds for DMD 2.086.1 and LDC 1.17.0-beta1.
>>
>> I can provide more details but I was thinking that the "tym = x14" might already mean something to someone familiar with the insides of DMD.
>>
>> Best regards,
>> Peter J.
>
> That looks like https://github.com/dlang/dmd/blob/eda232a9f72b482c92cefb27a4321afc0aedbb5c/src/dmd/backend/cgxmm.d#L816-L817 or https://github.com/dlang/dmd/blob/eda232a9f72b482c92cefb27a4321afc0aedbb5c/src/dmd/backend/cgxmm.d#L716-L717 (or maybe https://github.com/dlang/dmd/blob/8623bbbebe35b9a320ba20e521a6c0ee51a780ac/src/dmd/backend/evalu8.d#L905 )
>
> Can you run it in a debugger and provide a stack trace to confirm?
>
> tym = 0x14 corresponds to real (== 80 bit fp), which is best avoided if possible as it is very slow.
>
> Also, silly question, why would you use DMD, with optimisations, for cfd? surely your productivity is runtime bottlenecked?
Nicholas, thank you for looking. Below is the transcript of compiling from within gdb.
peterj@helmholtz ~/dgd/src/eilmer $ make FLAVOUR=fast
sed -e 's/PUT_REVISION_STRING_HERE/23bdf96ea6d1+ 2522+ default tip/' main.d > \
main_with_rev_string.d
gdb --args dmd -w -O -release -inline -boundscheck=off -version=flavour_fast -dip1008 -I.. -I../nm -I../util -I../geom -I../grid_utils -I../extern/gzip -version=multi_species_gas -version=multi_T_gas -version=MHD -version=komega -ofe4shared \
-version=tecplot_unavailable \
main_with_rev_string.d \
simcore.d fileutil.d json_helper.d fvcore.d fvcell.d fvvertex.d fvinterface.d fluxcalc.d onedinterp.d flowgradients.d lsqinterp.d limiters.d conservedquantities.d flowstate.d globalconfig.d globaldata.d fluidblock.d sfluidblock.d ufluidblock.d gas_solid_interface.d flowsolution.d grid_motion.d shock_fitting_moving_grid.d history.d loads.d special_block_init.d mass_diffusion.d tecplot_writer.d luaglobalconfig.d lua_helper.d luaflowsolution.d luaflowstate.d user_defined_source_terms.d postprocess.d \
bc/package.d bc/boundary_condition.d bc/ghost_cell_effect/package.d bc/ghost_cell_effect/ghost_cell.d bc/ghost_cell_effect/internal_copy_then_reflect.d bc/ghost_cell_effect/flow_state_copy.d bc/ghost_cell_effect/flow_state_copy_from_profile.d bc/ghost_cell_effect/extrapolate_copy.d bc/ghost_cell_effect/fixed_p.d bc/ghost_cell_effect/fixed_pt.d bc/ghost_cell_effect/from_stagnation.d bc/ghost_cell_effect/full_face_copy.d bc/ghost_cell_effect/mapped_cell_copy.d bc/user_defined_effects.d bc/boundary_flux_effect.d bc/boundary_cell_effect.d bc/boundary_interface_effect.d solid/solidbc.d solid/solidblock.d solid/solid_boundary_flux_effect.d solid/solid_boundary_interface_effect.d solid/solid_loose_coupling_update.d solid/ssolidblock.d solid/solidfvcell.d solid/solidfvinterface.d solid/solidfvvertex.d solid/solidprops.d solid/solidsolution.d solid/solid_udf_source_terms.d solid/luasolidprops.d ../geom/package.d ../geom/geometry_exception.d ../geom/elements/package.d ../geom/elements/nomenclature.d ../geom/elements/vector3.d ../geom/elements/properties.d ../geom/elements/projection.d ../geom/gpath/package.d ../geom/gpath/path.d ../geom/gpath/line.d ../geom/gpath/arc.d ../geom/gpath/helix.d ../geom/gpath/bezier.d ../geom/gpath/polynomial.d ../geom/gpath/polyline.d ../geom/gpath/svgpath.d ../geom/gpath/modifiedpath.d ../geom/gpath/gpath_utils.d ../geom/surface/package.d ../geom/surface/parametricsurface.d ../geom/surface/coonspatch.d ../geom/surface/aopatch.d ../geom/surface/channelpatch.d ../geom/surface/sweptpathpatch.d ../geom/surface/meshpatch.d ../geom/surface/subrangedsurface.d ../geom/surface/bezierpatch.d ../geom/surface/beziertrianglepatch.d ../geom/volume/package.d ../geom/volume/parametricvolume.d ../geom/volume/tfivolume.d ../geom/volume/slabvolume.d ../geom/volume/wedgevolume.d ../geom/volume/sweptsurfacevolume.d ../geom/volume/twosurfacevolume.d ../geom/volume/meshvolume.d ../geom/volume/subrangedvolume.d ../geom/grid/package.d ../geom/grid/grid.d ../geom/grid/sgrid.d ../geom/grid/usgrid.d ../geom/grid/paver.d ../geom/grid/paver2d.d ../geom/misc/package.d ../geom/misc/univariatefunctions.d ../geom/misc/svg.d ../geom/misc/sketch.d ../geom/luawrap/package.d ../geom/luawrap/luaunifunction.d ../geom/luawrap/luageom.d ../geom/luawrap/luagpath.d ../geom/luawrap/luagpath_utils.d ../geom/luawrap/luasurface.d ../geom/luawrap/luavolume.d ../geom/luawrap/luagrid.d ../geom/luawrap/luasgrid.d ../geom/luawrap/luausgrid.d ../geom/luawrap/luasketch.d ../grid_utils/grid_deform.d \
../gas/package.d ../gas/co2gas.d ../gas/co2gas_sw.d ../gas/gas_model.d ../gas/gas_state.d ../gas/init_gas_model.d ../gas/ideal_gas.d ../gas/ideal_helium.d ../gas/cubic_gas.d ../gas/cea_gas.d ../gas/physical_constants.d ../gas/sf6virial.d ../gas/therm_perf_gas.d ../gas/very_viscous_air.d ../gas/uniform_lut.d ../gas/uniform_lut_plus_ideal.d ../gas/adaptive_lut_CEA.d ../gas/ideal_air_proxy.d ../gas/powers_aslam_gas.d ../gas/two_temperature_reacting_argon.d ../gas/ideal_dissociating_gas.d ../gas/two_temperature_air.d ../gas/two_temperature_nitrogen.d ../gas/vib_specific_nitrogen.d ../gas/fuel_air_mix.d ../gas/equilibrium_gas.d ../gas/ideal_air_fortran.o ../gas/steam.d ../gas/pseudo_species_gas.d ../gas/pseudo_species.d ../gas/electronically_specific_gas.d ../gas/electronic_species.d ../gas/two_temperature_gasgiant.d ../gas/thermo/cea_thermo_curves.d ../gas/thermo/evt_eos.d ../gas/thermo/perf_gas_mix_eos.d ../gas/thermo/pvt_eos.d ../gas/thermo/therm_perf_gas_mix_eos.d ../gas/diffusion/cea_therm_cond.d ../gas/diffusion/cea_viscosity.d ../gas/diffusion/chemkin_therm_cond.d ../gas/diffusion/chemkin_viscosity.d ../gas/diffusion/sutherland_therm_cond.d ../gas/diffusion/sutherland_viscosity.d ../gas/diffusion/therm_cond.d ../gas/diffusion/viscosity.d ../gas/diffusion/wilke_mixing_therm_cond.d ../gas/diffusion/wilke_mixing_viscosity.d ../gas/diffusion/gasgiant_transport_properties.d ../extern/gzip/gzip.d \
../util/lua.d ../util/lua_service.d ../util/msg_service.d ../nm/package.d ../nm/number.d ../nm/complex.d ../nm/bbla.d ../nm/bdfLU.d ../nm/bracketing.d ../nm/brent.d ../nm/gaussquad.d ../nm/linesearch.d ../nm/nelmin.d ../nm/newtoncotes.d ../nm/ridder.d ../nm/rungekutta.d ../nm/rsla.d ../nm/smla.d ../nm/tree_patch.d ../nm/univariate_lut.d \
../kinetics/package.d ../kinetics/thermochemical_reactor.d ../kinetics/init_thermochemical_reactor.d ../kinetics/chemistry_update.d ../kinetics/electronic_update.d ../kinetics/electronically_specific_kinetics.d ../kinetics/ideal_dissociating_gas_kinetics.d ../kinetics/fuel_air_mix_kinetics.d ../kinetics/powers_aslam_kinetics.d ../kinetics/rate_constant.d ../kinetics/reaction.d ../kinetics/reaction_mechanism.d ../kinetics/two_temperature_air_kinetics.d ../kinetics/two_temperature_argon_kinetics.d ../kinetics/two_temperature_nitrogen_kinetics.d ../kinetics/vib_specific_nitrogen_kinetics.d ../kinetics/two_temperature_gasgiant_kinetics.d ../gas/luagas_model.d ../kinetics/luathermochemical_reactor.d ../kinetics/luachemistry_update.d ../kinetics/luaelectronically_specific_kinetics.d ../kinetics/luareaction_mechanism.d ../kinetics/luatwo_temperature_air_kinetics.d ../kinetics/luavib_specific_nitrogen_kinetics.d \
../gasdyn/gasflowexception.d ../gasdyn/idealgasflow.d ../gasdyn/luaidealgasflow.d ../gasdyn/gasflow.d ../gasdyn/luagasflow.d ../nm/luabbla.d \
-L-L../../extern/lua-5.1.4/lib -L-llua -L-ldl
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from dmd...(no debugging symbols found)...done.
(gdb) run
Starting program: /usr/bin/dmd -w -O -release -inline -boundscheck=off -version=flavour_fast -dip1008 -I.. -I../nm -I../util -I../geom -I../grid_utils -I../extern/gzip -version=multi_species_gas -version=multi_T_gas -version=MHD -version=komega -ofe4shared -version=tecplot_unavailable main_with_rev_string.d simcore.d fileutil.d json_helper.d fvcore.d fvcell.d fvvertex.d fvinterface.d fluxcalc.d onedinterp.d flowgradients.d lsqinterp.d limiters.d conservedquantities.d flowstate.d globalconfig.d globaldata.d fluidblock.d sfluidblock.d ufluidblock.d gas_solid_interface.d flowsolution.d grid_motion.d shock_fitting_moving_grid.d history.d loads.d special_block_init.d mass_diffusion.d tecplot_writer.d luaglobalconfig.d lua_helper.d luaflowsolution.d luaflowstate.d user_defined_source_terms.d postprocess.d bc/package.d bc/boundary_condition.d bc/ghost_cell_effect/package.d bc/ghost_cell_effect/ghost_cell.d bc/ghost_cell_effect/internal_copy_then_reflect.d bc/ghost_cell_effect/flow_state_copy.d bc/ghost_cell_effect/flow_state_copy_from_profile.d bc/ghost_cell_effect/extrapolate_copy.d bc/ghost_cell_effect/fixed_p.d bc/ghost_cell_effect/fixed_pt.d bc/ghost_cell_effect/from_stagnation.d bc/ghost_cell_effect/full_face_copy.d bc/ghost_cell_effect/mapped_cell_copy.d bc/user_defined_effects.d bc/boundary_flux_effect.d bc/boundary_cell_effect.d bc/boundary_interface_effect.d solid/solidbc.d solid/solidblock.d solid/solid_boundary_flux_effect.d solid/solid_boundary_interface_effect.d solid/solid_loose_coupling_update.d solid/ssolidblock.d solid/solidfvcell.d solid/solidfvinterface.d solid/solidfvvertex.d solid/solidprops.d solid/solidsolution.d solid/solid_udf_source_terms.d solid/luasolidprops.d ../geom/package.d ../geom/geometry_exception.d ../geom/elements/package.d ../geom/elements/nomenclature.d ../geom/elements/vector3.d ../geom/elements/properties.d ../geom/elements/projection.d ../geom/gpath/package.d ../geom/gpath/path.d ../geom/gpath/line.d ../geom/gpath/arc.d ../geom/gpath/helix.d ../geom/gpath/bezier.d ../geom/gpath/polynomial.d ../geom/gpath/polyline.d ../geom/gpath/svgpath.d ../geom/gpath/modifiedpath.d ../geom/gpath/gpath_utils.d ../geom/surface/package.d ../geom/surface/parametricsurface.d ../geom/surface/coonspatch.d ../geom/surface/aopatch.d ../geom/surface/channelpatch.d ../geom/surface/sweptpathpatch.d ../geom/surface/meshpatch.d ../geom/surface/subrangedsurface.d ../geom/surface/bezierpatch.d ../geom/surface/beziertrianglepatch.d ../geom/volume/package.d ../geom/volume/parametricvolume.d ../geom/volume/tfivolume.d ../geom/volume/slabvolume.d ../geom/volume/wedgevolume.d ../geom/volume/sweptsurfacevolume.d ../geom/volume/twosurfacevolume.d ../geom/volume/meshvolume.d ../geom/volume/subrangedvolume.d ../geom/grid/package.d ../geom/grid/grid.d ../geom/grid/sgrid.d ../geom/grid/usgrid.d ../geom/grid/paver.d ../geom/grid/paver2d.d ../geom/misc/package.d ../geom/misc/univariatefunctions.d ../geom/misc/svg.d ../geom/misc/sketch.d ../geom/luawrap/package.d ../geom/luawrap/luaunifunction.d ../geom/luawrap/luageom.d ../geom/luawrap/luagpath.d ../geom/luawrap/luagpath_utils.d ../geom/luawrap/luasurface.d ../geom/luawrap/luavolume.d ../geom/luawrap/luagrid.d ../geom/luawrap/luasgrid.d ../geom/luawrap/luausgrid.d ../geom/luawrap/luasketch.d ../grid_utils/grid_deform.d ../gas/package.d ../gas/co2gas.d ../gas/co2gas_sw.d ../gas/gas_model.d ../gas/gas_state.d ../gas/init_gas_model.d ../gas/ideal_ga---Type <return> to continue, or q <return> to quit---
s.d ../gas/ideal_helium.d ../gas/cubic_gas.d ../gas/cea_gas.d ../gas/physical_constants.d ../gas/sf6virial.d ../gas/therm_perf_gas.d ../gas/very_viscous_air.d ../gas/uniform_lut.d ../gas/uniform_lut_plus_ideal.d ../gas/adaptive_lut_CEA.d ../gas/ideal_air_proxy.d ../gas/powers_aslam_gas.d ../gas/two_temperature_reacting_argon.d ../gas/ideal_dissociating_gas.d ../gas/two_temperature_air.d ../gas/two_temperature_nitrogen.d ../gas/vib_specific_nitrogen.d ../gas/fuel_air_mix.d ../gas/equilibrium_gas.d ../gas/ideal_air_fortran.o ../gas/steam.d ../gas/pseudo_species_gas.d ../gas/pseudo_species.d ../gas/electronically_specific_gas.d ../gas/electronic_species.d ../gas/two_temperature_gasgiant.d ../gas/thermo/cea_thermo_curves.d ../gas/thermo/evt_eos.d ../gas/thermo/perf_gas_mix_eos.d ../gas/thermo/pvt_eos.d ../gas/thermo/therm_perf_gas_mix_eos.d ../gas/diffusion/cea_therm_cond.d ../gas/diffusion/cea_viscosity.d ../gas/diffusion/chemkin_therm_cond.d ../gas/diffusion/chemkin_viscosity.d ../gas/diffusion/sutherland_therm_cond.d ../gas/diffusion/sutherland_viscosity.d ../gas/diffusion/therm_cond.d ../gas/diffusion/viscosity.d ../gas/diffusion/wilke_mixing_therm_cond.d ../gas/diffusion/wilke_mixing_viscosity.d ../gas/diffusion/gasgiant_transport_properties.d ../extern/gzip/gzip.d ../util/lua.d ../util/lua_service.d ../util/msg_service.d ../nm/package.d ../nm/number.d ../nm/complex.d ../nm/bbla.d ../nm/bdfLU.d ../nm/bracketing.d ../nm/brent.d ../nm/gaussquad.d ../nm/linesearch.d ../nm/nelmin.d ../nm/newtoncotes.d ../nm/ridder.d ../nm/rungekutta.d ../nm/rsla.d ../nm/smla.d ../nm/tree_patch.d ../nm/univariate_lut.d ../kinetics/package.d ../kinetics/thermochemical_reactor.d ../kinetics/init_thermochemical_reactor.d ../kinetics/chemistry_update.d ../kinetics/electronic_update.d ../kinetics/electronically_specific_kinetics.d ../kinetics/ideal_dissociating_gas_kinetics.d ../kinetics/fuel_air_mix_kinetics.d ../kinetics/powers_aslam_kinetics.d ../kinetics/rate_constant.d ../kinetics/reaction.d ../kinetics/reaction_mechanism.d ../kinetics/two_temperature_air_kinetics.d ../kinetics/two_temperature_argon_kinetics.d ../kinetics/two_temperature_nitrogen_kinetics.d ../kinetics/vib_specific_nitrogen_kinetics.d ../kinetics/two_temperature_gasgiant_kinetics.d ../gas/luagas_model.d ../kinetics/luathermochemical_reactor.d ../kinetics/luachemistry_update.d ../kinetics/luaelectronically_specific_kinetics.d ../kinetics/luareaction_mechanism.d ../kinetics/luatwo_temperature_air_kinetics.d ../kinetics/luavib_specific_nitrogen_kinetics.d ../gasdyn/gasflowexception.d ../gasdyn/idealgasflow.d ../gasdyn/luaidealgasflow.d ../gasdyn/gasflow.d ../gasdyn/luagasflow.d ../nm/luabbla.d -L-L../../extern/lua-5.1.4/lib -L-llua -L-ldl
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
tym = x14
Program received signal SIGILL, Illegal instruction.
0x000000000081df07 in xmmload(unsigned int, bool) ()
(gdb) backtrace
#0 0x000000000081df07 in xmmload(unsigned int, bool) ()
#1 0x000000000080b13c in fixresult87(CodeBuilder&, elem*, unsigned int, unsigned int*) ()
#2 0x0000000000819362 in neg87(CodeBuilder&, elem*, unsigned int*) ()
#3 0x00000000008440b0 in cdneg(CodeBuilder&, elem*, unsigned int*) ()
#4 0x00000000008256fb in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#5 0x00000000008977d2 in cdcnvt(CodeBuilder&, elem*, unsigned int*) ()
#6 0x00000000008257e3 in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#7 0x00000000008977d2 in cdcnvt(CodeBuilder&, elem*, unsigned int*) ()
#8 0x00000000008257e3 in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#9 0x0000000000819324 in neg87(CodeBuilder&, elem*, unsigned int*) ()
#10 0x00000000008446e6 in cdabs(CodeBuilder&, elem*, unsigned int*) ()
#11 0x00000000008257e3 in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#12 0x00000000008977d2 in cdcnvt(CodeBuilder&, elem*, unsigned int*) ()
#13 0x00000000008257e3 in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#14 0x000000000081c949 in orthxmm(CodeBuilder&, elem*, unsigned int*) ()
#15 0x0000000000838805 in cdmul(CodeBuilder&, elem*, unsigned int*) ()
#16 0x00000000008257e3 in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#17 0x0000000000825b44 in scodelem(CodeBuilder&, elem*, unsigned int*, unsigned int, bool) ()
#18 0x000000000081cc7d in xmmeq(CodeBuilder&, elem*, unsigned int, elem*, elem*, unsigned int*) ()
#19 0x000000000088f57f in cdeq(CodeBuilder&, elem*, unsigned int*) ()
#20 0x00000000008257e3 in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#21 0x000000000081c949 in orthxmm(CodeBuilder&, elem*, unsigned int*) ()
#22 0x0000000000894d2b in cdcmp(CodeBuilder&, elem*, unsigned int*) ()
---Type <return> to continue, or q <return> to quit---
#23 0x00000000008257e3 in codelem(CodeBuilder&, elem*, unsigned int*, unsigned int) ()
#24 0x00000000008276d0 in logexp(CodeBuilder&, elem*, int, unsigned int, code*) ()
#25 0x0000000000847daa in outblkexitcode(CodeBuilder&, block*, int&, char const*, Symbol**, unsigned int) ()
#26 0x0000000000823854 in blcodgen(block*) ()
#27 0x00000000008214f0 in codgen(Symbol*) ()
#28 0x00000000007ee2ef in writefunc2(Symbol*) ()
#29 0x00000000007eddcf in writefunc(Symbol*) ()
#30 0x00000000007a6c2f in FuncDeclaration_toObjFile(FuncDeclaration*, bool) ()
#31 0x00000000007bb2e6 in toObjFile::ToObjFile::visit(FuncDeclaration*) ()
#32 0x000000000068d871 in FuncDeclaration::accept(Visitor*) ()
#33 0x00000000007bb271 in toObjFile(Dsymbol*, bool) ()
#34 0x00000000007a4dae in genObjFile(Module*, bool) ()
#35 0x0000000000709462 in _D3dmd4mars7tryMainFmPPxaKSQz7globals5ParamZi ()
#36 0x000000000070a6bc in D main ()
(gdb)
|