提交 034c9c37 authored 作者: Arnaud Bergeron's avatar Arnaud Bergeron

Fix default blas flag detection by reworking try_blas_flag.

上级 62eed15f
...@@ -289,8 +289,9 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in ...@@ -289,8 +289,9 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in
flags += ['-l%s' % l for l in ["mkl_core", flags += ['-l%s' % l for l in ["mkl_core",
"mkl_intel_thread", "mkl_intel_thread",
"mkl_rt"]] "mkl_rt"]]
if try_blas_flag(flags): res = try_blas_flag(flags)
return ' '.join(flags) if res:
return res
ret = ( ret = (
# TODO: the Gemm op below should separate the # TODO: the Gemm op below should separate the
...@@ -301,8 +302,10 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in ...@@ -301,8 +302,10 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in
['-L%s' % l for l in blas_info.get('library_dirs', [])] + ['-L%s' % l for l in blas_info.get('library_dirs', [])] +
['-l%s' % l for l in blas_info.get('libraries', [])] + ['-l%s' % l for l in blas_info.get('libraries', [])] +
blas_info.get('extra_link_args', [])) blas_info.get('extra_link_args', []))
if try_blas_flag(ret): res = try_blas_flag(ret)
return ' '.join(ret) if res:
return res
# Try to add the anaconda lib directory to runtime loading of lib. # Try to add the anaconda lib directory to runtime loading of lib.
# This fix some case with Anaconda 2.3 on Linux. # This fix some case with Anaconda 2.3 on Linux.
# Newer Anaconda still have this problem but only have # Newer Anaconda still have this problem but only have
...@@ -311,8 +314,9 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in ...@@ -311,8 +314,9 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in
and "linux" in sys.platform): and "linux" in sys.platform):
lib_path = os.path.join(sys.prefix, 'lib') lib_path = os.path.join(sys.prefix, 'lib')
ret.append('-Wl,-rpath,' + lib_path) ret.append('-Wl,-rpath,' + lib_path)
if try_blas_flag(ret): res = try_blas_flag(ret)
return ' '.join(ret) if res:
return res
except KeyError: except KeyError:
pass pass
...@@ -322,9 +326,7 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in ...@@ -322,9 +326,7 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in
# readily available. We try to see if that's the case, rather # readily available. We try to see if that's the case, rather
# than disable blas. To test it correctly, we must load a program. # than disable blas. To test it correctly, we must load a program.
# Otherwise, there could be problem in the LD_LIBRARY_PATH. # Otherwise, there could be problem in the LD_LIBRARY_PATH.
ret = try_blas_flag(['-lblas']) return try_blas_flag(['-lblas'])
if ret:
return ' '.join(ret)
def try_blas_flag(flags): def try_blas_flag(flags):
...@@ -344,15 +346,21 @@ def try_blas_flag(flags): ...@@ -344,15 +346,21 @@ def try_blas_flag(flags):
return 0; return 0;
} }
""") """)
flags.extend('-L' + d for d in theano.gof.cmodule.std_lib_dirs())
res = GCC_compiler.try_compile_tmp( res = GCC_compiler.try_compile_tmp(
test_code, tmp_prefix='try_blas_', test_code, tmp_prefix='try_blas_',
flags=flags, try_run=True) flags=flags, try_run=True)
# res[0]: shows successful compilation # res[0]: shows successful compilation
# res[1]: shows successful execution # res[1]: shows successful execution
if res and res[0] and res[1]: if res and res[0] and res[1]:
return flags return ' '.join(flags)
else: else:
# Retry adding '-L' flags which may be required
flags = flags + ['-L' + d for d in theano.gof.cmodule.std_lib_dirs()]
res = GCC_compiler.try_compile_tmp(
test_code, tmp_prefix='try_blas_',
flags=flags, try_run=True)
if res and res[0] and res[1]:
return ' '.join(flags)
return "" return ""
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论