round in PyTorch is a “Python-like” round (
std::nearbyint) but not a “Cpp-like” round (
std::round). It means,
round([-0.5, 0.5]) would return
[0, 0] but not
[-1, 1]. I need “Cpp-like” round, especially when deploying my model.
I check the source code and find
One year ago, I posted Is there any faster way to rounding a tensor? and found a temporary solution. But it is complex and inefficient.
Does PyTorch have a “Cpp-like” round function, or an option?
Probably not unless there is a very compelling reason?
Using where + “manually rounding” + fuser should work reasonably well. In the thread you link, you use boolean indexing which is probably not a good idea for efficiency.
Thanks for you reply, @tom
How could I
where all midway numbers (0.5 and 1.5 and 2.5 and 3.5 and so on)?
Remind me what
return torch.trunc(x + 0.5 * torch.sign(x))
does not do for you?
Then you could use
torch._C._jit_override_can_fuse_on_cpu(True) to get fusion on CPU (but you need LLVM for this to be built-in).
It works, thank you again . @tom