所以我读到theano不能用float64
进行gpu计算,并且要将int作为共享变量存储在gpu上,它们必须初始化为共享的float32
数据,然后重新转换为int(就像在logistic回归example中的“小黑客”)。但是在这样一个重铸之后,theano能在int上进行gpu计算吗?存储是计算的先决条件吗?换句话说,以下两种情况是否可能?在
场景1。我想对两个大的整数向量做点积。因此,我将它们共享为float32
,并在点积之前将它们重新转换为int,那么这个点积是否在gpu上完成(不管int类型如何)?在
场景2。如果场景1是可能的,那么在gpu上进行计算,而不首先将它们存储为共享float32,是否仍然可能?(我知道共享变量可能会减少gpu-cpu通信,但是dot产品仍然可能吗?存储是gpu上计算的先决条件吗?)在
不,没有办法(目前)在GPU上用
float32
以外的任何类型执行任何操作。在这可以从下面的演示代码中看到:
在GPU上运行时,它将打印以下计算图:
^{pr2}$在这里您可以看到这两个共享变量确实存储在GPU内存中(这两个
CudaNdarrayType
s),但是它们在被强制转换为ints之前从GPU(即HostFromGpu
操作)移动到主机(即CPU/主内存),然后使用常规的dot
操作。在如果省略了类型转换,那么您将看到
显示GPU正在执行点积(即
GpuDot22
操作),但对浮点数据而不是整数数据执行。在相关问题 更多 >
编程相关推荐