我正在编写使用CuPy在GPU上运行以提高速度的代码。但是,我希望该代码能够使用numpy实现运行(尽管速度会更慢)。 目前,我正在执行以下操作:
import numpy as np
if gpu_present:
import cupy as cp
else:
import numpy as cp
我担心以后可能会遇到问题。这是好的做法吗?
我正在编写使用CuPy在GPU上运行以提高速度的代码。但是,我希望该代码能够使用numpy实现运行(尽管速度会更慢)。 目前,我正在执行以下操作:
import numpy as np
if gpu_present:
import cupy as cp
else:
import numpy as cp
xp
的全局变量(与您的解决方案相同)。我有时也会使用类的实例属性(同样命名为xp
)来实现类似的模式;这更容易进行未来扩展,因为每个实例可以对该属性具有不同的值。一种类似但更健壮、但更繁琐的方法是使xp
成为每个函数的第一个参数。get_array_module
实用程序来实现这个目的。 CuPy有这个函数,但需要安装CuPy。Chainer也有。你也可以自己编写它。使用此实用程序,您可以使代码可用于NumPy或CuPy数组,而无需全局切换。numpy.*
函数。如果您的代码只对给定的数组进行计算,则甚至不需要使用cupy
命名空间(但是仍然需要使用它来创建一个新数组而不给出另一个数组,例如cupy.ones
和cupy.random.*
)。