Beispiel #1
0
def check_force_gemv_init():
    if check_force_gemv_init._force_init_beta is None:
        from theano.gof.cmodule import GCC_compiler
        """
        Test issue 1569.
        Namely when evaluating

            beta*y + alpha*dot(A, x)

        where we set y * beta = zeros of the correct dimensions we
        do not actually set y = zeros and instead let the BLAS
        perform beta*y with uninitialized memory for
        speed. Occasionally the memory contains values that are
        equivalent to NaN in which case the product beta*y contains
        NaN's for correctly implemented BLAS libraries. In this
        situation, since we are introducing the NaN's, we need to test
        whether the BLAS performs correctly. If it *does*, i.e. it
        actually performs the multiplication beta*y which will result
        in NaN's in the result, then we need intialize the memory to
        zeros.
        """
        test_code = """
#include <math.h>
extern "C" void dgemv_(char*, const int*, const int*, const double *, const double *, const int*, const double *, const int*, const double *, double *, const int *);
int main() {
  double A[2][2] = {{1., 1.}, {1., 1.}};
  double x[2] = {1., 1.};
  double y[2] = {NAN, NAN};
  const int s = 2;
  const int inc = 1;
  const double alpha = 1.0;
  const double beta = 0.0;

  dgemv_("T", &s, &s, &alpha, A, &s, x, &inc, &beta, &y, &inc);

  return (isnan(y[0]) || isnan(y[1]) ? 1 : 0;
}
"""
        res = GCC_compiler.try_compile_tmp(test_code, tmp_prefix='check_beta_',
                                           flags=ldflags(libs=True, flags=True,
                                                         libs_dir=True),
                                           try_run=True)
        if res:
            if res[0]:
                check_force_gemv_init._force_init_beta = res[1]
            else:
                check_force_gemv_init._force_init_beta = False
        else:
            check_force_gemv_init._force_init_beta = False

    return check_force_gemv_init._force_init_beta
Beispiel #2
0
 def c_header_dirs(self):
     return ldflags(libs=False, include_dir=True)
Beispiel #3
0
 def c_lib_dirs(self):
     return ldflags(libs=False, libs_dir=True)
Beispiel #4
0
 def c_compile_args(self):
     compile_args = ldflags(libs=False, flags=True)
     compile_args += super(BaseCorrMM, self).c_compile_args()
     return compile_args
Beispiel #5
0
 def c_libraries(self):
     return ldflags()
Beispiel #6
0
 def c_compile_args(self):
     return ldflags(libs=False, flags=True)
Beispiel #7
0
 def c_compile_args(self):
     flags =  ldflags(libs=False, flags=True)
     flags.append('-Werror')
     return flags
Beispiel #8
0
 def c_libraries(self):
     return blas.ldflags()
Beispiel #9
0
 def c_libraries(self):
     return ldflags()
Beispiel #10
0
 def c_compile_args(self):
     compile_args = ldflags(libs=False, flags=True)
     compile_args += super(MKLOp, self).c_compile_args()
     return compile_args
Beispiel #11
0
 def c_header_dirs(self):
     return ldflags(libs=False, include_dir=True)
Beispiel #12
0
 def c_lib_dirs(self):
     return ldflags(libs=False, libs_dir=True)
Beispiel #13
0
 def c_compile_args(self):
     return ldflags(libs=False, flags=True)
Beispiel #14
0
 def c_compile_args(self):
     compile_args = ldflags(libs=False, flags=True)
     compile_args += super(Concatenate, self).c_compile_args()
     return compile_args
Beispiel #15
0
 def c_compile_args(self):
     compile_args = ldflags(libs=False, flags=True)
     compile_args += super(BaseCorrMM, self).c_compile_args()
     return compile_args