Esempio n. 1
0
    def compile_args():
        """
        This args will be received by compile_str() in the preargs paramter.
        They will also be included in the "hard" part of the key module.
        """
        flags = [flag for flag in config.nvcc.flags.split(' ') if flag]
        if config.nvcc.fastmath:
            flags.append('-use_fast_math')
        cuda_ndarray_cuh_hash = hash_from_file(
            os.path.join(os.path.split(__file__)[0], 'cuda_ndarray.cuh'))
        flags.append('-DCUDA_NDARRAY_CUH=' + cuda_ndarray_cuh_hash)

        # We compile cuda_ndarray.cu during import.
        # We should not add device properties at that time.
        # As the device is not selected yet!
        # TODO: compile cuda_ndarray when we bind to a GPU?
        import theano.sandbox.cuda
        if hasattr(theano.sandbox, 'cuda'):
            n = theano.sandbox.cuda.use.device_number
            if n is None:
                _logger.warn("We try to get compilation arguments for CUDA"
                             " code, but the GPU device is not initialized."
                             " This is probably caused by an Op that work on"
                             " the GPU that don't inherit from GpuOp."
                             " We Initialize the GPU now.")
                theano.sandbox.cuda.use("gpu",
                                        force=True,
                                        default_to_move_computation_to_gpu=False,
                                        move_shared_float32_to_gpu=False,
                                        enable_cuda=False)
                n = theano.sandbox.cuda.use.device_number

            p = theano.sandbox.cuda.device_properties(n)
            flags.append('-arch=sm_' + str(p['major']) + str(p['minor']))
        return flags
Esempio n. 2
0
    def compile_args():
        """
        This args will be received by compile_str() in the preargs paramter.
        They will also be included in the "hard" part of the key module.
        """
        flags = [flag for flag in config.nvcc.flags.split(" ") if flag]
        if config.nvcc.fastmath:
            flags.append("-use_fast_math")
        cuda_ndarray_cuh_hash = hash_from_file(os.path.join(os.path.split(__file__)[0], "cuda_ndarray.cuh"))
        flags.append("-DCUDA_NDARRAY_CUH=" + cuda_ndarray_cuh_hash)

        # NumPy 1.7 Deprecate the old API. I updated most of the places
        # to use the new API, but not everywhere. When finished, enable
        # the following macro to assert that we don't bring new code
        # that use the old API.
        flags.append("-D NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION")

        # numpy 1.7 deprecated the following macro but the didn't
        # existed in the past
        numpy_ver = [int(n) for n in numpy.__version__.split(".")[:2]]
        if bool(numpy_ver < [1, 7]):
            flags.append("-D NPY_ARRAY_ENSURECOPY=NPY_ENSURECOPY")
            flags.append("-D NPY_ARRAY_ALIGNED=NPY_ALIGNED")
            flags.append("-D NPY_ARRAY_WRITEABLE=NPY_WRITEABLE")
            flags.append("-D NPY_ARRAY_UPDATE_ALL=NPY_UPDATE_ALL")
            flags.append("-D NPY_ARRAY_C_CONTIGUOUS=NPY_C_CONTIGUOUS")
            flags.append("-D NPY_ARRAY_F_CONTIGUOUS=NPY_F_CONTIGUOUS")

        # If the user didn't specify architecture flags add them
        if not any(["-arch=sm_" in f for f in flags]):
            # We compile cuda_ndarray.cu during import.
            # We should not add device properties at that time.
            # As the device is not selected yet!
            # TODO: re-compile cuda_ndarray when we bind to a GPU?
            import theano.sandbox.cuda

            if hasattr(theano.sandbox, "cuda"):
                n = theano.sandbox.cuda.use.device_number
                if n is None:
                    _logger.warn(
                        "We try to get compilation arguments for CUDA"
                        " code, but the GPU device is not initialized."
                        " This is probably caused by an Op that work on"
                        " the GPU that don't inherit from GpuOp."
                        " We Initialize the GPU now."
                    )
                    theano.sandbox.cuda.use(
                        "gpu",
                        force=True,
                        default_to_move_computation_to_gpu=False,
                        move_shared_float32_to_gpu=False,
                        enable_cuda=False,
                    )
                    n = theano.sandbox.cuda.use.device_number
                p = theano.sandbox.cuda.device_properties(n)
                flags.append("-arch=sm_" + str(p["major"]) + str(p["minor"]))

        return flags
