You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@singa.apache.org by "Chris Yeung (Jira)" <ji...@apache.org> on 2020/01/21 08:40:00 UTC
[jira] [Created] (SINGA-502) Avoid moving data between host and gpu
devices in some operations
Chris Yeung created SINGA-502:
---------------------------------
Summary: Avoid moving data between host and gpu devices in some operations
Key: SINGA-502
URL: https://issues.apache.org/jira/browse/SINGA-502
Project: Singa
Issue Type: Improvement
Components: Core
Reporter: Chris Yeung
Some functions move data between GPU and host memory, which should be fixed for many reasons such as efficiency and asynchronization (and buffering operation in the future). For example:
The softmax_cross_entropy move to data to host and then back to gpu, so the whole function needed to be changed:
class SoftMaxCrossEntropy(Operation):
def __init__(self, t):
super(SoftMaxCrossEntropy, self).__init__()
self.t = t.data
def forward(self, x):
self.p = singa.SoftMax(x)
loss = CTensor((1,), self.p.device())
ret = singa.CrossEntropyFwd(self.p, self.t)
loss.SetFloatValue(singa.SumAsFloat(ret) / x.shape()[0])
return loss
Here the SumAsFloat return a c++ float value, and this value is read back to gpu in the SetFloatValue function.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)