提交 ca0b81d9 authored 作者: James Bergstra's avatar James Bergstra

gpu Elemwise uses custom exception SupportCodeError

上级 87d414e4
...@@ -28,6 +28,10 @@ def get_str_list_logical_scalar(node, value_str='ii_i%i_value', data_str='ii_i%i ...@@ -28,6 +28,10 @@ def get_str_list_logical_scalar(node, value_str='ii_i%i_value', data_str='ii_i%i
else: l+=[data_str%ipos] else: l+=[data_str%ipos]
return l return l
class SupportCodeError(Exception):
"""It is currently not possible to auto-generate a GPU implementation for
an elementwise Op with support code."""
class NaiveAlgo(object): class NaiveAlgo(object):
verbose = 0 # 1, 2 or 3 for more verbose output. verbose = 0 # 1, 2 or 3 for more verbose output.
cache_version = () cache_version = ()
...@@ -39,9 +43,7 @@ class NaiveAlgo(object): ...@@ -39,9 +43,7 @@ class NaiveAlgo(object):
:param sync: if True, will wait after the kernel launch and check for error call. :param sync: if True, will wait after the kernel launch and check for error call.
""" """
if scalar_op.c_support_code_apply(node=None, nodename="nodename"): if scalar_op.c_support_code_apply(node=None, nodename="nodename"):
raise ValueError(('It is currently not possible to auto-generate' raise SupportCodeError(scalar_op)
' a GPU implementation for an elementwise Op with support'
' code'), scalar_op)
self.scalar_op = scalar_op self.scalar_op = scalar_op
self.sync = sync self.sync = sync
self.inplace_pattern = inplace_pattern self.inplace_pattern = inplace_pattern
......
...@@ -22,6 +22,7 @@ from theano.sandbox.cuda.nnet import ( ...@@ -22,6 +22,7 @@ from theano.sandbox.cuda.nnet import (
GpuCrossentropySoftmaxArgmax1HotWithBias, GpuCrossentropySoftmaxArgmax1HotWithBias,
GpuCrossentropySoftmax1HotWithBiasDx, GpuCrossentropySoftmax1HotWithBiasDx,
GpuSoftmax, GpuSoftmaxWithBias) GpuSoftmax, GpuSoftmaxWithBias)
from theano.sandbox.cuda.elemwise import SupportCodeError
from theano.compile import optdb from theano.compile import optdb
from theano.tensor.blas import _is_real_vector, _is_real_matrix from theano.tensor.blas import _is_real_vector, _is_real_matrix
...@@ -146,7 +147,7 @@ def local_gpu_elemwise_0(node): ...@@ -146,7 +147,7 @@ def local_gpu_elemwise_0(node):
# gpu_inplace_elemwise_optimizer will do it later # gpu_inplace_elemwise_optimizer will do it later
try: try:
new_op = GpuElemwise(node.op.scalar_op) new_op = GpuElemwise(node.op.scalar_op)
except ValueError: except SupportCodeError:
# This happens when scalar_op requires support code # This happens when scalar_op requires support code
return False return False
...@@ -194,7 +195,7 @@ def local_gpu_elemwise_1(node): ...@@ -194,7 +195,7 @@ def local_gpu_elemwise_1(node):
# gpu_inplace_elemwise_optimizer will do it later # gpu_inplace_elemwise_optimizer will do it later
try: try:
new_op = GpuElemwise(elemwise_node.op.scalar_op) new_op = GpuElemwise(elemwise_node.op.scalar_op)
except ValueError: except SupportCodeError:
# This happens when scalar_op requires support code # This happens when scalar_op requires support code
return False return False
if all([i.dtype=='float32' for i in elemwise_node.inputs]): if all([i.dtype=='float32' for i in elemwise_node.inputs]):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论