Esempio n. 3
0
    def compile_args():
        """
        This args will be received by compile_str() in the preargs paramter.
        They will also be included in the "hard" part of the key module.
        """
        flags = [flag for flag in config.nvcc.flags.split(' ') if flag]
        if config.nvcc.fastmath:
            flags.append('-use_fast_math')
        cuda_ndarray_cuh_hash = hash_from_file(
            os.path.join(os.path.split(__file__)[0], 'cuda_ndarray.cuh'))
        flags.append('-DCUDA_NDARRAY_CUH=' + cuda_ndarray_cuh_hash)

        # NumPy 1.7 Deprecate the old API. I updated most of the places
        # to use the new API, but not everywhere. When finished, enable
        # the following macro to assert that we don't bring new code
        # that use the old API.
        flags.append("-D NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION")

        # numpy 1.7 deprecated the following macro but the didn't
        # existed in the past
        numpy_ver = [int(n) for n in numpy.__version__.split('.')[:2]]
        if bool(numpy_ver < [1, 7]):
            flags.append("-D NPY_ARRAY_ENSURECOPY=NPY_ENSURECOPY")
            flags.append("-D NPY_ARRAY_ALIGNED=NPY_ALIGNED")
            flags.append("-D NPY_ARRAY_WRITEABLE=NPY_WRITEABLE")
            flags.append("-D NPY_ARRAY_UPDATE_ALL=NPY_UPDATE_ALL")
            flags.append("-D NPY_ARRAY_C_CONTIGUOUS=NPY_C_CONTIGUOUS")
            flags.append("-D NPY_ARRAY_F_CONTIGUOUS=NPY_F_CONTIGUOUS")

        # If the user didn't specify architecture flags add them
        if not any(['-arch=sm_' in f for f in flags]):
            # We compile cuda_ndarray.cu during import.
            # We should not add device properties at that time.
            # As the device is not selected yet!
            # TODO: re-compile cuda_ndarray when we bind to a GPU?
            import theano.sandbox.cuda
            if hasattr(theano.sandbox, 'cuda'):
                n = theano.sandbox.cuda.use.device_number
                if n is None:
                    _logger.warn(
                        "We try to get compilation arguments for CUDA"
                        " code, but the GPU device is not initialized."
                        " This is probably caused by an Op that work on"
                        " the GPU that don't inherit from GpuOp."
                        " We Initialize the GPU now.")
                    theano.sandbox.cuda.use(
                        "gpu",
                        force=True,
                        default_to_move_computation_to_gpu=False,
                        move_shared_float32_to_gpu=False,
                        enable_cuda=False)
                    n = theano.sandbox.cuda.use.device_number
                p = theano.sandbox.cuda.device_properties(n)
                flags.append('-arch=sm_' + str(p['major']) +
                             str(p['minor']))

        return flags
Esempio n. 4
0
 def compile_args():
     """
     This args will be received by compile_str() in the preargs paramter.
     They will also be included in the "hard" part of the key module.
     """
     flags = [flag for flag in config.nvcc.flags.split(" ") if flag]
     if config.nvcc.fastmath:
         flags.append("-use_fast_math")
     cuda_ndarray_cuh_hash = hash_from_file(os.path.join(os.path.split(__file__)[0], "cuda_ndarray.cuh"))
     flags.append("-DCUDA_NDARRAY_CUH=" + cuda_ndarray_cuh_hash)
     return flags
Esempio n. 5
0
 def compile_args():
     """
     This args will be received by compile_str() in the preargs paramter.
     They will also be included in the "hard" part of the key module.
     """
     flags = [flag for flag in config.nvcc.flags.split(' ') if flag]
     if config.nvcc.fastmath:
         flags.append('-use_fast_math')
     cuda_ndarray_cuh_hash = hash_from_file(
         os.path.join(os.path.split(__file__)[0], 'cuda_ndarray.cuh'))
     flags.append('-DCUDA_NDARRAY_CUH=' + cuda_ndarray_cuh_hash)
     return flags