Project

General

Profile

Bug #447

double-precision SSE build fails--calls to single-precision intrinsic functions

Added by Peter Kasson over 9 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
mdrun
Target version:
Affected version - extra info:
Affected version:
Difficulty:
uncategorized
Close

Description

Tested with CMake, double-precision on merlot (OS/X 10.6):
Build error:
Linking C executable mdrun
Undefined symbols:
"_genborn_allvsall_calc_chainrule_sse2_single", referenced from:
_calc_gb_forces in libmd.a(genborn.c.o)
"_genborn_allvsall_calc_hct_obc_radii_sse2_single", referenced from:
_calc_gb_rad in libmd.a(genborn.c.o)
"_genborn_allvsall_calc_still_radii_sse2_single", referenced from:
_calc_gb_rad in libmd.a(genborn.c.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status

genborn.c snippet:

#if ( defined(GMX_IA32_SSE) || defined(GMX_X86_64_SSE) || defined(GMX_SSE2) )
genborn_allvsall_calc_still_radii_sse2_single(fr,md,born,top,x0,cr,&fr->AllvsAll_workgb);
#else
genborn_allvsall_calc_still_radii(fr,md,born,top,x0,cr,&fr->AllvsAll_workgb);
#endif
inc_nrnb(nrnb,eNR_BORN_AVA_RADII_STILL,cnt);
}
else if(ir->gb_algorithm==egbHCT || ir->gb_algorithm==egbOBC) {
#if ( defined(GMX_IA32_SSE) || defined(GMX_X86_64_SSE) || defined(GMX_SSE2) )
genborn_allvsall_calc_hct_obc_radii_sse2_single(fr,md,born,ir->gb_algorithm,top,x0,cr,&fr->AllvsAll_workgb);
#else
genborn_allvsall_calc_hct_obc_radii(fr,md,born,ir->gb_algorithm,top,x0,cr,&fr->AllvsAll_workgb);
#endif

But genborn_allvsall_sse2_single is only for single precision:
#if ( (defined(GMX_IA32_SSE) || defined(GMX_X86_64_SSE) || defined(GMX_SSE2)) && !defined(GMX_DOUBLE) )

History

#1 Updated by Per Larsson over 9 years ago

Hi Peter

This was due to a #define DOUBLE-statement, that should really have been #define GMX_DOUBLE instead.
Not sure when this happend, I had #define GMX_DOUBLE locally, but anyway it is fixed now.

/Per

Also available in: Atom PDF