Pytorch: рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░реЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдлрд╝рд░ре░ 2017  ┬╖  128рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pytorch/pytorch

@ezyang рд╕реЗ рдирдпрд╛ рд╡рд┐рд╡рд░рдг:

https://github.com/Roger-luo/pytorch-complex рдкрд░ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ

рд╕рдВрдЧрдардирд╛рддреНрдордХ рд╕рд┐рджреНрдзрд╛рдВрдд

  • рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╕рдорд░реНрдерди PyTorch рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рд╣рдо рдкреИрдЪ рдХреЛ рдХреЛрд░ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
  • рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирдП рдХрд░реНрдиреЗрд▓ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ: рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рд╢реБрд░реВ рдореЗрдВ рд░реЗрдкреЛ рд╕реЗ рдмрд╛рд╣рд░ рд░рд╣реЗ, рдЗрд╕рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП PyTorch рдореБрдЦреНрдп рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░реЗ рдмрд┐рдирд╛ рдЙрди рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рдо рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рдмрдбрд╝реЗ рдирдП рдХрд░реНрдиреЗрд▓ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдВрддрддрдГ рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рд╕рднреА рдХрд░реНрдиреЗрд▓ рд╡рд╛рдкрд╕ PyTorch рдореЗрдВ рдЖ рдЬрд╛рдПрдВред
  • рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп PyTorch рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ PyTorch рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЕрд▓рдЧ рднрдВрдбрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ (рдФрд░ рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЗ рднрд╛рд░ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ)ред

    • PyTorch рдХрднреА-рдХрднреА C++ API рдореЗрдВ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ; рдпрджрд┐ рдЖрдк рдЗрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред

  • рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реБрдХ PyTorch 1.0 рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╣реБрдд рджреВрд░ рдХреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ PyTorch рдХреЗ рдЬрд╛рд░реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢рд┐рдк рдХрд░реЗрдВрдЧреЗред

рдореИрдВ рдЬрдЯрд┐рд▓ рдЧреБрдард▓реА рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛?

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред

PyTorch рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ dtype рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ API рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред PyTorch рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЯреЙрд░реНрдЪ.рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕64 рдФрд░ рдЯреЙрд░реНрдЪ.рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕128 рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдЯреЗрдВрд╕рд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, PyTorch рддреНрд░реБрдЯрд┐ рдХрд░реЗрдЧрд╛:

>>> torch.zeros({2,2}, dtype=torch.complex64)
RuntimeError: complex64 not supported by PyTorch

@ezyang рдиреЗ рдПрдХ рдкреИрдЪ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬреЛ рдЗрди dtypes рдХреЛ PyTorch рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред https://github.com/pytorch/pytorch/pull/11173

рдордзреНрдпрд╛рд╡рдзрд┐ рдореЗрдВ, рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ PyTorch рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдЬреИрд╕реЗ рд╢реВрдиреНрдп рдХрд╛ рдПрдХ рдЯреЗрдВрд╕рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рдорд░реНрдЬ рдХрд░реЗрдВрдЧреЗред "рдмреЗрд╕рд┐рдХ" рдХрд┐рд╕ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░реЙрдХреНрд╕реА CPU рд╣рд╛рдл рдЯреЗрдВрд╕рд░ (рдЬреЛ рдмреЗрд╣рдж рдЧрд░реАрдм рд╣реИрдВ) рдХреЗ рд▓рд┐рдП PyTorch рдХрд╛ рдореВрд▓ рд╕рдорд░реНрдерди рд╣реИред

PyTorch рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЯрд╛рдЗрдкрдбрд┐рдлреЙрд▓реНрдЯ рд╡рд░реНрдЧ (https://github.com/pytorch/pytorch/pull/11013) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдкрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдЧрд╛ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

struct CPUComplexFloatType final : public TypeDefault {
  virtual Tensor add(const Tensor & self, const Tensor & other, Scalar alpha=1) const override {
    // Your implementation of add for complex tensors
  }
  // ...
}

рдпрд╣ рд╡рд░реНрдЧ рдареАрдХ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдЧрд╛ рдЬреЛ рдЬрдЯрд┐рд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ; рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди TypeDefault рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдСрдЯреЛрдЬреЗрдирд░реЗрдЯреЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк (рд╕рдордЧреНрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╣рд┐рдд рд╕реВрдЪреА рд╣реЛрдЧреА рдЬрд┐рд╕реЗ PyTorch рд╕реНрд░реЛрдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рд╣рдо рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдВрддрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд┐рдзрд┐рдпрд╛рдБ PyTorch рдлрд╝реНрд░рдВрдЯрдПрдВрдб рдореЗрдВ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ-рд╕реЗ-рдПрдХ рдкрддреНрд░рд╛рдЪрд╛рд░ рдореЗрдВ рд╣реЛрддреА рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрдм рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ,

рдЪреЗрддрд╛рд╡рдиреА: рд╣рдо рдПрдХ рдирдИ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЯрд╛рдЗрдк рдЕрд╡реЗ рдХреЛ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдирдП рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЦреБрд▓реЗ рдкрдВрдЬреАрдХрд░рдг рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдПрдХрд▓ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдЙрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд╕рдВрднрд╡рддрдГ рд╕рдорд░реНрдерди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЯрд╛рдЗрдк рдХреЛ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░рдгрдиреАрддрд┐ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрдВрдзреЗ рди рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдирдП, рдЬрдЯрд┐рд▓ рдХреЗрд╡рд▓ рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк C++ рдПрдХреНрд╕рдЯреЗрдВрд╢рди API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред C++ рдПрдХреНрд╕рдЯреЗрдВрд╢рди API рдХреЛ https://pytorch.org/tutorials/advanced/cpp_extension.html рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЖрдк C++ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:

at::Tensor imag(at::Tensor z) {
  ...
}

рдФрд░ рдлрд┐рд░ рд╕реА ++ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдкреАрдЖрдИ рдПрдХ рдкрд╛рдпрдерди рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рдпрдерди рд╕реЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред

рдХреБрдЫ рдСрдкрд░реЗрд╢рди PyTorch рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЖрд╕рд╛рди" рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдЬ рднреА рдореМрдЬреВрдж рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдирд░реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдирд░реАрдСрдкреНрд╕ рдХрд░реНрдиреЗрд▓.рд╕реАрдкреАрдкреА рдореЗрдВ add_kernel рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛ (рдФрд░ рдлрд┐рд░ рдЖрдк рдЗрд╕реЗ рдореБрдлреНрдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ std::complex рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ)ред рдЬрдм рддрдХ рдпреЗ рдкреИрдЪ рдЫреЛрдЯреЗ рдФрд░ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рдордп рдкрд░ рдорд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдореМрдЬреВрджрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЯрд╛рдЗрдк рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рд▓рд┐рдЦрдХрд░, рдФрд░ рдЙрджрд╛рд░ рдХреЙрдкреА рдкреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд░рдХреЗ, рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдЕрдирдмреНрд▓реЙрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЬрдм рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рддреЛ рдЗрд╕рд╕реЗ рдмрдЪреЗрдВ!

рдСрдЯреЛрдЧреНрд░рд╛рдбред рдЬрдм рддрдХ рдЖрдк рдЙрди рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реВрддреНрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ, рдЖрдкрдХреЛ "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ" рдСрдЯреЛрдЧреНрд░реИрдб рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕рднреА рдШрдЯрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рд╕реЗ рдкреАрдЫреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред yaml .

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдСрдЯреЛрдЧреНрд░реИрдб рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░реЗрдВ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'рдПрдмреНрд╕' рдХрд╛ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ 'рдЧреНрд░реЗрдб' рдирд╣реАрдВ рд╣реИред рд╕реНрд╡.рд╕рд╛рдЗрди ()'ред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ 'abs' рдХреЗ рдСрдЯреЛрдЧреНрд░реИрдб рдлреЙрд░реНрдореВрд▓рд╛ рдХреЛ 'abs_backward' рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдлрд┐рдХреНрд╕ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдЬрдЯрд┐рд▓ рдореВрд▓реНрдпрд╡рд╛рди рдмреИрдХ рдкреНрд░рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╕рдВрджрд░реНрдн рд╣реИрдВ:

  1. рдЕрдХреАрд░рд╛ рдХрд╛ "рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рд╡реИрд▓реНрдпреВрдб рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕"ред
  2. https://giggleliu.github.io/2018/02/01/complex_bp.html

рдЖрдо рддреМрд░ рдкрд░, рд╣рдореЗрдВ рдСрдЯреЛрдЧреНрд░реИрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рдореВрд▓реНрдпрд╡рд╛рди рдлрд╝рдВрдХреНрд╢рди (рдиреБрдХрд╕рд╛рди) рдХреЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛

рдХрдИ рдЖрд╡рд╢реНрдпрдХ рдЯреБрдХрдбрд╝реЗ рдЖрдЬ рдЬрдЧрд╣ рдореЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд╢реБрд░реВ рд╕реЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  • [рдПрдХреНрд╕] рдХреЛрдбрдореЛрдб рдЯреАрдПрдЪ рдЕрдЧрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╣реАрдВ рд╣реИ https://github.com/pytorch/pytorch/pull/11163
  • [X] рдЯреЙрд░реНрдЪ.рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕64 рдФрд░ рдЯреЙрд░реНрдЪ.рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕128 рдбреАрдЯрд╛рдЗрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рдкреЛрд░реНрдЯред https://github.com/pytorch/pytorch/pull/11173
  • [X] CPUComplexType, рдЖрджрд┐ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рддрд╛рдХрд┐ рдЬрдм рдЖрдк dtype=torch.complex64 рдХреЗ рд╕рд╛рде рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдкрд░ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
  • [рдПрдХреНрд╕] рднреВрдорд┐ https://github.com/pytorch/pytorch/pull/11013
  • [рдПрдХреНрд╕] рдПрдХ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╡рд░реНрдХрд┐рдВрдЧ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рд╕рд╣рд┐рдд рдПрдХ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЙрджрд╛рд╣рд░рдг, рдЬреЛ рдХрд┐ libtorch рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдЖрд╡рдВрдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдПрдХреАрдХрд░рдг рдпреЛрдЬрдирд╛ред рдпреЗ рдСрдкрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЖрд╕рд╛рди" рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж PyTorch рдореЗрдВ рдореЗрдирд▓рд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

  • [X] рдмреЗрд╕рд┐рдХ рдЯреЗрдВрд╕рд░ рдлреИрдХреНрдЯреНрд░рд┐рдпрд╛рдВ: рдЯреЙрд░реНрдЪ.рдЦрд╛рд▓реА, рдЯреЙрд░реНрдЪ.рд╢реВрдиреНрдп, рдЯреЙрд░реНрдЪ.рдСрдиреНрд╕
  • [ ] рд╕реАрдкреАрдпреВ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрд╢рдВрд╕: рдРрдб, рд╕рдм, рдорд▓, рдбрд┐рд╡ #11641
  • [] рдПрдлрдПрдлрдЯреА
  • [ ] ???

рдХрд░реНрдиреЗрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

TODO: https://github.com/Roger-luo/TH/blob/master/ChangeLog.md рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВ

рдЕрдиреНрдп рдЬрдЯрд┐рд▓ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдп:

  • [ ] рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдЪрд╛рд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ, рдФрд░ рдЗрд╕реЗ рдмрдврд╝рд╛рд╡рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдкреНрд░рдХрд╛рд░ #11641

рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдореБрджреНрджрд╛ рд╕рд╛рдордЧреНрд░реА

@PhilippPelz . рдХреА рдУрд░ рд╕реЗ рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЛ рдкрд╛рдЗрдЯреЛрд░рдЪ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИред
CPU рд╕рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП ztorch рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ z-cutorch (https://github.com/PhilippPelz/z-cutorch) рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╣ CudaHalfTensor (рдЕрднреА рддрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд╣реАрдВ рд╣реИ) рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдВрдж рдХрдЯреЛрд░рдЪ рд╣реИред
рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВ fb.ptyhon рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд▓реЙрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП matplotlib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрдм рднреА рдореИрдВ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ (рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ) рд╣рд░ рдмрд╛рд░ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pytorch рдЬрд▓реНрдж рд╣реА рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧ рдкреАрд╕реА рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЬрдЯрд┐рд▓ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЗрд░-рд╕рдмреЗрд░ рдСрдЯреЛрдЧреНрд░реИрдб рдХреЛ рднреА рд╕реНрдкрд░реНрд╢ рдХрд░реВрдВрдЧрд╛ред
рдЬрдмрдХрд┐ tf рдкреНрд░рддрд┐ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдСрдкреНрд╕ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (https://github.com/tensorflow/tensorflow/issues/2255), рд╕рд╛рде рд╣реА рдпрд╣ рдореЗрд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рднрд╛рд░реА рд▓рдЧрддрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣ рд╕рдХреЗ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕реНрд╡рд╛рдЧрдд рдпреЛрдЧреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИред

feature complex triaged

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@sunilkpai , @boeddeker , @Randl ,

рдЬрдЯрд┐рд▓ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред

рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕реЗ PyTorch рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ:

  • рдПрдХ .cpp рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рдЖрд╡рд╢реНрдпрдХ рдЧрдгрд┐рдд рдХрд░реНрдиреЗрд▓ рдкрдВрдЬреАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИред
  • рдПрдХ test/ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд┐рд╕рдореЗрдВ pytorch рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╣реБрдд рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред
    рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдХрд░реНрдиреЗрд▓ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ (рдФрд░ рдЕрдиреНрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ)ред

рдореИрдВ рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛?

  • рдЯреЗрдВрд╕рд░ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рд╕реБрдВрджрд░-рдкреНрд░рд┐рдВрдЯ рд╕реНрд╡рд░реВрдкрдг рд╣реИ рдЬреЛ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИрдВред

    • рдкреНрд░рд┐рдВрдЯ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк tensor.py рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    • рдпрд╛, рдЖрдк рдмрд╕ Pytorch рдЯреЗрдВрд╕рд░ рдХреЛ Numpy рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд┐рддрд┐:

  • рд╕реАрдкреАрдпреВ рдХрд╡рд░реЗрдЬ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

    • рдХрд░реНрдиреЗрд▓ рдХреЛ PyTorch рдХреЗ рдЕрдВрджрд░ 'aten/src/ATen/native/cpu/ </li> <li>Complex number specific code is under 'aten/src/ATen/native/cpu/zmath.h рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

    • Intel AVX256 рддреНрд╡рд░рдг 'aten/src/ATen/cpu/vec256/` рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИ



      • @sunilkpai : рдореИрдВ рдХреНрд╕реНрдк рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред рдпрд╣ рд╡рд╣ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЙрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


      • рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реИрдВред



  • GPU рдХрд╡рд░реЗрдЬ рдмрд╛рдЗрдирд░реА рдФрд░ рдпреВрдирд░реА рдСрдкреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИ:

    • рдХрд░реНрдиреЗрд▓ рдХреЛ PyTorch рдХреЗ рдЕрдВрджрд░ 'aten/src/ATen/native/cuda/* </li> <li>Complex number specific code is under 'aten/src/ATen/native/cuda/zmath.cuh рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

    • thrust::complex<T> рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реНрдиреЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕:

  • C-рдЖрдзрд╛рд░рд┐рдд TH рдХрд░реНрдиреЗрд▓ рдХреЛ C++ ATen рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

    • рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдВрдб () рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

    • рдХреБрдЫ рдЕрдиреБрдХреНрд░рдордг рд╕рдВрдЪрд╛рд▓рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

    • рд╡рд░реНрддрдорд╛рди рдореЗрдВ 168/1300 рдЧрдгрд┐рдд рдХрд░реНрдиреЗрд▓ (рдЕрдХреНрдЯреВрдмрд░ рдореЗрдВ 230 рд╕реЗ рдиреАрдЪреЗ) рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ TH рд╕реЗ ATen рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  • рдореИрдВ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдирдВрдмрд░ рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХрд░реНрдиреЗрд▓ рдПрдЯреЗрди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

--

рд╕рднреА 128 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред torch/lib рдореЗрдВ рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдХрд╛рдВрдЯрд╛ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЧреБрд░реБ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖-рдореБрдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд░ рд╕рдХреЗрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ libs рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЙрд╕ рд╕рдордп рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рд╕рд╛рде TH рдорд┐рд▓рд╛ рд╣реИред рдкрд╛рдпрдерди рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреНрдпрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

@PhilippPelz рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ: https://github.com/facebook/ztorch/tree/master/lib/THZ ? рдпрд╛ рдЖрдкрдиреЗ TH рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ?

@рдХрд┐рд▓реЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдиреЛрдЯреНрд╕ рд╣реИрдВ рдХрд┐ TH рдкрд╛рдпрдерди рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд╡рд╣ рдЙрдирдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ THZ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЖрджрд┐ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП CUDA рдмреИрдХрдПрдВрдб рдмрдирд╛рдирд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рд╣рдордиреЗ рдЙрд╕ рдкрд░ рдЕрднреА рд╢реБрд░реБрдЖрдд рднреА рдирд╣реАрдВ рдХреА рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ z-cutorch (https://github.com/PhilippPelz/z-cutorch) рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╣ CudaHalfTensor (рдЕрднреА рддрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдирд╣реАрдВ рд╣реИ) рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдВрдж рдХрдЯреЛрд░рдЪ рд╣реИред

рдпрд╣ рднреА рдЦреВрдм рд░рд╣реАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ :)

@soumith рдореИрдВрдиреЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде TH рдХрд╛ рдХрд╛рдВрдЯрд╛ рдХрд┐рдпрд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ THGenerateComplexTypes.h + рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ BLAS + LAPACK рд░реВрдЯреАрди рдмрд╛рдХреА рд▓рдЧрднрдЧ рдореБрдлреНрдд рдерд╛ред THZ рдХреЗ рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рд╕рдВрдЧрдд рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдХреЙрдкреА рдкреЗрд╕реНрдЯ рдХрд░рдирд╛, рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдХрд╛рдо рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ рдЕрднреА THPP рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдБ, рдЬреИрд╕реЗ рд╕рдВрдХрд▓рдХ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдБ

/home/philipp/projects/pytorch/torch/lib/tmp_install/include/TH/generic/THBlas.h:6:40: рддреНрд░реБрдЯрд┐: '*' рдЯреЛрдХрди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд ',' рдпрд╛ '...'
TH_API рд╢реВрдиреНрдп THBlas_ (рд╕реНрд╡реИрдк) (рд▓рдВрдмрд╛ n, рд╡рд╛рд╕реНрддрд╡рд┐рдХ *, рд▓рдВрдмрд╛ incx, рд╡рд╛рд╕реНрддрд╡рд┐рдХ *, рд▓рдВрдмрд╛ incy);

рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рд╣реИред

рдореИрдВ рдкрд╛рдЗрдерди рдПрдХреАрдХрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рд╕рд╣рд╛рдпрддрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред CUDA рдмреИрдХрдПрдВрдб рдЬреНрдпрд╛рджрд╛рддрд░ z-cutorch рд╕реЗ рдХреЙрдкреА рдкреЗрд╕реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@PhilippPelz рдпрд╣рд╛рдБ PyTorch рд░реИрдкреНрд╕ TH рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдиреЛрдЯреНрд╕ рджрд┐рдП рдЧрдП рд╣реИрдВ: https://gist.github.com/killeent/4675635b40b61a45cac2f95a285ce3c0

@killient рдзрдиреНрдпрд╡рд╛рдж, рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИред lib/build_all.sh рдЕрдм рд╕рдВрдХрд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ csrc рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред

рдпрд╣ рдЕрдм рдЪрд▓рддрд╛ рд╣реИ:

рдорд╢рд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
np . рдХреЗ рд░реВрдк рдореЗрдВ numpy рдЖрдпрд╛рдд рдХрд░реЗрдВ

a = np.array([1+1j,2+2j])
рдмреА = рдПрдирдкреА.рдПрд░реЗ ([3+3j,4+4j])
рдПрде = рд╡реЗрдВ.from_numpy(рдП)
bth = th.from_numpy(b)
ath_cuda = ath.cuda ()
ath_cuda += bth.cuda ()
рдПрде = ath_cuda.cpu ()
рдкреНрд░рд┐рдВрдЯ (ath.numpy ())

рдЖрдЙрдЯ: [4.+4.j 6.+6.j]

рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧрдгрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рдеред
рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣реЛрдВ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛рд░реНрдп рдФрд░ рдПрдлрдПрдлрдЯреА рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рд╕рдХреЗрдВ, рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкреЗрдкрд░ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдбреАрдк рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ , рд╢рд╛рдпрдж рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред
рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдЖрдк рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@PhilippPelz рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЗ ger рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБред рдЖрдкрдХреЗ THBlas.c рдореЗрдВ рдХреБрдЫ рдЬрдЯрд┐рд▓ blas рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдЖрдкрдиреЗ GER рдХреЛ zger_ рдФрд░ cger_ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЗрдирд░реЗрдЯ рд╣реЗрдбрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЗрдиреЗрд░рд┐рдХ/THBlas.c рдореЗрдВ cger_ рдХреЗ рд╕рд╛рде рдХреЛрдИ blas рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред . рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЖрдкрдХреЗ рдЬреЗрдПрдорд╡реА рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдФрд░ рдЖрдИрдПрдордУ рд╢рд╛рдпрдж рдЖрдкрдХреЛ .gch рдХреЛ .gitignore рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рднреА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЕрдкрдиреЗ рдХрд╛рдВрдЯреЗ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рд╣реИ? рдореИрдВ рдкрд╣рд▓реЗ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдкрдХреЗ рдЧреБрд░реБ рд╕реЗ рдХреБрдЫ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдФрд░ DOT рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдЬрдЯрд┐рд▓ рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, dotc рдбреЙрдЯ рдХреЗ рд▓рд┐рдП рд░реВрдЯреАрди рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ?

рдФрд░ рд╣рд╛рдБ, рдЕрдЧрд░ рдХреЗрд╡рд▓ real рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рддреЛ рдореБрдЭреЗ рдмрд╕ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдЬрдм real рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рд╣реИ ...

рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ TH рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд┐рдЫрд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рджреЗрдЦрд╛ред рдореБрдЭреЗ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХрд╣рд╛рдБ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рд╣рдо рд╕рд┐рд░реНрдл рдХреБрдЫ рдЕрдЬрдЧрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рд╣рд╛рдВ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рд╣рд░ рдЙрд╕ рдЪреАрдЬ рдХреЛ рдЖрдЧреЗ рдирд╣реАрдВ рдмрдврд╝рд╛рдпрд╛, рдЬрд┐рд╕рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ред рдХреБрдЫ рдШреЛрд╖рдгрд╛рдПрдВ рдЧрд╛рдпрдм рд╣реИрдВ, рдЙрджрд╛ред рдЬрд╝рдЧрд░ рдФрд░ рд╕реАрдЧрд░

рдбреАрдУрдЯреА рдХреЗ рд▓рд┐рдП рдореИрдВ cdotc рдФрд░ zdotc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡реЗ рдЧрд╛рдпрдм рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред

рдкрд╛рдЗрдЯреЛрд░рдЪ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдирд╛рдордХрд░рдг рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ, рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рд╣рд╛рдБ, рдЧрдгрд┐рдд рдХреЗ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рдкрд░реАрдХреНрд╖рдгред рдХреЙрдореНрдкрд▓реЗрдХреНрд╕ рдирдВрдмрд░ рдЪреЗрдХ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЖрдк рднреА рдЗрд╕рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ!

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ред TH blas рд░реВрдЯреАрди рдЕрдм рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ

@PhilippPelz рдореИрдВрдиреЗ рдЕрднреА рдЖрдкрдХреЗ рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдЬрдЯрд┐рд▓ рд░реИрдЦрд┐рдХ рдкрд░рддреЛрдВ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдПред рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣рд░реНрдорд┐рдЯрд┐рдпрди рдСрдкрд░реЗрд╢рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдЬрдЯрд┐рд▓ рд░реИрдЦрд┐рдХ рдкрд░рдд рдХреЗ рд▓рд┐рдП рдмреАрдкреА)ред рд╢рд╛рдпрдж рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ? рдХреНрдпрд╛ рдЖрдкрдиреЗ THNN рднрд╛рдЧ рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реИ?

рд╣рд╛рдБ рд╣рд░реНрдорд┐рдЯрд┐рдпрди рдЙрдкрдпреЛрдЧреА рд╣реИред рдХреВрдбрд╛ рдПрдлрдПрдлрдЯреА рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдПрдлрдПрдлрдЯреА рдХреЛ numpy рд╕реЗ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рддрдХ THNN рдпрд╛ THCUNN рдХреЛ рдирд╣реАрдВ рдЫреБрдЖ рд╣реИред

@PhilippPelz рдореИрдВрдиреЗ рдкреАрдЖрд░ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрдкрджреЗрд╢рдХ рдЬреЛрдбрд╝рд╛ рд╣реИред рдФрд░ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдкрд░рд┐рд╡рд░реНрддрди рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдПрдБред рдзрдиреНрдпрд╡рд╛рдж! рдкреБрдирд╢реНрдЪ. рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХреБрдЫ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рднреА рд╕рд╣реА рдХрд┐рдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣рдореЗрдВ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреЗрдВрд╕рд░ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВрдиреЗ рдЬрдЯрд┐рд▓ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИред

рдореИрдВ рдЖрдкрдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рд╕рднреА рдХрдорд┐рдЯреНрд╕ рдХреЛ рд░рд┐рдмреЗрд╕ рдХрд░ рджреВрдВрдЧрд╛ред

@PhilippPelz рд╣рд╛рдп, рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд THPP рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВред Traits.hpp рдореЗрдВ рдЬреЛрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреВрдбрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдпрд╣ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдХреЗрд╡рд▓ рд▓рд╛рдЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИрдпрд╛Traits.hpp рдореЗрдВ? рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рдХреБрдЫ рд╕реБрд░рд╛рдЧ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

@ рд░реЛрдЬрд░-рд▓реБрдУ рд╣рд╛рдВ, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╣реАрдВ рдФрд░ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рд╣рдо рдЬрд┐рд╕ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдпрд╛ рддреЛ complex.h рдпрд╛ std::complex рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рдЯреАрдПрдЪрдкреАрдкреА рд╕реА ++ рд░реИрдкрд░ рд╣реИ, рд╢рд╛рдпрдж std::complex рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕реАрдПрдлрдЖрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЬреЛрд░ рднреА рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрднреА рдореИрдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди THC рдореЗрдВ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ cuFloatComplex/cuDoubleComplex рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рддрд╛рдХрд┐ cffi рдХрдВрдкрд╛рдЗрд▓рд░ рд╢рд┐рдХрд╛рдпрдд рди рдХрд░реЗред рдореИрдВ рдЕрднреА рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ рдореБрдЭрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧ рд░рд╣рд╛ рд╣реИ :(ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдХрд░реЗрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╕реНрдЯрдо рдХрд░реНрдиреЗрд▓ рдХреЙрд▓ рдХреЗ рд╕рд╛рде cffi рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛рдлреА рдмреЛрдЭрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХреЛ рд╣рдореЗрд╢рд╛ nvcc рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рддрдм cffi рд░реИрдкрд░ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рдПрдмреАрдЖрдИ рдореЛрдб рдореЗрдВ рд╕реАрдПрдлрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╣рддреА рд╣реИ, "рдПрдкреАрдЖрдИ рдореЛрдб рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕реАрдкреАрдереЙрди рд╕реА рд░реИрдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рд▓рдХреНрд╖реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рддреЗрдЬрд╝ рд╣реИ (рдФрд░ рдХрднреА рднреА libffi рд╕реЗ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред"

@PhilippPelz рд╢рд╛рдпрдж reinterpret_cast рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ cuComplex рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ THPP рдореЗрдВ reinterpret_cast рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдкрд╣рд▓реЗ рдПрдХ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ ...

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ THPP рдмрд┐рдирд╛ cuda рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рднреА рдмрдирд╛рдП, рддреЛ reinterpret_cast рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

@PhilippPelz рдореИрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред рдХреНрдпрд╛ рдХрд╣реАрдВ рдХреЛрдИ рдЯреВрдбреВ рд▓рд┐рд╕реНрдЯ рд╣реИ?

рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП THNN рдФрд░ THCUNN рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк @ roger-luo рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рд╣рдо рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЬрдЯрд┐рд▓ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@elbamos THNN рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рдкреНрд░рддреНрдпреЗрдХ рдореМрдЬреВрджрд╛ рдкрд░рдд рдХреЗ рд▓рд┐рдП рдирдИ рдЬрдЯрд┐рд▓ рдмреИрдХрдкреНрд░реЙрдкреИрдЧрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред рдлрд┐рд▓рд┐рдк рдХреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ WIP PR рд╣реИред рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдВрджрд░реНрдн рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдП рд╣реИрдВред

@apaszke @soumith @PhilippPelz рдФрд░ рджреЛ рдкреНрд░рд╢реНрди рд╣реИрдВ:

  • рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ $#$ THS $#$ рдореЗрдВ рдПрдХ рдФрд░ GenerateXXXTypes.h рдлрд╝рд╛рдЗрд▓ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ TH рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИред

  • byte_order.cpp рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреНрдпрд╛ рд╣реИ?

void THP_decodeFloatBuffer(float* dst, const uint8_t* src, THPByteOrder order, size_t len)
{
  for (size_t i = 0; i < len; i++) {
    union { uint32_t x; float f; };
    x = (order == THP_BIG_ENDIAN ? decodeUInt32BE(src) : decodeUInt32LE(src));
    dst[i] = f;
    src += sizeof(float);
  }
}

void THP_decodeDoubleBuffer(double* dst, const uint8_t* src, THPByteOrder order, size_t len)
{
  for (size_t i = 0; i < len; i++) {
    union { uint64_t x; double d; };
    x = (order == THP_BIG_ENDIAN ? decodeUInt64BE(src) : decodeUInt64LE(src));
    dst[i] = d;
    src += sizeof(double);
  }
}

рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЬрдЯрд┐рд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡? рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣реА рд╣реИ ...

void THP_decodeZFloatBuffer(std::complex<float>* dst, const uint8_t* src, THPByteOrder order, size_t len)
{
  for (size_t i = 0; i < len; i++) {
    union { uint64_t x; std::complex<float> cf;};
    x = (order == THP_BIG_ENDIAN ? decodeUInt64BE(src) : decodeUInt64LE(src));
    dst[i] = cf;
    src += sizeof(std::complex<float>);
  }
}

void THP_decodeDoubleBuffer(std::complex<double>* dst, const uint8_t* src, THPByteOrder order, size_t len)
{
  for (size_t i = 0; i < len; i++) {
    union { uint128_t x; std::complex<double> df;};
    x = (order == THP_BIG_ENDIAN ? decodeUInt128BE(src) : decodeUInt128LE(src));
    dst[i] = df;
    src += sizeof(std::complex<double>);
  }
}

рдкрд┐рдЫрд▓рд╛ decodeUInt128XE рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

static inline uint128_t decodeUInt128LE(const uint8_t *data) {
  return (((uint128_t)data[ 0])<<  0) | (((uint128_t)data[ 1])<<  8)|
         (((uint128_t)data[ 2])<< 16) | (((uint128_t)data[ 3])<< 24)|
         (((uint128_t)data[ 4])<< 32) | (((uint128_t)data[ 5])<< 40)|
         (((uint128_t)data[ 6])<< 48) | (((uint128_t)data[ 7])<< 56)|
         (((uint128_t)data[ 8])<< 64) | (((uint128_t)data[ 9])<< 72)|
         (((uint128_t)data[10])<< 80) | (((uint128_t)data[11])<< 88)|
         (((uint128_t)data[12])<< 96) | (((uint128_t)data[13])<<104)|
         (((uint128_t)data[14])<<112) | (((uint128_t)data[15])<<120);
}

static inline uint128_t decodeUInt128BE(const uint8_t *data) {
  return (((uint128_t)data[15])<<  0) | (((uint128_t)data[14])<<  8)|
         (((uint128_t)data[13])<< 16) | (((uint128_t)data[12])<< 24)|
         (((uint128_t)data[11])<< 32) | (((uint128_t)data[10])<< 40)|
         (((uint128_t)data[ 9])<< 48) | (((uint128_t)data[ 8])<< 56)|
         (((uint128_t)data[ 7])<< 64) | (((uint128_t)data[ 6])<< 72)|
         (((uint128_t)data[ 5])<< 80) | (((uint128_t)data[ 4])<< 88)|
         (((uint128_t)data[ 3])<< 96) | (((uint128_t)data[ 2])<<104)|
         (((uint128_t)data[ 1])<<112) | (((uint128_t)data[ 0])<<120);
}

рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ THPP $ рдореЗрдВ T _Complex $ рдХреЗ рдмрдЬрд╛рдп std::complex<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рддрдХ рдкрд╛рдпрдерди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдХреЗрд╡рд▓ c рдкреНрд░рдХрд╛рд░ T _Complex рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рддреЛ рдпрд╣рд╛рдБ dst рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ std::complex<T> ред

рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реВрдВ, рддреЛ рд╢рд╛рдпрдж рд╣рдореЗрдВ uint128_t рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ https://github.com/calccrypto/uint128_t ? рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдЕрдиреБрдкрд╛рд▓рдирдХрд░реНрддрд╛ 128-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЬреАрд╕реАрд╕реА рдореЗрдВ int128_t рдФрд░ uint128_t рд╣реИ)ред

@PhilippPelz рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ - рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рдереЛрдбрд╝рд╛ рдирд┐рд░рд╛рд╢ рд╣реВрдВ рдХрд┐ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рдирд╣реАрдВ рд╣реИрдВ

@ el3ment рдореИрдВрдиреЗ рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рдмреИрдХрдПрдВрдб рдЬреЛрдбрд╝рд╛ рд╣реИ https://github.com/pytorch/pytorch/pull/4899 рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЕрднреА рддрдХ рд╕рдореАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ ... рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ...

рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ @PhilippPelz рдХреЛ рдИрдореЗрд▓ рдХрд┐рдпрд╛ рдерд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рд░реЗрдкреЛ рдЕрднреА рднреА v0.1 рдХреЗ рддрд╣рдд рд╣реИ рдФрд░ рд╡рд╣ рд╕рд┐рддрдВрдмрд░ рддрдХ рдереАрд╕рд┐рд╕ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╕реНрдд рд╣реИ? рдФрд░ рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ v0.3 рдХреЗ рдирдП CUDA рдмреИрдХрдПрдВрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдХреЗрд▓реЗ рдЗрди рд╕рднреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдирдХреНрд╢рд╛/рдШрдЯрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде v0.1 рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреЛрдИ рд╣реИ рдЬреЛ рдорджрдж рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИ ...

рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВред

10 рдЕрдкреНрд░реИрд▓, 2018 рдХреЛ рд░рд╛рдд 10:52 рдмрдЬреЗ, Rogerluo [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

@ el3ment рдореИрдВрдиреЗ CPU #4899 . рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рдмреИрдХрдПрдВрдб рдЬреЛрдбрд╝рд╛ рд╣реИ

рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ @PhilippPelz рдХреЛ рдИрдореЗрд▓ рдХрд┐рдпрд╛ рдерд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рд░реЗрдкреЛ рдЕрднреА рднреА v0.1 рдХреЗ рддрд╣рдд рд╣реИ рдФрд░ рд╡рд╣ рд╕рд┐рддрдВрдмрд░ рддрдХ рдереАрд╕рд┐рд╕ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╕реНрдд рд╣реИ? рдФрд░ рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ v0.3 рдХреЗ рдирдП CUDA рдмреИрдХрдПрдВрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдХреЗрд▓реЗ рдЗрди рд╕рднреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдирдХреНрд╢рд╛/рдШрдЯрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде v0.1 рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреЛрдИ рд╣реИ рдЬреЛ рдорджрдж рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИ ...

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

@elbamos рд╢рд╛рдВрдд, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pytorch рдЯреАрдо рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╕рдВрдж рдХрд░рддреА рд╣реИред рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рдВрдЯреЗ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдкрд╛рдЗрдЯреЛрд░рдЪ рдЯреАрдо рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛ред

рдирдорд╕реНрддреЗ, рдореЗрд░рд╛ рдХреЛрдб v0.2 . рдХреЗ рдмрд╛рдж рдХреБрдЫ рдХрдорд┐рдЯ рдкрд░ рд╣реИ

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдерд╛ рдХрд┐ рд╕рднреА рдЯреЗрдВрд╕рд░ рдХреЛрдб рдХреЛ рдПрдЯреЗрди рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдерд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдФрд░ рдХрд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЕрднреА рднреА рдЕрдкрдирд╛ рдкреАрдПрдЪрдбреА рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реИрд╕реЗ рднреА 0.4 рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ рдЬрдм рддрдХ рдХрд┐ рд╡реЗрд░рд┐рдПрдмрд▓ рдФрд░ рдЯреЗрдВрд╕рд░ рдХрд╛ рд╡рд┐рд▓рдп рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЪрд▓ рд░рд╣реА рд╣реИред

@elbamos рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рд╕рд╛рдорд╛рди рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдорд░реНрдЬ рдХрд░ рджреВрдВрдЧрд╛ред рдЖрдкрдХреЗ рд╕реНрдерд╛рди рдкрд░, рдореИрдВ рдЖрдкрдХреЛ рдЬреЛ рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд▓рд╛рдЧреВ рдХрд░ рджреВрдВрдЧрд╛ред TH(CU)NN рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рд╣реЛрдЧрд╛ред

@el3ment рдореЗрд░реЗ рдкрд╛рд╕ рджреВрд╕рд░реЛрдВ рдХреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ рддреЛ рдореИрдВ рд╕рд╛рдорд╛рди рдХреЛ рдорд░реНрдЬ рдХрд░ рджреВрдВрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реЛ рддреЛ рдореИрдВ рдЕрддреНрдпрдзрд┐рдХ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдВрдХрд▓рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рднреА рдорджрдж рдХрд░реВрдВрдЧрд╛ред

рдЕрдЧрд░ рдореИрдВ рдкреЛрд╕реНрдЯрдбреЙрдХ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЗрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрдЦрдж рд╣реИ рдХрд┐ рдлреЗрд╕рдмреБрдХ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред :((

@PhilippPelz рд╕рд╣рдордд, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрдЦрдж рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ tensorflow рдХреНрд╡рд╛рдВрдЯрдо рднреМрддрд┐рдХреА рдореЗрдВ рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдореИрдВрдиреЗ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдЬрдЧрд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред

@ рд░реЛрдЬрд░-рд▓реБрдУ рджрд┐рд▓рдЪрд╕реНрдк, рдХреНрдпрд╛ рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреВрд▓рд┐рдпрд╛ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдпрд╣ рд╕рдм рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИ?

@PhilippPelz рдореИрдВ рдЬреВрд▓рд┐рдпрд╛ (рдЙрд╕ PyTorch PR рдХреЗ рдмрд╛рдж рд╕реЗ) рдореЗрдВ рдПрдХ рдХреНрд╡рд╛рдВрдЯрдо рдХрдИ-рдмреЙрдбреА рдЯреВрд▓рдХрд┐рдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ рдЬрдЯрд┐рд▓ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкрд┐рдЫрд▓реЗ рдХрд╛рдЧрдЬрд╛рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЬрдЯрд┐рд▓/рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕реЗ QMTK.jl рдореЗрдВ рд░рдЦрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдкреНрд░рдЧрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рд╡рд╣ рд╕рдм рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред PyTorch рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ ...

рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХрд▓ рдкреИрдХреЗрдЬ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ (рдмрд╕ рдЗрд╕ рд╕рдордп рдХрдИ рд░реЗрдкреЛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред рдФрд░ рдЗрдВрд╕реНрдЯрд┐рдЯреНрдпреВрдЯ рдСрдл рдлрд┐рдЬрд┐рдХреНрд╕, CAS рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдФрд░ рднреА рд▓реЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рдореИрдВ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЯреИрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ (рдЬреЛ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рд╣реЛрдЧрд╛)ред

рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ PyTorch рдЯреАрдо рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рддреЛ рдореИрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдБред

рдмрдврд╝рд┐рдпрд╛, рдореИрдВ рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреВрдБрдЧрд╛!

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдЦреЗрдж рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЗрд╕рдХреЗ рдЦреБрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреА рд╣реИред

рдпрд╣рд╛рдБ рджреЛ рддрдереНрдп рд╣реИрдВ:

  1. рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ PyTorch рдХреЛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░
  2. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрд╕ рд▓рдВрдмреА рдкреВрдВрдЫ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рд╕рднреА рдЬрдЯрд┐рд▓ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред (рдЗрд╕ рдмрд╛рдд рдХреЗ рдкреНрд░рдорд╛рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд░рд▓ рд╕рдорд░реНрдерди рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╣реИ рдФрд░ рд╕рд╛рде рдореЗрдВ рд▓рдВрдЧрдбрд╝рд╛ рд░рд╣рд╛ рд╣реИред)

рдЪреВрдВрдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ 2017 рдореЗрдВ рд╡рд╛рдкрд╕ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛, рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рдмрджрд▓ рдЧрдИ рд╣реИрдВ рдЬреЛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВред рдкрд╣рд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдЯреЗрди рд╣реИ, рдЬреЛ рдЯреЗрдВрд╕рд░ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд╕реА ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ TH/THC рдХреЛрдб рдХреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреЗрд╕реНрдЯ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕рднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реАрдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЖрдк C++ рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ Python рдерд╛ рдФрд░ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдЪрд▓реЗрдЧрд╛ред рджреВрд╕рд░рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдЯреАрдИрдПрди рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕реА10 рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдЯреЗрди (рдЬреЛ рдПрдХ рдмрдВрдж рдЪреАрдЬ рд╣реИ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЦреБрд▓реЗ рдмреИрдХрдПрдВрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ ' t рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PyTorch рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдирд╛ рд╣реИ, рдмрд╕ рдХреЛрдб рдХреА рдПрдХ рдирдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, @Roger-luo рдФрд░ @PhilippPelz , рд╣рдо рдЬрдЯрд┐рд▓ рдмреИрдХрдПрдВрдб рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗред рдореБрдЭреЗ рдмрддрд╛рдУ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛред

@ezyang рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрдирд╢рдХреНрддрд┐ рдХреА рдХрдореА рд╣реИ, рддреЛ рдореИрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рднрд╛рдЧ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЕрднреА рдЕрдкрдиреА рдкреАрдПрдЪрдбреА рд╢реБрд░реВ рдХреА рд╣реИ (рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░рд╛ рдЕрдВрддрд░рд╛рд▓ рд╡рд░реНрд╖ рд╣реИ), рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдиреА рдереАрд╕рд┐рд╕ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХрдо рд╕реЗ рдХрдоред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ pytorch рдЯреАрдо рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрдбрд╝реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЛрдбрдореИрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╣рдо рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдХреЛ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдмрдбрд╝реЗ рдкреАрдЖрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ рдФрд░ рдпрд╣ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдПрдЧрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ CUDA рднрд╛рдЧ рд╣реЛрдЧреАред рдПрдЯреАрдИрдПрди рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕реАрдкреАрдпреВ рднрд╛рдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ рддреЛ рдореИрдВ рдХреБрдЫ рд╣реА рджрд┐рдиреЛрдВ рдореЗрдВ рд╕реАрдкреАрдпреВ рднрд╛рдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред рд╕реАрдпреВрдбреАрдП рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  1. CUDA рднрд╛рдЧ рдореЗрдВ cuComplex рдЬреИрд╕реЗ рдПрдХрд▓ рдЬрдЯрд┐рд▓ рдорд╛рди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП float2 рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  2. ATen рдХреЗ C++ рднрд╛рдЧ рдореЗрдВ рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ FloatTensor рдФрд░ DoubleTensor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ THC рдореЗрдВ, рдкрд╛рдЗрдЯреЛрд░рдЪ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ/рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░рдХреАрдмреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ cuComplex рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ cuComplex рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ float2 рд╣реИ __shfl_xxx рдлрд╝рдВрдХреНрд╢рди рдореВрд▓ рд░реВрдк рд╕реЗ float2 рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп float2 рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдиреБрдХрд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВред

рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╣рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдирдП рдЬрдЯрд┐рд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдкреБрд░рд╛рдиреЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЗрди-рд╕рдиреНрдирд┐рд╣рд┐рдд рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдЯреАрдИрдПрди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рд╕рдорд╛рди рд╣реИрдВ: std::complex , thrust::complex , cuComplex , float2 рдЬреЛ рдХрднреА-рдХрднреА рдЦрддрд░рдирд╛рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдорд┐рд▓рд╛ рдерд╛, рдФрд░ reinterpreter_cast рд╕рдорд╛рдзрд╛рди рдерд╛)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рджреЗрд╢реА рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╢рд╛рдпрдж рдПрдХ рд╕рдордп рд╕реАрдорд╛ рдпрд╛ рд░реЛрдбрдореИрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЦреБрдж рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ ...

рдПрдХ рдЪреЗрдВрдЬрд▓реЙрдЧ рдерд╛ рдЬрдм рдореИрдВ рд╕реАрдкреАрдпреВ рдмреИрдХрдПрдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВрдиреЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рд▓реЙрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд░реЛрдб рдореИрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рд╡реАрдЬрд╝рд╛ рдЕрднреА (рдСрд╕реНрдЯреНрд░реЗрд▓рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛) рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рдПрдХ рдЕрдВрддрд░рд╛рд▓ рд╡рд░реНрд╖ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣реЗ, рддреЛ рдореИрдВ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рджрд┐рди рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реЛрдЪрд╛ред рдпрд╣ рдереЛрдбрд╝рд╛ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдо рд░реЛрдЬрд░ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдорд░реНрдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдорди рд╣реА рдорди рд╕реЛрдЪрд╛

"рдХрдо рд░рдЦрд░рдЦрд╛рд╡ рдУрд╡рд░рд╣реЗрдбреНрд╕ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдЬрдЯрд┐рд▓ рдЯреЗрдиреНрд╕рд░ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?"

рдЙрдкрд░реЛрдХреНрдд рд▓рдХреНрд╖реНрдп рд╕реЗ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдпрд╣реА рдмрддрд╛ рд░рд╣рд╛ рд╣реВрдБ:

  • рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдЯреЗрдВрд╕рд░ рдПрдХ рдореМрд▓рд┐рдХ рдирдпрд╛ рдЯреЗрдВрд╕рд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ sparse рдЯреЗрдВрд╕рд░ред рдПрдХ рдореМрд▓рд┐рдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рдЦрд░рдЦрд╛рд╡ рдУрд╡рд░рд╣реЗрдб рдФрд░ рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВред рд░рдЦрд░рдЦрд╛рд╡ рдУрд╡рд░рд╣реЗрдб "рдЬрдЯрд┐рд▓ рдмрд┐рдЯреНрд╕ рдХреЛ рдХреМрди рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ?" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди "рдЕрдм рд╕рднреА рдХреЛрд░-рджреЗрд╡реЛрдВ рдХреЛ рдЗрд╕ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдХреЛрдИ рдореМрд▓рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди, рдХреЛрдИ рдПрдЯреАрдИрдПрди рдкрд░рд┐рд╡рд░реНрддрди, рдЖрджрд┐ред"

    • рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ [рдЯреЗрдВрд╕рд░ рд╢реЗрдк x 2] рдпрд╛ [2 x TensorShape] рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛рдиреА рдЯреЗрдВрд╕рд░ рдХрд╛ рдЖрдХрд╛рд░ 2 рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

  • рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдЯреЗрдВрд╕рд░ рд╕рд░рд▓ рд╕реА ++ рдХреА ~ 2k рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓ / рдлрд╝реЛрд▓реНрдбрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдЯреЗрди рдЯреЗрдиреНрд╕рд░ рдПрдкреАрдЖрдИ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛред

    • рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ https://github.com/pytorch/pytorch/issues/6514 рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЬрдЯрд┐рд▓ рдЧреБрдгрди рдХреЛ torch.stack([real1 * real2 - imag1 * imag2, real1 * imag2 + imag1 * real2], dim = -1) рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ real1 = input1[:, :, :, ..., 0]

    • рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИ: рд╣рд╛рдБ, рд╣рдо рдЙрддрдиреЗ рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдЬрд┐рддрдирд╛ рдХрд┐ рд╣рдо рд╕рдм рдХреБрдЫ рдЗрдирд▓рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: "рдХрд┐рддрдиреЗ рд╕реЗ?"ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реНрд╡рд╕реНрде рдФрд░ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ + рдмрдирд╛рдП рд░рдЦрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдХреЗ рдмрджрд▓реЗ рдореЗрдВ 20% рдХрдо рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

    • рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЬрдЯрд┐рд▓ рдлрд╝рдВрдХреНрд╢рди рд╕рдорд░реНрдкрд┐рдд рдХрд░реНрдиреЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЬрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ 20% рд╕реЗ рдЕрдзрд┐рдХ рд╣рд┐рдЯ рд▓реЗ рд░рд╣рд╛ рд╣реЛ, рд╣рдо рдЗрд╕рдореЗрдВ рдХрджрдо рд░рдЦрддреЗ рд╣реИрдВред

рдЗрд╕реЗ [рдЯреЗрдиреНрд╕рд░ рд╢реЗрдк x 2] рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдмреАрдПрд▓рдПрдПрд╕, рдХреНрдпреВрдмрд▓рд╛ рдФрд░ рдореИрдЧреНрдорд╛ рд╕рднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдлреНрд▓реЛрдЯ 2 рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ-рд╕рдВрдЧрдд рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ blas, cublas рдФрд░ magma рдХреЙрд▓ рдХреЛ рдЕрдЬрдЧрд░ рд╕реНрддрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓ рдЧреБрдгрд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 20% рд╣реЛрдЧрд╛, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдФрд░ рдХрд▓реНрдкрдирд╛ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ 4 рдкреВрд░реНрдг рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рд╣реИрдВ?
рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рддрдм рднреА рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдорд╛рд╕реНрдЯрд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╡рд┐рд▓рдп рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред

@PhilippPelz рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рд╣рдо рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо BLAS, cublas рдФрд░ MAGMA рд╕реЗ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЦреЛ рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╕реНрдкреИрд╕ рдЯреЗрдВрд╕рд░ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИ , рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреИрд╕реЗ scipy.sparse , рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ SparseArrays рдореМрд▓рд┐рдХ рдмрд╣реБ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкреИрд╕ рд╕рд░рдгреА рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдорд┐рд╢реНрд░рд┐рдд рджреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░рдгрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХрд╛ рдЗрд▓рд╛рдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... (рдпрд╣рд╛рдВ рдХреЛрдИ рднреА рдореЗрд░рд╛ рдорддрд▓рдм рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ, рд╕рд░рдгреАрдлрд╛рдпрд░, numpy рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдордПрдХреНрд╕рдиреЗрдЯ рдореЗрдВ, рдПрдлрдПрдлрдЯреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреЗрдВрд╕рд░реЛрдВ рдХреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдЬрдЯрд┐рд▓ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ... рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдиреЗ рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдХреЛ complex64 рдФрд░ complex128 рд╕рд╣рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд░реИрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рджреЗрдЦреЗрдВредрдкреНрд░реЛрдЯреЛ

рдкреНрд░рджрд░реНрд╢рди рд╣рд╛рдирд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рддрддреНрд╡-рд╡рд╛рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореИрдк/рдХрдо) рдореЗрдВ рдмрдбрд╝рд╛ рдкреНрд░рджрд░реНрд╢рди рд╣рд╛рдирд┐ рдирд╣реАрдВ рд╣реЛрдЧреА (рдХрдо рд╕реЗ рдХрдо, рдЗрди рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рд╕рдВрдЧрдд рд╣реЛрдЧреА)ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдХреБрдЫ рдмреАрдПрд▓рдПрдПрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ FloatTensor рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ GPU рдкрд░ Complex64Tensor рдХреЗ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдХрд┐рддрдирд╛ рдЦреЛ рджреЗрдВрдЧреЗ рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬреИрд╕реЗ:

  • gemm
  • gemv

рдПрдХ рдорд┐рд╢реНрд░рд┐рдд рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ (рдпрд╛ рдмрд╕ shared_ptr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ):

class ComplexTensor {
    FloatTensor *real;
    FloatTensor *imag;
};

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдореВрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ __shfl_xxx рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рднреА рдПрдХ рдмрд╛рдзрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ torch.fft рдЖрдХрд╛рд░ рдХрд╛ рдПрдХрд▓ рдлреНрд▓реЛрдЯ рдЯреЗрдВрд╕рд░ рджреЗрддрд╛ рд╣реИ [dim1, ..., dimN, 2]

@ezyang C10 рд░рд┐рд▓реАрдЬрд╝ рдХреА рд╕рдордп-рд╕реАрдорд╛ рдХреНрдпрд╛ рд╣реИ? рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рдмрд┐рдВрджреБ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

@PhilippPelz рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ 0.4 рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рд╣рдо рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬреВрди рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реИред

@ezyang рдЖрдкрдиреЗ рдЬреВрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдиреЗ PyTorch рдореЗрдВ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдорддрд▓рдм рд╕реА 10 рдерд╛, рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдирд╣реАрдВред C10 рдЬрдЯрд┐рд▓ рдЬреЛрдбрд╝рдиреЗ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛ред

рд╣рд╛рдБ, C10 рдореЗрдВ Tensor рдкреНрд░рдХрд╛рд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рджреЛрдиреЛрдВ рдХрд╛ рдЦреБрд▓рд╛ рдкрдВрдЬреАрдХрд░рдг рд╣реЛрдЧрд╛ред рддреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рдХреЛрдИ рдИрдЯреАрдП рд╣реИ? рдХреНрдпрд╛ "рдмрд╣реБрдд рдЖрд╕рд╛рди" рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╢рд╛рдпрдж рдЬрд▓реНрджреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛"?

@themightyoarfish рдмрд╣реБрдд рдЖрд╕рд╛рди рд╕реЗ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдкрд░ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ рдЬрд┐рд╕реЗ рдкрд╛рдЗрдЯреЛрд░рдЪ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдХреЛрдИ рдИрдЯреАрдП рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо PyTorch рдореЗрдВ рдЦреБрд▓рд╛ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрдВрдЧреЗ, рддреЛ рдореИрдВ рдХрд╛рдо рдХрд╛ рджрд╛рдпрд░рд╛ рдмрдврд╝рд╛ рджреВрдВрдЧрд╛ред

@ рд╕реМрдорд┐рде рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдЗрд╕ (рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛) рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? PyTorch рдЯреАрдо рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧреА? рдпрджрд┐ рдЖрдк рд╕рд┐рддрдВрдмрд░ рдореЗрдВ рдЪрд╛рд╣реЗрдВ рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рдХреБрдЫ рд╕рдордп рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ QuCumber рдХреЛ рдмрдирд╛рдП рд░рдЦреВрдВрдЧрд╛ (рдпрд╣ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛)

@ рд░реЛрдЬрд░-рд▓реБрдУ рд╣рд╛рдБред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ PyTorch рдмреИрдХрдПрдВрдб рдореЗрдВ рдУрдкрди-рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдЙрдкрд▓рдмреНрдз рд╣реЛ, рддреЛ рдореИрдВ рдЖрдкрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рд╣рдо рд╡рд┐рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@ezyang рдХреНрдпрд╛ рд╕рд┐рддрдВрдмрд░ рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдУрдкрди рдЯрд╛рдЗрдк рд░рдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рд╣реЛрдЧрд╛?

@ рд╕реМрдорд┐рде рдХреВрд▓, рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдореЗрдВред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдкреВрд░реНрдг" рдирдИ рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╣рдо рдЪреАрдЬреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдкреБрди: рд╕рдХреНрд░рд┐рдп рд╣реЛ, рд╣рдо рдЗрд╕реЗ рдирдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдирдП рдЦреБрд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛ред рдкрдВрдЬреАрдХрд░рдгред рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рд╣реЛред)

@ezyang рдЕрдм рддрдХ рдХреЛрдИ рдиреЛрдЯ? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рдерд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╕реЗ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдмрджрд▓ рдЧрдИ рд╣реИрдВред

@ рд░реЛрдЬрд░-рд▓реБрдУ @PhilippPelz рдореИрдВ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рднреА рдЖрдкрдХреА рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореБрдЭреЗ рдЕрдкрдиреА рдкреАрдПрдЪрдбреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ..

@alexgomezalanis рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд▓реИрдХ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреИрдирд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдЪреИрдирд▓ рдХреЙрд▓ #complex-numbers рдмрдирд╛рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рддрдВрдмрд░ рддрдХ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ (рдЕрднреА рднреА рдореЗрд░реЗ рдХреБрдЫ рдЬреВрд▓рд┐рдпрд╛ рдХреЛрдб рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ ...)

BTW, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рд╣рд╛рде рд░рдЦреВрдВ, рдореИрдВ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

@alexgomezalanis рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрд▓реИрдХ рдкрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рддреБрдореНрд╣реЗрдВ рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрддрд╛ред рдирд┐рдордВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдкрддреЗ рдкрд░ рдПрдХ рдИрдореЗрд▓ рднреЗрдЬреЗрдВ: [email protected] ред

@ рд░реЛрдЬрд░-рд▓реБрдУ @alexgomezalanis рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдореБрджреНрджреЗ рдкрд░ рдЬреАрд╡рди рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдореИрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рд┐рддрдВрдмрд░ рдХреЗ рдЕрдВрдд/рдЕрдХреНрдЯреВрдмрд░ рдХреА рд╢реБрд░реБрдЖрдд рддрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкреАрдПрдЪрдбреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╕рдорд░реНрдерди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рднреА рдЕрдкрдиреЗ рд╢реЛрдз рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ тАж рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ 1w+ рд▓реЛрдХ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреАрд╡рдВрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЪрд▓реЛ рд╕реБрд╕реНрдд рдкрд░ рдЪреИрдЯ рдХрд░реЗрдВ!

:) рд╣рд╛рдБ, рдЪрд▓реЛ рд╕реБрд╕реНрдд рдкрд░ рдЪреИрдЯ рдХрд░реЗрдВред рдЕрднреА рдореЗрд▓ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЖрдордВрддреНрд░рдг рдорд┐рд▓рд╛ рд╣реИред

рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкреНрд▓рдЧрдЗрди (рдХреЗрд╡рд▓ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ CPU рдХреЗ рд▓рд┐рдП) рдпрд╣рд╛рдБ рд╣реИ: https://github.com/Roger-luo/pytorch-complex

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдореБрджреНрджрд╛ рдФрд░ рдкреАрдЖрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдиреЛрдЯреНрд╕ рдкреЛрд╕реНрдЯ рдХрд┐рдП рд╣реИрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ PyTorch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╕рдВрдж рд╣реИ - рдпрд╣ TensorFlow рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реЗ рд╢реЛрдз (рдСрдкреНрдЯрд┐рдХрд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ) рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╕рдорд░реНрдерди рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдЕрднреА рднреА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдПрдХ (рдвреАрд▓реА) рд╕рдордп рд╕реАрдорд╛ рдкрддрд╛ рд╣реИ?

рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдЬрд╣рд╛рдВ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ PyTorch рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рддрдХ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдЪреНрдЫрд╛ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХрд┐рддрдиреА рдмрдбрд╝реА рд╣реИред рдореЗрд░реЗ рдХреБрдЫ рд▓реИрдмрдореЗрдЯреНрд╕ рдиреЗ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╕рдорд░реНрдерди рдореЗрдВ рднреА рдЧрд╣рд░реА рджрд┐рд▓рдЪрд╕реНрдкреА рд╡реНрдпрдХреНрдд рдХреА рд╣реИ (рднреМрддрд┐рдХреА рдореЗрдВ, рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдорд╢рд╛рд▓ рд▓рдЧрднрдЧ рдПрдХ рдбреНрд░реЙрдк-рдЗрди рдЬреАрдкреАрдпреВ-рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди NumPy рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдФрд░ рдЕрдЧрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ рддреЛ рднреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдпред

рдирдорд╕реНрддреЗ @benchbartlett

рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдкрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ... рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рд╕рд┐рд░реНрдл рдПрдХ рдЫрд╛рддреНрд░ рд╣реВрдВ (рдХрд╛рдлреА рдЕрд╕реНрдерд┐рд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде), рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкреВрд░реЗ рд╕рдордп рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВред (рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рд╕реЗ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЕрдкрдиреЗ рд╢реЛрдз рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рд╡рд┐рд░рд╛рд╕рдд рдкреИрдХреЗрдЬ рдХреЛ рдорд╢рд╛рд▓ рд╕реЗ рдмреЗрд╣рддрд░ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред)

рдпрджрд┐ рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдЯреЙрд░реНрдЪ рдореЗрдВ рд╣реЛрдирд╛ рдЕрддреНрдпрд╛рд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

https://github.com/PIQuIL/QuCumber/blob/master/qucumber/utils/cplx.py

рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ... рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдкреБрд░рд╛рдиреА TH рд╢реИрд▓реА рдореЗрдВ C рд╕рдВрд╕реНрдХрд░рдг рдерд╛ред

рдпрд╣ рдХреЛрдИ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рд▓рд┐рдП рдореИрдВ CPU рдпрд╛ CUDA рдкрд░ рдЬрдЯрд┐рд▓ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рд╕реАрдорд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдореЗрд░реЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдореИрдВ рдЖрдкрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд░реЗрдкреЛ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред рдФрд░ рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдореБрдЭрд╕реЗ рд╕реНрд▓реИрдХ рдпрд╛ рдИрдореЗрд▓ рдпрд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрдЫреЗрдВ рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рддрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ)ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ PyTorch Slack рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред (рдореИрдВрдиреЗ рдЖрдордВрддреНрд░рдг рдорд╛рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рдИрдореЗрд▓ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдЖрдпрд╛ред) рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдЖрдордВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? ([email protected])

@ рд░реЛрдЬрд░-рд▓реБрдУ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдХрд╛рдВрдЯреЗ рдХреЛ рджреЗрдЦ рд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рдорджрдж рдХрд░реВрдВрдЧрд╛ - рдореЗрд░рд╛ рд╕реА ++ рдЬрдВрдЧ рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдмрддрд╛рдпрд╛, рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЫрд╛рддреНрд░ред QuCumber рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ рдЕрдЪреНрдЫреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╡реЗ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдирд╣реАрдВ рд╣реЛрдВрдЧреА: рдЬрдм рддрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ GPU-рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рдСрдЯреЛрдЧреНрд░рд╛рдб рдФрд░ рдЯреЙрд░реНрдЪ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

@soumith @ezyang PyTorch рдЯреАрдо рд╕реЗ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдВрд╕рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рднреМрддрд┐рдХреА рдореЗрдВ рд▓рдЧрднрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдПрдордПрд▓ рдХреЗ рднреАрддрд░, рдЬрдЯрд┐рд▓-рдореВрд▓реНрдпрд╡рд╛рди рдореЙрдбрд▓ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рд░реБрдЪрд┐ рд░рд╣реА рд╣реИред

@benchbartlett QuCumber рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ AD рдХреЗ рд╕рд╛рде GPU рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ... рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ ... рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╡рд╣ AD рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдБ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореИрдВ https://github.com/FluxML/Flux.jl рдХреЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╢реЛрдз рдХреЗ рд▓рд┐рдП рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЕрдкрдиреЗ рдХреБрдЫ рдкреИрдХреЗрдЬ (рдореБрдЭреЗ рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рдЯреЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде GPU рдкрд░ рдЬрдЯрд┐рд▓ AD рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) ) Source2source AD тАЛтАЛрдкреИрдХреЗрдЬ Zygote.jl рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдкрд░ AD рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЦрдВрдб рджреЛрд╖ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдЗрддрдирд╛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ рдлрд┐рд░ рднреА рдорд╢рд╛рд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдореБрдЭреЗ рдХрднреА-рдХрднреА рдЙрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрд╡рдпрдВ-рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реИрдХ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрд╡рд╛рдВрдЯрдо рднреМрддрд┐рдХреА рдореЗрдВ рд╢реЛрдз рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ GPU рдкрд░ рднреА рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ torch.nn рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдореВрд▓реНрдп рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ autograd рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░реИрдЦрд┐рдХ рдкрд░рддреЛрдВ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╕рдорд╛рди рд░рд╣ рд╕рдХрддреА рд╣реИрдВ . рдФрд░ рдХреБрдЫ рд╕рдХреНрд░рд┐рдпрдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╣рд┐рд▓реНрдмрд░реНрдЯ рд╕реНрдкреЗрд╕ рдореЗрдВ рдорд╛рдирдХ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... (рдЖрдк рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА @GiggleLiu рдХреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

рдкрд╛рдЗрдЯреЛрд░рдЪ-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ GPU рдкрд░ AD рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХрдм рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ ... рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рдмрд╣реБрдд рджреВрд░ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕реАрдкреАрдпреВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рдЕрд╡рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреЗрдбрд╝ рдореЗрдВ рдкреИрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░, рд╕рд┐рдо рд╕рдорд░реНрдерди, рдЗрддреНрдпрд╛рджрд┐), рдпрд╣ рд╕реА ++ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдПрдЯреАрдИрдПрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЯреАрдПрдЪ, рдЖрджрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╣рдо рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рддреЗрдЬреА рд╕реЗ рдЬреЛрдбрд╝ рдкрд╛рдПрдВрдЧреЗред

рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЕрднреА @ezyang рд╕реЗ рдкреВрдЫрд╛ рдерд╛)ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреА рдкреАрдПрдЪрдбреА рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рдорд╣реАрдиреЛрдВ рддрдХ рдЗрд╕ рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВред

рдЗрд╕ рдмреАрдЪ, рдореИрдВрдиреЗ рдЬрдЯрд┐рд▓ рдЧреБрдгрди рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рдЗрд╕реЗ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ: рдЯреЙрд░реНрдЪ._C_._cuda_isDriverSufficient

image

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВ? рдпрджрд┐ рдЖрдк рдЬрдЯрд┐рд▓ рдЧреБрдгрди рдХреЗ рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдХрд┐рд╕реА рднреА рддрд░рд╣, рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг (рднрд▓реЗ рд╣реА рдЧреБрдгрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд: 4 рдХреЗ рдмрдЬрд╛рдп 3) рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдорд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯ рдЯреЗрдВрд╕рд░ рдХрд╛ irfft рдореЗрд░реЗ рддрддреНрд╡-рд╡рд╛рд░ рдЧреБрдгрд╛ рд╕реЗ 10X рддреЗрдЬ рд╣реИред рдХреНрдпрд╛ рдЬрдЯрд┐рд▓ рдЧреБрдгрди PyTorch рдХреЗ C++ рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ?

def complex_mul(x, y, out):
    uavc = x[..., 0] * (y[..., 0] + y[..., 1])
    out[..., 0] = uavc - (x[..., 0] + x[..., 1]) * y[..., 1]
    out[..., 1] = (x[..., 1] - x[..., 0]) * y[..., 0] + uavc
def test_complex_mul_out_tensor(self):
        N, C, H, W, I = 128, 3, 32, 32, 2
        K = 16  # number of filter banks
        repetitions = 1000
        dtype = torch.float
        if torch.cuda.is_available():
            device = torch.device("cuda")
        else:
            device = torch.device("cpu")
        x = torch.randn(N, 1, C, H, W, I, dtype=dtype, device=device)
        y = torch.randn(K, C, H, W, I, dtype=dtype, device=device)
        start_mul_time = time.time()
        out = torch.empty(N, K, C, H, W, I, dtype=dtype, device=device)
        for _ in range(repetitions):
            complex_mul(x, y, out)
        print("multiplication time: ", time.time() - start_mul_time)

рд╣рдо рдЗрд╕реЗ C++ рд╕реЗ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╢реАрд░реНрд╖ рдкрд░ рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВред рдпрджрд┐ рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд╕рдордп рд╕реНрдХреЗрд▓рд░ рдЧреБрдгрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ....

рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ QuCumber рдореЗрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХреНрдпреВрдбрд╛ рдХрд░реНрдиреЗрд▓ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ GPU рдереНрд░реЗрдбреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Python рдореЗрдВ рд╕рдорд░реНрдерди рдХреЗ рд░реВрдк рдореЗрдВ C++ рдмреИрдХрдПрдВрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк SIMD рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП nvprof рдЪрд▓рд╛рдПрдВред

@ рд░реЛрдЬрд░-рд▓реБрдУ @apaszke @soumith рдЗрд╕ рдзрд╛рдЧреЗ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕рдмрдХреНрд▓рд╛рд╕рд┐рдВрдЧ рдЯреЙрд░реНрдЪ рд╕реЗ рдПрдХ рд╕рд╛рде рд╣реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЯреЗрдВрд╕рд░ред

рдореИрдВ рдкрд╣рд▓реА рдЫрдорд╛рд╣реА рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирддрд╛ рд╣реВрдВ, рджреВрд╕рд░реЗ рдХреЛ рдХрд╛рд▓реНрдкрдирд┐рдХ рдорд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЬреЛ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╢реЛрдз рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ Tensorflow рдФрд░ numpy рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрди рдХрд┐рдпрд╛ред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдФрд░ рд╕рднреА рдСрдкреНрд╕ рдЙрдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ!

рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╣реЛрд▓реНрдбрдУрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкреАрдЯреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  1. рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдПред
  2. рдкреАрдкреАрдЖрдИ рд╕рдорд░реНрдерд┐рдд (рдпрд╛рдиреА: рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ)
pip install pytorch-complex-tensor

https://github.com/williamFalcon/pytorch-complex-tensor

рдзрдиреНрдпрд╡рд╛рдж @williamFalcon !

рдпрд╣ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рдЗрдЯреЛрд░рдЪ рдореЗрдВ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реЛрдЧреАред

рдирдорд╕реНрддреЗ, @whmrtm

@ezyang https://github.com/Roger-luo/pytorch-complex/issues/4 рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рд╕рд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧреА (рддрдм рдЖрдк рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдХреГрдкрдпрд╛ рдХреЛрдИ рднреА рдкреАрдЖрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдпрд╛ рдореБрдЭреЗ рдЖрдкрдХреЛ рд╕рд╣рдпреЛрдЧреА рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред

рдореИрдВ рдЧрд░реНрдорд┐рдпреЛрдВ рддрдХ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛, рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдЦрддреНрдо рдХрд░рдиреА рд╣реЛрдЧреАред

рдирдорд╕реНрддреЗ, @whmrtm

@ezyang Roger-luo/pytorch-complex#4 рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рд╕рд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧреА (рддрдм рдЖрдк рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдХреГрдкрдпрд╛ рдХреЛрдИ рднреА рдкреАрдЖрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдпрд╛ рдореБрдЭреЗ рдЖрдкрдХреЛ рд╕рд╣рдпреЛрдЧреА рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред

рдореИрдВ рдЧрд░реНрдорд┐рдпреЛрдВ рддрдХ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛, рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдЦрддреНрдо рдХрд░рдиреА рд╣реЛрдЧреАред

рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╣рд╛рдп @ рд░реЛрдЬрд░-рд▓реБрдУ

рдХреНрдпрд╛ рдореИрдВ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рд╕рдорд░реНрдерди рд╡рд┐рд╖рдп ([email protected]) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрд▓реИрдХ рдЪреИрдирд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВ? рдореИрдВрдиреЗ рдЖрдордВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖред рдЕрднреА рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╣рд╛рдВ рд╕реЗ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/Roger-luo/pytorch-complex/issues/4 рдЕрдм рдПрдХ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИ?

@beconstant рд╣рд╛рдБ, рдпрд╣ рдкреНрд░рд╛рд░рдВрдн рдмрд┐рдВрджреБ рд╣реИ, рдЗрд╕рд╕реЗ рдХреБрдЫ рдкреНрд░рд╕рд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпреВрдбрд╛ рдкрд░ рдЯрд╛рдЗрдк рдкреНрд░рдореЛрд╢рди рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдпрд╣ рд╕реАрдкреАрдпреВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдХреВрдбрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдмрд┐рд▓реНрдб рд╡рд┐рдлрд▓рддрд╛ рд╣реЛрдЧреА)

рдореИрдВ рдЖрдкрдХреЛ рдЖрдордВрддреНрд░рдг рдИрдореЗрд▓ рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддрд╛ (рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд▓реИрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╛рдЗрдЯреЛрд░рдЪ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╣рдо рд╣рдореЗрд╢рд╛ рдореБрджреНрджреЗ/рдкреАрдЖрд░ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ рд░реЛрдЬрд░-рд▓реБрдУ рдареАрдХ рд╣реИ, рд╕рдордЭ рдЧрдпрд╛ :)

рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд┐рд╕реА рдорджрдж рдХреА рдЬрд░реВрд░рдд рд╣реЛ рддреЛ рдмрддрд╛рдПрдВред рдореИрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ pytorch рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред рдкрд╛рдЗрдЯреЛрд░рдЪ-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕/рдореБрджреНрджреЛрдВ/4 рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐?

рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд┐рд╕реА рдорджрдж рдХреА рдЬрд░реВрд░рдд рд╣реЛ рддреЛ рдмрддрд╛рдПрдВред рдореИрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ pytorch рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред рдкрд╛рдЗрдЯреЛрд░рдЪ-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕/рдореБрджреНрджреЛрдВ/4 рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐?

@dylanbespalko рд╣рд╛рдп, рдореБрдЭреЗ рддрддреНрдХрд╛рд▓ рдЬрдЯрд┐рд▓-рдореВрд▓реНрдпрд╡рд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓рд╛рдЧреВ pytorch рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рд╕рд╛рджрд░,
рдЬрд╝реЗрд▓рд░209

рд╣рд╛рдп @ рдЬрд╝реЗрд▓рд░209 ,

рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ @ezyang рдмрдбрд╝реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣рд╛ рд╣реИ ( pytorch-complex/issues/4 )ред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рдПрдХ AMD рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдФрд░ 3 рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдПрдХ Nvidia рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ GPU рд╕рдорд░реНрдерди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдЪрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, CUDA рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкреАрдЖрд░ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдСрдкрд░реЗрдЯрд░ CPU рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ CUDA рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ ...

рдЖрдИрдПрдордПрдЪрдУ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реАрдкреАрдпреВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЬреАрдкреАрдпреВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реАрдкреАрдпреВ рдХреЗрд╡рд▓ рд╕рдорд░реНрдерди рдареАрдХ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкрджреЛрдиреНрдирддрд┐ рд╕рдорд╕реНрдпрд╛ рд╣реИ ( рдкрд╛рдЗрдЯреЛрд░рдЪ-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕/рдореБрджреНрджреЛрдВ/4 рдХреЛ рдПрдлрдмреА рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдХреНрдпрд╛ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдареАрдХ рд╣реИ?

рд╣рд╛рдп @dylanbespalko; рдореИрдВрдиреЗ рд░реЛрдЬрд░-рд▓реБрдУ рдХреЛ рдмрддрд╛рдпрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ (рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рд╣рд╛рдп @ рдЬрд╝реЗрд▓рд░209 ,

рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ @ezyang рдмрдбрд╝реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░ рд░рд╣рд╛ рд╣реИ ( pytorch-complex/issues/4 )ред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рдПрдХ AMD рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдФрд░ 3 рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдПрдХ Nvidia рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ GPU рд╕рдорд░реНрдерди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╣рд╛рдБ, рдореБрдЭреЗ рдЕрдм рдХрд┐рд╕реА GPU рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ MAC рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдореБрдЭреЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реБрдИ рд╣реИрдВред

рд╣рд╛рдп @ рдЬрд╝реЗрд▓рд░ 209 , рдХреНрдпрд╛ рдЖрдк рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкрд╛рдЗрдЯреЛрд░рдЪ-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдХреЗ рдореБрджреНрджреЗ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдХ рдХреЗ рдирдП рдПрдХреНрд╕рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпреЛрдВред

рдореИрдВрдиреЗ рдУрдПрд╕ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ ...

рд╣рд╛рдп @dylanbespalko; рдореИрдВрдиреЗ рд░реЛрдЬрд░-рд▓реБрдУ рдХреЛ рдмрддрд╛рдпрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ (рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдЖрдкрдХреЗ рд╢реАрдШреНрд░ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

1. рдЬрдм рдореИрдВ gcc (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "python setup.py install" рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ:

'torch_complex.cpp' рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдЬреАрд╕реАрд╕реА-рдЕрдкреНрд░рдпреБрдХреНрдд-рдЕрдкреНрд░рдпреБрдХреНрдд-рдкрд░рд┐рдгрд╛рдо-рд╕рд╛рдЗрди-рддреБрд▓рдирд╛-рдЕрдпреЛрдЧреНрдп-рдХреЛрдб-рдбреАрдПрдирдбреАрдИрдмреАрдпреВрдЬреА-рдЬреА-fwrapv-O3-рджреАрд╡рд╛рд░-рд╕рдЦреНрдд-рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк-рдЖрдИ/рдПрдирд╛рдХреЛрдВрдбрд╛3/рд╢рд╛рдорд┐рд▓-рдЖрд░реНрдХ x86_64-рдЖрдИ/рдПрдирд╛рдХреЛрдВрдбрд╛3/рд╢рд╛рдорд┐рд▓-рдЖрд░реНрдЪ x86_64-I/ anaconda3/lib/python3.6/site-packages/torch/include -I/anaconda3/lib/python3.6/site-packages/torch/include/torch/csrc/api/include -I/anaconda3/lib/python3. 6/рд╕рд╛рдЗрдЯ-рдкреИрдХреЗрдЬ/рдЯреЙрд░реНрдЪ/рд╢рд╛рдорд┐рд▓/TH-I/anaconda3/lib/python3.6/рд╕рд╛рдЗрдЯ-рдкреИрдХреЗрдЬ/рдЯреЙрд░реНрдЪ/рд╢рд╛рдорд┐рд▓/THC-I/anaconda3/include/python3.6m -c src/module.cpp -o build/temp.macosx-10.7-x86_64-3.6/src/module.o -g -stdlib=libc++ -std=c++11 -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=cpp
рдЬреАрд╕реАрд╕реА: рддреНрд░реБрдЯрд┐: рдЕрдкрд░рд┐рдЪрд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк '-stdlib=libc++'

рддреНрд░реБрдЯрд┐: рдЖрджреЗрд╢ 'gcc' рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рд╛ 1

2. рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реИрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ:

рдлрд╝рд╛рдЗрд▓ рдореЗрдВ src/module рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╕реАрдкреАрдкреА:2 :
src/CPUComplexType.h:60 рд╕реЗ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
src/CPUComplexTypeImpl.h:102:105: рдЪреЗрддрд╛рд╡рдиреА: 'IntList' рдкрджрд╛рд╡рдирдд рд╣реИ [-Wdeprecated-declarations]
Tensor & CPUComplexType::set_(Tensor & self, Storage Source, int64_t storage_offset, IntList Size, IntList рд╕реНрдЯреНрд░рд╛рдЗрдбреНрд╕) const {
^
/anaconda3/lib/python3.6/site-packages/torch/include/c10/util/ArrayRef.h:273:7: рдиреЛрдЯ: 'IntList' рдХреЛ рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрджрд╛рд╡рдирдд рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
IntList C10_DEPRECATED_USING = ArrayRef . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;
^
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ src/module рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╕реАрдкреАрдкреА:2 :
src/CPUComplexType.h:60 рд╕реЗ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
src/CPUComplexTypeImpl.h:105:76: рддреНрд░реБрдЯрд┐: 'рдкрд░' рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ 'scalarTypeToDataType' рдирд╛рдо рдХрд╛ рдХреЛрдИ рд╕рджрд╕реНрдп рдирд╣реАрдВ
auto source_ = check_storage(source,"source",2, DeviceType::CPU, at::scalarTypeToDataType(CPUComplexTypeInfo::scalar_type));
~~~~^
7 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдФрд░ 2 рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рд╣реБрдИрдВред

рддреНрд░реБрдЯрд┐: рдХрдорд╛рдВрдб 'рдХреНрд▓реИрдВрдЧ' рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рд╛ 1

рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рд╡рд╛рдХрдИ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рд╣реЗ рд▓реЛрдЧреЛрдВ,

рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рдкреНрддрд╛рд╣ рдмрд┐рддрд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдЕрдм рддрдХ рдореИрдВрдиреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ @ рд░реЛрдЬрд░-рд▓реБрдУ рдХреЗ рдкрд╛рдЗрдЯреЛрд░рдЪ-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

@ Zellar209 : рдореИрдВрдиреЗ macOS 10.13.1 рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдП рд╣реИрдВред

  1. рдореМрдЬреВрджрд╛ pytorch рд╡рд┐рддрд░рдг рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рдЯрд╛рдПрдВ
    рдХреЛрдВрдбрд╛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдкрд╛рдЗрдЯреЛрд░рдЪ
    рдкрд╛рдЗрдк рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдорд╢рд╛рд▓
    рдкрд╛рдЗрдк рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдЯреЙрд░реНрдЪ # рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рджреЛ рдмрд╛рд░ рдЪрд▓рд╛рдПрдВ
    рдЕрдЬрдЧрд░ setup.py рд╕реНрд╡рдЪреНрдЫ
    рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ рддреЛ рдкрд╛рдпрдерди рд╕рд╛рдЗрдЯ-рдкреИрдХреЗрдЬ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд╢рд╛рд▓ рдлрд╝реЛрд▓реНрдбрд░ рд╣рдЯрд╛рдПрдВред
    рдкрд┐рдЫрд▓реЗ pytorch рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ (рдпрд╛ рд╣рдЯрд╛рдПрдВ) (рдХреБрдЫ рдЗрд╕рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рдерд╛)ред

  2. PyTorch рд╕рдВрд╢реЛрдзрди 6cb593b88cb0c411690b4957850058329526d87b рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

    git clone [email protected]:pytorch/pytorch.git
    git checkout 6cb593b88cb0c411690b4957850058329526d87b
    git submodule update --init тАФrecursive
    export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../тАЬ}
    MACOSX_DEPLOYMENT_TARGET=10.13 CC=clang CXX=clang++ python setup.py develop
    python
>>> import torch
  1. рдкрд╛рдЗрдЯреЛрд░рдЪ-рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
    python setup.py install
    python setup.py build
    python setup.py test
    # ERROR: test (unittest.loader._FailedTest)
    # ERROR: test_scalar_binary_op (tests.test_tensor.TestComplexTensor)
  1. рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдмрдирд╛рдПрдВ
   from torch_complex import torch
   a = torch.ones(3, dtype=torch.complex128)
   a*a  
   RuntimeError: promoteTypes with complex numbers is not handled yet; figure out what the correct rules should be

@ezyang , @ рд░реЛрдЬрд░-рд▓реБрдУ:

рдЯреЗрдиреНрд╕рд░ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдкреНрд░рдореЛрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ c10/core/ScalarType.h рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реИ AT_ERROR("promoteTypes with complex numbers is not handled yet; figure out what the correct rules should beтАЭ);
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ c8 рдФрд░ c16 рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рдиреА рд╣реИред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ 9515 рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл numpy рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИ?

9515 рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, ScalarType.h рдореЗрдВ рдЗрд╕ рдХреЛрдбрдкрде рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИред

рдореИрдВрдиреЗ ScalarType.h . рдореЗрдВ рдХреЛрдбрдкрде рддрдп рдХрд┐рдпрд╛ рд╣реИ
рдмрд╛рдЗрдирд░реАрдСрдкреНрд╕ (рдРрдб, рд╕рдм, рдорд▓, рдбрд┐рд╡) рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рджреЛрдиреЛрдВ рддрд░реНрдХ рдЯреЗрдВрд╕рд░ рд╣реЛрдВред
рдХреБрдЫ рдЕрдиреНрдп рдЕрдЬреАрдм рдореБрджреНрджреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

@dylanbespalko рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдЪрд╛рд░ рдЬреЛрдбрд╝реЗ рд╣реИрдВ: https://github.com/pytorch/pytorch/pull/11641

рдЖрдк рдмрд╕ рдЗрд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ CUDA рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рдЖрдИрдЖрдИрдЖрд░рд╕реА, рдЬреАрд╕реАрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рд░рдг рдПрдХ рддрд╛рд░ рдмрдЧ рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣рд╛рдВ рдХреБрдЫ рдХрд╛рдордХрд╛рдЬ рдереЗред

рдЖрд╣, рдзрдиреНрдпрд╡рд╛рдж @ рд░реЛрдЬрд░-рд▓реБрдУред рдореИрдВ #11641 рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдХрд▓ рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ред

рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ CUDA рдбрд┐рд╡рд╛рдЗрд╕ рдирд╣реАрдВ рд╣реИ рддреЛ рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ CUDA рдХреЛ рддреЛрдбрд╝рд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реАрдЖрдИ рдореБрдЭреЗ рдмрддрд╛рдПрдЧрд╛?

рд╣рд╛рдВ, рдЬреИрд╕реЗ рд╣реА рдЖрдк рдПрдХ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдмрд╕ рдмреАрдд рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рдЙрд╕реЗ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдпрд╣ рдХрдм рд╣реЛрдЧрд╛ред

@dylanbespalko рд╣рд╛рдп, рдЕрднреА рднреА рдЖрдкрдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ?
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рд╣реЗ рд▓реЛрдЧреЛрдВ,

рдореИрдВрдиреЗ рд░реЛрдЬрд░-рд▓реБрдУ рдХреЗ рдХрдИ рдХрд╛рдореЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдИ рдкреАрдЖрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА CUDA GPU рдирд╣реАрдВ рд╣реИ рдФрд░ CUDA рд╡рд╛рд▓реА CI рдорд╢реАрдиреЗрдВ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИрдВред рдореИрдВ рдЕрднреА CUDA рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ рдЬрдм рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЙрд╕ GPU рдкрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдоред

@ezyang , @Roger-luo

рдореИрдВрдиреЗ рд░реЛрдЬрд░ рдХреЗ рдкреАрдЖрд░ #11641 рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА рд╣реИ:

  • рдпрд╣ рдореЗрд░реА CUDA 9.0 рдорд╢реАрди рдкрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЪрд▓рддрд╛ рд╣реИ
  • рдпрд╣ CI рдорд╢реАрдиреЛрдВ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдЬреЛ CUDA 9.0 . рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ

рдореИрдВрдиреЗ рд╣рд╛рд▓ рдХреЗ рдХреБрдЫ PyTorch рд╡рд┐рдХрд╛рд╕реЛрдВ рдкрд░ рднреА рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА рд╣реИ:

  • @ezyang рдХреА рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдпрд╣ рдмрддрд╛рддреА рд╣реИ рдХрд┐ C++/CUDA рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рдХрд╕реНрдЯрдо рдбрд┐рд╡рд╛рдЗрд╕/рд▓реЗрдЖрдЙрдЯ/dtype рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

    • рдПрдХ рдФрд░ рд╣рд╛рд▓рд┐рдпрд╛ рдкреАрдЖрд░ #21964 рдЬреЛ "ComplexHooksInterface рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди pytorch/test/cpp_extensions/complex_registration_extension.cpp рдкрд░ рд╕реНрдерд┐рдд рдПрдХ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ C++ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдИ "рдЖрдЙрдЯ-рдСрдл-рдЯреНрд░реА" рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреНрд╖рдорддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдмрд╛рдХреА рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд░реНрдерди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреАред рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рд╣реИ:

  1. AVX рдХреЗ рдмрд┐рдирд╛ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ CPU рд╕рдкреЛрд░реНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
  2. рдереНрд░рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ CUDA рд╕рдкреЛрд░реНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред

@ezyang
рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдЖрдЙрдЯ-рдСрдл-рдЯреНрд░реА рдбрд┐рд╡рд╛рдЗрд╕/рд▓реЗрдЖрдЙрдЯ/рдбреАрдЯрд╛рдЗрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдордпрд░реЗрдЦрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдерд╛? рдХреНрдпрд╛ рд╣рдо рдЕрдЧрд▓реЗ 3 рдорд╣реАрдиреЛрдВ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@ezyang

рдХреНрдпрд╛ рдЖрдк AVX/SSE рд╕рдкреЛрд░реНрдЯ рдХреЗ рдмрд┐рдирд╛ CPU рдкрд░ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдирдВрдмрд░ рд╕рдкреЛрд░реНрдЯ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ? рдореИрдВ рдЕрд▓рдЧ рдорд░реНрдЬ-рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрдорд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ:

  • [ ] рд╕реАрдкреАрдпреВ рдмрд╛рдЗрдирд░реАрдСрдк рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [ ] CPU TensorFactories рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [] рд╕реАрдкреАрдпреВ рдлрд┐рд▓ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [] рд╕реАрдкреАрдпреВ рд░реЗрдВрдЬ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [ ] рд╕реАрдкреАрдпреВ рдпреВрдирд░реА рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [ ] рд╕реАрдкреАрдпреВ рдХрд╛ рдЬреЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЧреБрдард▓реА рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
  • [ ] CPU Tensor рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЧреБрдард▓реА рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
  • [ ] CPU ReduceOp рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [ ] CPU PointwiseOps рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [ ] CPU learpOps рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [ ] CPU LinearAlgebraOps рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • [ ] рд╕реАрдкреАрдпреВ рд╕реНрдкреЗрдХреНрдЯреНрд░рд▓рдСрдкреНрд╕ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

рдореЗрд░реА рдпреЛрдЬрдирд╛ рдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЗрдВрдЯреЗрд▓/рдЖрд░реНрдо рд╕реАрдкреАрдпреВ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рд╣реИред

@ezyang ,

рдореИрдВ fft() рдФрд░ var() рдЬреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЯреЗрдВрд╕рд░ рдбреЗрдЯрд╛ рдХреЛ рдЖрдХрд╛рд░ рдХреЗ рдбрдмрд▓ рдЯреЗрдВрд╕рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛: (complex_shape, 2) ред рдпрд╣ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдЯреЗрдВрд╕рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

  1. 'tensor.to(torch.float64): рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрд╛рдЧ рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реА рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдВрд╕рд░ рджреЗрддрд╛ рд╣реИред
  2. 'tensor.view(new_shape): рдирдП рдЖрдХрд╛рд░ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдЬрд╛рд╣рд┐рд░ рд╣реИ рдореИрдВ рдХреБрдЫ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдЬреИрд╕реЗ:

def to_float(tensor):
    return th.stack((tensor.real().type(th.float64), tensor.imag().type(th.float64)), -1)

def to_complex(tensor):
    tensor = tensor.type(th.complex128) 
    return tensor[..., 0] + 1j*tensor[..., 1]

рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рдЬрдм рдореБрдЭреЗ рдХреЗрд╡рд▓ static_cast<double> рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдЯреЗрдВрд╕рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ (old_shape, 2) рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, numpy рдореЗрдВ рдПрдХ рд╣реИрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

a = np.array([1 + 1j], dtype=np.complex128)
a.dtype = np.float64  ## This works

a = torch.tensor([1 + 1j], dtype=torch.complex128)
a.dtype = torch.float64  ## This does not work

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ dtype рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХрд┐рд╕реА рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд▓рдВрдмрд╛рдИ-2 рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реА ++ 11 рдореЗрдВ рдорд╛рдиреНрдп рд╣реИред

рдХрд┐рд╕реА рднреА рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ p рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдиреНрдп рд╕рд░рдгреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП i, reinterpret_cast(p)[2 i] рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛ p[i] рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрд╛рдЧ рд╣реИ, рдФрд░ reinterpret_cast(рдкреА) [2 i + 1] рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛ p[i] рдХрд╛ рдХрд╛рд▓реНрдкрдирд┐рдХ рднрд╛рдЧ рд╣реИред (рд╕реА ++ 11 рдХреЗ рдмрд╛рдж рд╕реЗ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕_рдЯреЗрдиреНрд╕рд░ рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ_рдЯреЗрдиреНрд╕рд░ рдХреЛ рдЖрдХрд╛рд░ (рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕_рд╢реЗрдк, 2) рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдлрд┐рд░ real() рдФрд░ imag() рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдирдИ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред

@dylanbespalko рдореБрдЭреЗ рдбрд░ рдерд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрдм рдкреВрдЫреЗрдВрдЧреЗ :) std::complex рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдкреЙрдЗрдВрдЯрд░ std::complex<float>* рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ float* рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдордореНрдмрд▓ рд╕рдЦреНрдд рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ) рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЬреЛ рднреА fft рдЪреАрдЬ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ fft/var рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЛ рдлреНрд▓реЛрдЯ рдЯреЗрдВрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдЪрдореБрдЪ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдереЛрдбрд╝рд╛ рдЕрдЪрд╛рд░ рдореЗрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬ PyTorch рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд┐рд╕рд╛рд▓ рдирд╣реАрдВ рд╣реИред Storage dtype рд╣рдореЗрд╢рд╛ Tensor dtype рд╕реЗ рд╕рд╣рдордд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ рднрдВрдбрд╛рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдлреНрд▓реЛрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдПрдХ рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЛ рдЖрд░рд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рдЪрд╛рд░ рд╣реИ:

  1. рд╣рдо рд╣рдореЗрд╢рд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ "рдЕрди-рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреНрдб" рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рддреЛ рдПрдХ рдкрд░рд┐рд╕рд░ рдХреЗ рд▓рд┐рдПрд╣рдо рдПрдХ рдлреНрд▓реЛрдЯ рдЯреЗрдВрд╕рд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  2. Tensor dtype рдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ dtype рд╕реЗ рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рддрдирд╛ рдХреЛрдб рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

@ezyang ,

рд╣рд╛рдБ рдпрд╣ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдерд╛ ...

рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ fft/var рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рд╣рд╛рдБ рдпрд╣ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЯреЗрдВрд╕рд░ рдбреЗрдЯрд╛ рдХреЛ std::vector рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХреЛрдб-рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ?

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдкрдХреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЛ рдлреНрд▓реЛрдЯ рдЯреЗрдВрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдЪрдореБрдЪ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, ....

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдиреНрд╕рд░ рдХреЛ рджреЗрдЦрдирд╛ рджреБрд░реНрд▓рдн рд╣реИред рдореИрдВрдиреЗ set_dtype() рдХреЗ рд▓рд┐рдП Tensor $ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВред рдореИрдВрдиреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ dtype numpy рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕рдВрдпреЛрдЧ рд╣реИ?), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рдЖрдк рдбрд┐рдЬрд┐рдЯрд▓-рд╕реЗ-рдПрдирд╛рд▓реЙрдЧ рдХрдирд╡рд░реНрдЯрд░ (рдбреАрдПрд╕реА) рдкрд░ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрдХреНрд╕рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ/рдХрд╛рд▓реНрдкрдирд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЯрд░рд▓реАрд╡ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ рд╕реНрдЯреЛрд░реЗрдЬ рдбреАрдЯрд╛рдЗрдк рд╕реЗ рдЯреЗрдВрд╕рд░ рдбреАрдЯрд╛рдЗрдк рдХреЛ рдбрд┐рдХреВрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреВрдВрдЧрд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреНрдп рдкреНрд░рджрд░реНрд╢рди рдмрд╛рдзрд╛рдПрдВ рд╣реИрдВред

рд╣рд╛рдБ рдпрд╣ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЯреЗрдВрд╕рд░ рдбреЗрдЯрд╛ рдХреЛ std::vector рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХреЛрдб-рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ?

рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдПрдХ рдПрд╕рдЯреАрдбреА :: рд╡реЗрдХреНрдЯрд░, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

Tensor complex_tensor;
assert(complex_tensor.is_contiguous());
std::complex<float>* cp = complex_tensor.data_ptr<std::complex<float>>();
float* fp = reinterpret_cast<float*>(cp);
auto num_floats = complex_tensor.numel() * 2;

рдореИрдВрдиреЗ рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрдХ set_dtype() рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВред рдореИрдВрдиреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рд╣рд╛рдБ, рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдпрджрд┐ рдЖрдк рднреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЕрдиреНрдп dtypes рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯрд┐рдВрдЧ рдЯреЗрдВрд╕рд░ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВ; рдпрд╣ рд╕рдм рдЬрдЧрд╣ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ :)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрдм рдЖрдк рдбрд┐рдЬрд┐рдЯрд▓-рд╕реЗ-рдПрдирд╛рд▓реЙрдЧ рдХрдирд╡рд░реНрдЯрд░ (рдбреАрдПрд╕реА) рдкрд░ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрдХреНрд╕рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ/рдХрд╛рд▓реНрдкрдирд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЯрд░рд▓реАрд╡ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ рд╕реНрдЯреЛрд░реЗрдЬ рдбреАрдЯрд╛рдЗрдк рд╕реЗ рдЯреЗрдВрд╕рд░ рдбреАрдЯрд╛рдЗрдк рдХреЛ рдбрд┐рдХреВрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╣рд╛рдВ, рдЖрдЦрд┐рд░рдХрд╛рд░ рдпрд╣ рдХрд░рдирд╛ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред

@ezyang ,

рдореИрдВ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ CUDA рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рджреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдЧрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  1. cuComplex : рдмрд╣реБрдд рд╣реА рдмреЗрд╕рд┐рдХ рдРрдб, рд╕рдм, mul, div, рд░рд┐рдпрд▓, рдЗрдореЗрдЬ рд╕рдкреЛрд░реНрдЯред
  2. рдереНрд░рд╕реНрдЯ :: рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ : std::complex рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ рдбреНрд░реЙрдк рдЬреЛ рд╣реЛрд╕реНрдЯ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдЬреЛрд░ :: рдЬрдЯрд┐рд▓ рдХрдВрдЯреЗрдирд░ рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдереНрд░рд╕реНрдЯ :: рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ thrust::complex<T> рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╣реЛрд╕реНрдЯ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдореЛрд░реА рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ std::complex<T> рдХреЗрд╡рд▓ рд╣реЛрд╕реНрдЯ рдореЗрдореЛрд░реА рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

__host__ __device__     thrust::complex< T >::complex (const complex< T > &z)  //thrust container
__host__    thrust::complex< T >::complex (const std::complex< T > &z) //stl container.
  1. рдХреНрдпрд╛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реИ рдХрд┐ AT_DISPATCH_COMPLEX_TYPES рдХреЛ $#$ using scalar_t = std::complex<double> $#$ рдХреЗ рдмрдЬрд╛рдп using scalar_t = thrust::complex<double> рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

  2. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП Pytorch рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ std::log рдХреЗ CUDA рд╕рдордХрдХреНрд╖реЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ? рдореБрдЭреЗ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЧрдгрд┐рдд рдХрд░реНрдиреЗрд▓ рдХреЗ рдмрд░рд╛рдмрд░ CUDA рд╣реИ?

  1. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реАрдкреАрдпреВ рдФрд░ рд╕реАрдпреВрдбреАрдП рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ thrust::complex<double> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕реАрдкреАрдпреВ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ; рд╣рдо рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рд░реЛрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕реА рддрд░рд╣ рд╣рдо рдЕрдкрдиреЗ рдЖрдзреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рд░реЛрд▓ рдХрд░рддреЗ рд╣реИрдВ), рдпрд╛ рдЖрдк рдЬреАрдд рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ std::complex<> рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рдЗрдирд░реА рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреА рдкреБрдирд░реНрд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред
  2. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ THCNumerics.cuh рдореЗрдВ рдЧрдгрд┐рдд рдХрд╛ рдЕрдзрд┐рднрд╛рд░ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ?

@iotamudelta рдиреЗ #29547 . рдореЗрдВ C++11 рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рдЙрдард╛рдпрд╛ рд╣реИ

std::real рдХреЗрд╡рд▓ C++14 рд╕реЗ constexpr рд╣реИ

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ std::real() рдХреЛ constexpr рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдПрдЪрд╕реАрд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ __device__ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХреЗред

рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди:

  1. complex<double> рдХреЛ double рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЦреЛрдЬреЗрдВ:
  1. рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬреЗрдВ:

    • std::real рдкрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЙрд▓ aten/src/ATen/native/cpu/zmath.h рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: inline w/ constexpr рдмрджрд▓реЗрдВ:

      inline VALUE_TYPE real_impl (SCALAR_TYPE z) ->
      constexpr VALUE_TYPE real_impl (SCALAR_TYPE z)

      inline std::complex<float> real_impl <std::complex<float>> (std::complex<float> z) -> constexpr std::complex<float> real_impl <std::complex<float>> (std::complex<float> z)

      inline std::complex<float> real_impl <std::complex<double>> (std::complex<float> z) -> constexpr std::complex<float> real_impl <std::complex<double>> (std::complex<float> z)

рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рднреА std::real() рдкрд░ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓ рд╣реИ рдЬреЛ constexpr рдирд╣реАрдВ рд╣реИред

3. рдЕрдЧрд░ рдореИрдВ std::complex . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ::рд╡рд╛рд╕реНрддрд╡рд┐рдХ() рдХреЗ рдмрдЬрд╛рдп std::real() рдпрд╣ C++11 рдЕрдиреБрд░реВрдк рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

  1. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд╕реА ++ 14 рддрдХ рдпреВрдмреА рд╣реИред рдХреНрдпрд╛ std::complex<double> рдХреЛ double рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛?

@iotamudelta , @bddppq , @ezyang ,

рдореИрдВрдиреЗ CUDA рдереНрд░рд╕реНрдЯ :: рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдПрдкреАрдЖрдИ рдкрд░ рдЬрдЯрд┐рд▓ UnaryOps рдФрд░ BinaryOps рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЬреЛрд░ :: рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
aten/src/ATen/native/cuda/zmath.cuh

#pragma once

#include <complex>
#include <thrust/complex.h>

namespace at { namespace native {
namespace {

template <typename TYPE>
struct ztype_cuda {
  using value_t = TYPE; // Complex template type
  using thrust_t = TYPE; // Equivalent thrust type
};

template <>
struct ztype_cuda<std::complex<float>> {
  using value_t = float;
  using thrust_t = thrust::complex<float>;
};

template <>
struct ztype_cuda<std::complex<double>> {
  using value_t = double;
  using thrust_t = thrust::complex<double>;
};

} // end namespace
}} //end at::native

рдлрд┐рд░ aten/src/ATen/native/cuda/BinaryOpsKernel.cu рдореЗрдВ
рдмрджрд▓рдиреЗ рдХреЗ:

void add_kernel_cuda(TensorIterator& iter, Scalar alpha_scalar) {
  AT_DISPATCH_ALL_TYPES_AND2(kHalf, kBool, iter.common_dtype(), "add_cuda/sub_cuda", [&]() {
    auto alpha = alpha_scalar.to<scalar_t>();
    gpu_kernel_with_scalars(iter, [alpha]GPU_LAMBDA(scalar_t a, scalar_t b) -> scalar_t {
      return a + alpha * b;
    });
  });
}

рд╕рд╛рде:

void add_kernel_cuda(TensorIterator& iter, Scalar alpha_scalar) {
  AT_DISPATCH_ALL_TYPES_AND_COMPLEX_AND2(kHalf, kBool, iter.dtype(), "add_cuda/sub_cuda", [&]() {
    using thrust_t = typename ztype_cuda<scalar_t>::thrust_t;
    auto alpha = thrust_t(alpha_scalar.to<scalar_t>());
    gpu_kernel_with_scalars(iter, [alpha]GPU_LAMBDA(thrust_t a, thrust_t b) -> thrust_t {
      return a + alpha * b;
    });
  });
}

рдкреНрд░рд╢рди

  1. @ezyang : рдЧреИрд░-рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, scalar_t рдФрд░ рдЬреЛрд░_рдЯреА рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рдо thrust_t рдХреЛ рдЧреИрд░-рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ scalar_t_c ?
  2. рдЬреЛрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ:
    a) @bddppq : рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ $#$ thrust::complex $#$ рдХреЗ рдмрдЬрд╛рдп cuComplex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
    b) @iotamudelta : ROCm2.7 рдореЗрдВ рд╣рд┐рдк-рдереНрд░рд╕реНрдЯ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп hip_complex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
    рдЬреЛрд░ :: рдЬрдЯрд┐рд▓ cuComplex рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдмрддрд╛рдУ рдХрд┐ рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛред

@iotamudelta

рдореИрдВрдиреЗ std::real() рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ std::complex:: рдЕрд╕рд▓реА() рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдЧрд╛ред

рд╣рд╛рдп @dylanbespalko ,

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @iotamudelta рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП cast_and_store рдореЗрдВ C10_HOST_DEVICE рдЧреБрдо рд╣реИ, рдпрд╣ рдПрдХ рдпреВрдмреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрд╕ рдХреЛрдб рдкрде рдХреЛ рдХрднреА рднреА GPU рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗрд╡рд▓ GPU TensorIterator рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЯрд╛рдЗрдк рдкреНрд░рдореЛрд╢рди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдХрд┐ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ GPU рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рдерд╛, рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП cast_and_store рдореЗрдВ рдЕрднреА C10_HOST_DEVICE рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдирд╣реАрдВ рд╣реИ рдФрд░ std::real рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ- рдХреЗрд╡рд▓ рд╕рдорд╛рд░реЛрд╣ред рдпрд╣рд╛рдВ рдХреЛрдИ рдпреВрдмреА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЖрдк GPU рдореЗрдВ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдЯрд╛рдЗрдк рдкреНрд░рдореЛрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо https://github.com/pytorch/pytorch/blob/master/c10/core/ScalarType.h#L398 рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - L420, рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдкрде рдкрд░ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдВрд╢реЛрдзрди рдХрд░рдиреЗ рдкрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдмреЗрд╢рдХ, рдЖрдкрдХреЛ C10_HOST_DEVICE рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @iotamudelta https://github.com/pytorch/pytorch/pull/29547 рдореЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ C10_HOST_DEVICE рдЬреЛрдбрд╝рдирд╛ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЕрднреА рднреА рд╕реА ++ 11 рдкрд░ рдпреВрдмреА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @iotamudelta рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╡рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ: std::complex::real() рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП std::real рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк https://github.com/pytorch/pytorch/blob/master/c10/util/TypeCast.h рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк fetch_and_cast рдХреЗ рдЕрдВрджрд░ рджреЗрдЦреЗрдВрдЧреЗ, рдХреБрдЫ рдРрд╕рд╛ рд╣реИ:

#ifndef C10_HOST_DEVICE
    AT_FORALL_COMPLEX_TYPES(FETCH_AND_CAST_COMPLEX_CASE)
#endif

рдпрд╣ рдХреЛрдб рдкрде GPU рдкрд░ рдЕрдХреНрд╖рдо рд╣реИред рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдореБрдЭреЗ complex<float> рдФрд░ complex<double> рдХреЗ рдмреАрдЪ fetch_and_cast рдФрд░ cast_and_store рдХреЗ рдмреАрдЪ рдХреЛрдИ рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╡рд░реЗрдЬ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рд╕реАрд╕реА: @ezyang рдФрд░ @bddppq

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ @dylanbespalko , рдЕрдЧрд░ рдЖрдк рдЕрдкрдиреЗ рдкреАрдЖрд░ рдореЗрдВ TypeCast.h рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реАрд╕реА рдХрд░реЗрдВред

рдареАрдХ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдЖрд░рдПрдо рдкрд░ torch.real() рдФрд░ torch.imag() рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ рдЗрд╕рдореЗрдВ рд╣реВрдВ рддреЛ рдореИрдВ TypeCast.h рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХреЛ рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдкреАрдЖрд░ рдкрд░ рд╕реАрд╕реА рдХрд░реВрдВрдЧрд╛ред

рдЯрд┐рдкреНрдкрдгреА рджреНрд╡рд╛рд░рд╛ рдбреНрд░рд╛рдЗрд╡ рдХрд░реЗрдВ: @smessmer рд╣рдореЗрдВ C++14 рдкрд░ рд▓реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ UB рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣рд╛ рд╣реИ, рдЕрдЧрд░ рдпреВрдмреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

@ezyang : рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред Eigen рдЬреИрд╕реА рдЕрдзрд┐рдХрд╛рдВрд╢ рддреГрддреАрдп рдкрдХреНрд╖ рд╕рд╛рдордЧреНрд░реА рдЕрднреА рднреА std::real() рдмрд╣реБрдд рдЙрджрд╛рд░рддрд╛рдкреВрд░реНрд╡рдХ рдХреЙрд▓ рдХрд░рддреА рд╣реИред

рдЧреИрд░-рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреЗрд▓рд░_рдЯреА рдФрд░ рдереНрд░рд╕реНрдЯ_рдЯреА рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧреИрд░-рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдЬреИрд╕реЗ scalar_t_c рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЪрд░ рдирд╛рдо рдереНрд░рд╕реНрдЯ_рдЯреА рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ?

рдореБрдЭреЗ рдмрд╣реБрдд рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди scalar_t_c thrust_t рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ ( c рдХрд╛ рд╡реИрд╕реЗ рднреА рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?) рдпрд╣рд╛рдВ рдкреНрд░рд╢реНрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕реЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдЗрд░рд╛рджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реЛред

рдареАрдХ рд╣реИ, рдореИрдВ рд╕рд╛рде рд░рд╣реВрдВрдЧрд╛ thrust_t ред рдЕрдЧрд░ рдХреЛрдИ ztype_cuda<>() рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рддреЛ рдЙрдиреНрд╣реЗрдВ рддреБрд░рдВрдд рдкрддрд╛ рдЪрд▓ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ scalar_t рдЧреИрд░-рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП thrust_t рд╣реИред

рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ https://github.com/pytorch/pytorch/pull/29612

рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pytorch рдХреЛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐ рд╣реЛ рд░рд╣реА рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж @dylanbespalko рдЗрд╕ рдкрд░ рдкрд╣рд▓ рдХрд░рдиреЗ рдФрд░ рд╕рд╛рде рд╣реА CUDA рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП! рдЙрдЪреНрдЪ рд╕реНрддрд░ рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдЧрддрд┐ рдХреНрдпрд╛ рд╣реИ? рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ (рдмрд╛рдЗрдирд░реА рдСрдкреНрд╕) рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CUDA рд╕рдорд░реНрдерди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд╕рдордпрд░реЗрдЦрд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рд╢реБрдХреНрд░рд┐рдпрд╛!

рд╣рд╛рдп @sunilkpai ,

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЦреБрд▓рд╛ рдкреАрдЖрд░ рд╣реИ рдЬреЛ CUDA: #30295 рдкрд░ рдмрд╛рдЗрдирд░реА рдФрд░ рдпреВрдирд░реА рдСрдкреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдкрд┐рдЫрдбрд╝реЗ рдкреНрд░рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ abs() рдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреЛ tools/autograd/derivatives.yaml . рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП /dz abs(z) = z/abs(z) ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛ sgn(z) . рд╕реЗ рдзреАрдореА рд╣реЛрдЧреА

@dylanbespalko рд╢рд╛рдпрдж рдореЗрд░реА рд░рд┐рдкреЛрд░реНрдЯ https://arxiv.org/pdf/1701.00392.pdf рдореЗрдВ рдЯреЗрдмрд▓ 4.1, 4.2 рдФрд░ 4.3 рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдЯрд┐рд▓ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ (рд╡рд┐рд░реНрдЯрд┐рдВрдЧрд░ рдХреИрд▓рдХреБрд▓рд╕) рдХреЗ рд▓рд┐рдП, рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
рд╡реНрдпреБрддреНрдкрдиреНрди wrt z рдпрд╛ z рд╕рдВрдпреБрдЧреНрдо рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ред
рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди wrt z рд╕рдВрдпреБрдЧреНрдо рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИред
рдпрд╣ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдЕрдкрдбреЗрдЯ рдХреЛ рд╕рдВрдпреБрдЧреНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ:

  • рд╡реНрдпреБрддреНрдкрдиреНрди wrt z рдХреЗ рд▓рд┐рдП z = x + jy : dJ/dz = dJ/dx -j dJ/dy
  • рд╡реНрдпреБрддреНрдкрдиреНрди wrt z.conj рдХреЗ рд▓рд┐рдП z = x + jy : dJ/dz.conj = dJ/dx + j dJ/dy

рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ, рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╕рдордп рд╡реНрдпреБрддреНрдкрдиреНрди wrt z рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реНрдпреБрддреНрдкрдиреНрди d abs(z) / d z = z.conj / abs(z) рд╣реИред рдЬрдм рдЖрдк рджреВрд╕рд░реА рдкрд░рд┐рднрд╛рд╖рд╛ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк @Randl рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдФрд░ рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИрдВред

рдПрдХ рдЕрдиреНрдп рдСрдкрд░реЗрд╢рди рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднреМрддрд┐рдХреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) exp() рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╣реИред рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ tf.exp(x + iy) = tf.exp(x) * (tf.cos(y) + 1j * tf.sin(y)) рд╣реИред рдХреНрдпрд╛ рдпрд╣ pytorch рдореЗрдВ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзрд╛ рд╣реИ?

@sunilkpai , @boeddeker , @Randl ,

рдЬрдЯрд┐рд▓ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред

рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕реЗ PyTorch рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рд╣реЛрддреА рд╣реИрдВ:

  • рдПрдХ .cpp рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рдЖрд╡рд╢реНрдпрдХ рдЧрдгрд┐рдд рдХрд░реНрдиреЗрд▓ рдкрдВрдЬреАрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИред
  • рдПрдХ test/ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд┐рд╕рдореЗрдВ pytorch рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╣реБрдд рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред
    рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдХрд░реНрдиреЗрд▓ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ (рдФрд░ рдЕрдиреНрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВ)ред

рдореИрдВ рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛?

  • рдЯреЗрдВрд╕рд░ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рд╕реБрдВрджрд░-рдкреНрд░рд┐рдВрдЯ рд╕реНрд╡рд░реВрдкрдг рд╣реИ рдЬреЛ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИрдВред

    • рдкреНрд░рд┐рдВрдЯ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк tensor.py рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    • рдпрд╛, рдЖрдк рдмрд╕ Pytorch рдЯреЗрдВрд╕рд░ рдХреЛ Numpy рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд┐рддрд┐:

  • рд╕реАрдкреАрдпреВ рдХрд╡рд░реЗрдЬ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

    • рдХрд░реНрдиреЗрд▓ рдХреЛ PyTorch рдХреЗ рдЕрдВрджрд░ 'aten/src/ATen/native/cpu/ </li> <li>Complex number specific code is under 'aten/src/ATen/native/cpu/zmath.h рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

    • Intel AVX256 рддреНрд╡рд░рдг 'aten/src/ATen/cpu/vec256/` рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИ



      • @sunilkpai : рдореИрдВ рдХреНрд╕реНрдк рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдерд╛ред рдпрд╣ рд╡рд╣ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЙрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


      • рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реИрдВред



  • GPU рдХрд╡рд░реЗрдЬ рдмрд╛рдЗрдирд░реА рдФрд░ рдпреВрдирд░реА рдСрдкреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИ:

    • рдХрд░реНрдиреЗрд▓ рдХреЛ PyTorch рдХреЗ рдЕрдВрджрд░ 'aten/src/ATen/native/cuda/* </li> <li>Complex number specific code is under 'aten/src/ATen/native/cuda/zmath.cuh рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

    • thrust::complex<T> рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реНрдиреЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕:

  • C-рдЖрдзрд╛рд░рд┐рдд TH рдХрд░реНрдиреЗрд▓ рдХреЛ C++ ATen рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

    • рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдВрдб () рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

    • рдХреБрдЫ рдЕрдиреБрдХреНрд░рдордг рд╕рдВрдЪрд╛рд▓рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

    • рд╡рд░реНрддрдорд╛рди рдореЗрдВ 168/1300 рдЧрдгрд┐рдд рдХрд░реНрдиреЗрд▓ (рдЕрдХреНрдЯреВрдмрд░ рдореЗрдВ 230 рд╕реЗ рдиреАрдЪреЗ) рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ TH рд╕реЗ ATen рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  • рдореИрдВ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдирдВрдмрд░ рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдХрд░реНрдиреЗрд▓ рдПрдЯреЗрди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

--

рдПрдлрд╡рд╛рдИрдЖрдИред рдЬрдЯрд┐рд▓ рд╡реНрдпреБрддреНрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдордиреЗ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рдХреА рдФрд░ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рдЪреИрдирд░реВрд▓реНрд╕ рдореЗрдВ рд╣реИ (рдпрд╣ рднреА рджреЗрдЦреЗрдВ: http://www.juliadiff.org/ChainRules.jl/dev/api.html#ChainRulesCore.Wirtinger ) рдФрд░ рдЕрдм Zygote . рдЖрдо рддреМрд░ рдкрд░, рд▓реЛрдЧреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ
\partial L/\partial adjoint(z) рдврд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ (рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдХрдореА рдХреА рджрд┐рд╢рд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╡реНрдпреБрддреНрдкрдиреНрди \partial L/\partial z рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓рдЧ рд╣реИ, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рд╣рдо рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рдПрдбреА рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдЪрд╛рд╣рддреЗ рд╣реИрдВ . рд╡рд┐рд╕реНрддреГрдд рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ChainRules рдпрд╛ Zygote/lib рдореЗрдВ рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЪреВрдВрдХрд┐ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрд▓рдЧ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИ, рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрдбрд╝рд╛ рдкрд╛рд╕ рдЬреИрд╕реЗ matmul рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рдЬреИрд╕реЗ adjoint(A) * B )

рдореИрдВ рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛?
рдЯреЗрдВрд╕рд░ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рд╕реБрдВрджрд░-рдкреНрд░рд┐рдВрдЯ рд╕реНрд╡рд░реВрдкрдг рд╣реИ рдЬреЛ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
рдкреНрд░рд┐рдВрдЯ рд╕реНрд╡рд░реВрдкрдг рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк tensor.py рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╛, рдЖрдк рдмрд╕ Pytorch рдЯреЗрдВрд╕рд░ рдХреЛ Numpy рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП https://github.com/Roger-luo/pytorch-complex рдореЗрдВ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рд╣рд┐рд╕реНрд╕рд╛ рддрдп рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдорд╛рд╕реНрдЯрд░ рдиреЗ рдЕрддреАрдд рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рд╡рд░реНрд╖ред рдЖрдк рдЗрд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдЧрд░ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИ, рдореИрдВ рдЕрдм рдЗрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

@dylanbespalko рдореИрдВ рдкрд╛рдЗрдЯреЛрд░рдЪ рдЗрдВрдЯрд░реНрдирд▓ рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдиреБрднрд╡рд╣реАрди рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ! рдореИрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ aten/src/ATen/cpu/vec256/* рдореЗрдВ рдЬреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ std::exp(std::complex) рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ: https://en.cppreference.com/w/cpp/numeric/complex/exp рдХреЗ рдиреЛрдЯреНрд╕ рджреЗрдЦреЗрдВред рдореБрдЭреЗ рдпрд╣ рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрди рдСрдкреНрд╕ рдХреЛ CUDA рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдХрд▓реНрдкрдирд╛, conj рдФрд░ рдХреЛрдг рддрдХ рд╕реАрдорд┐рдд рд▓рдЧрддрд╛ рд╣реИ?)

@sunilkpai ,

рдореИрдВрдиреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рдореАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ exp() рдХреЗ рд▓рд┐рдП AVX рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рд╣реИред

рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ PyTorch рдореЗрдВ рд╣рд╛рд▓ рдХреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЯреВрдЯ рдЧрдИ рдереАрдВред рдореИрдВрдиреЗ рдЗрдиреНрд╣реЗрдВ #30871 рдореЗрдВ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

@dylanbespalko

рдХреНрдпрд╛ TH рд╕реЗ Aten рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рд╕рдордп-рд╕реАрдорд╛ рд╣реИ?
рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдкрд╛рдЗрдЯреЛрд░рдЪ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рдордХрд╛рдЬ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╡рд╛рдХрд┐рдл рдирд╣реАрдВ рд╣реВрдВ?

рдореБрдЭреЗ arxiv рдкрд░ рдЬрдЯрд┐рд▓ svd рдХреЗ рдмреИрдХрдкреНрд░реЛрдкреЗрдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрддреНрд░ рдорд┐рд▓рд╛ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдореБрдЭреЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╣рд╛рдБ рд╣реИ

рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@ рдЬреИрдХрдм-рдЕрдирдлреНрд░реАрдб

https://github.com/pytorch/pytorch/wiki/TH-to-ATen-porting-guide

TH рдХрд░реНрдиреЗрд▓ C рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд╣рд╛рдВ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд░реБрдЪрд┐ рд╣реИред рдЖрдк aten/src/ATen/native/native_functions.yaml рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд░реНрдиреЗрд▓ рдкрдВрдЬреАрдХреГрдд рд╣реИ:

legacy::cpu::_th рдЦреЛрдЬреЗрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ TH рдХрд░реНрдиреЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ 3 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред
legacy::cpu::_thnn рдЦреЛрдЬреЗрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ TH рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд░реНрдиреЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ 3 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред

рдкреНрд░рддреНрдпреЗрдХ рдХрд░реНрдиреЗрд▓ рдЖрдорддреМрд░ рдкрд░ 3 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ:
1. рдирд┐рдпрдорд┐рдд рдХрд░реНрдиреЗрд▓ y = рдЬреЛрдбрд╝реЗрдВ (рдП, рдмреА)
2. рдЗрди-рдкреНрд▓реЗрд╕ рдХрд░реНрдиреЗрд▓ a = add_(a, b)
3. рдЖрдЙрдЯрдкреБрдЯ рдХрд░реНрдиреЗрд▓ add_out(a, b, out=y)
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдореЗрд╢рд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп 2 рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред

рдПрдирдПрди рдХрд░реНрдиреЗрд▓ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХрдо рдирд┐рд░реНрднрд░ рдХрд░реНрдиреЗрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЧреБрдард▓реА рдХреЛ рдЙрд▓реНрдЯреЗ рдХреНрд░рдо рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдк рдХрдо рд╕рдордЧреНрд░ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗред

рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ https://github.com/pytorch/pytorch/issues/24507 , рд╕рд╛рде рд╣реА cc @VitalyFedyunin

рдпрд╣рд╛рдВ #32437 рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд░реНрдерди рдкрд░ рдПрдХ рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрддрди рд╣реИред рдореИрдВ рдЖрдЬ рд╕реАрдкреАрдпреВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд░реНрдерди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдСрдЯреЛрдЧреНрд░реИрдб рд╕рдкреЛрд░реНрдЯ

  • рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред
  • angle() , real() , imag() , conj() рд╕рднреА рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдПред
  • abs() рдХреЛ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред (рдКрдкрд░ @boeddeker рдФрд░ @Randl рд╕реЗ рдиреЛрдЯреНрд╕ рджреЗрдЦреЗрдВ)

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдорд░реНрдерди

рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд░реНрдерди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрдЙрдЯ-рдСрдл-рдЯреНрд░реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ:

рдЗрди-рдЯреНрд░реА рдХреЛрдб

  • рдЧрдгрд┐рдд рдСрдкреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди-рдЯреНрд░реА (PyTorch рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЕрдВрджрд░) рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  • рдЗрди-рдЯреНрд░реА рдкрд╛рдЗрдЯреЛрд░рдЪ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд░реНрдерди рдХреЛ рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдЯреВрдЯ рдЬрд╛рддреА рд╣реИрдВ)ред
  • PyTorch TH рд╕реЗ ATen (#24507) рдХреА рдУрд░ рдкрд▓рд╛рдпрди рдХрд░ рд░рд╣рд╛ рд╣реИред
    - TH рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдореИрде рдХрд░реНрдиреЗрд▓ рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
    - рдХреЗрд╡рд▓ ATen рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЧреБрдард▓реА рд╣реА рд╕рдореНрдорд┐рд╢реНрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреА рд╣реИред
  • рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ PyTorch рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдЙрдЯ-рдСрдл-рдЯреНрд░реА рдХреЛрдб

  • рдХрдИ PyTorch рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  • рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдорд╣рддреНрд╡ рдХреА рдЪрд╛рд░ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ:

    • setup.py: pytorch рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред

    • [CPU/CUDA/FPGA]ComplexType.cpp: CPUType.cpp рдпрд╛ CUDAType.cpp рдХреЗ рд╕рдорд╛рди рдЧрдгрд┐рдд рдХрд░реНрдиреЗрд▓ рдкрдВрдЬреАрдХрд░рдг

    • test/test_torch.py: рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдХрд░реНрдиреЗрд▓ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдПрдЯреЗрди рд╕рдорд░реНрдерди рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рддред

    • test/test_autograd.py: рдСрдЯреЛрдЧреНрд░реИрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ред

рдЖрдЙрдЯ-рдСрдл-рдЯреНрд░реА PyTorch рдПрдХреНрд╕рдЯреЗрдВрд╢рди

  1. cpu_strided_complex
    - [рдПрдХреНрд╕] рдХреЙрдкреА рдХрд░реНрдиреЗрд▓
    - [] TensorFactories (th_random, th_uniform, th_normal)
    - [рдПрдХреНрд╕] рд░реЗрдВрдЬ рдлреИрдХреНрдЯреНрд░реАрдЬ
    - [x] рдмрд╛рдЗрдирд░реАрдСрдкрдХрд░реНрдирд▓реНрд╕
    - [x] UnaryOpKernels
    - [x] рдУрдкрдХрд░реНрдирд▓реНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ
    - [рдПрдХреНрд╕] рдкрд╛рд╡рд░ рдХрд░реНрдиреЗрд▓
    - [x] ReduceOpKernels (th_min, th_max, рдХреБрдЫ рдорд╛рдирджрдВрдб рдЬрдЯрд┐рд▓ рд╕рдВрдпреБрдЧреНрдо рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)
    - [ ] IndexOpKernels (th_masked_select_bool, th_set, th_gather, th_cat)
    - [x] рдкреНрд╡рд╛рдЗрдВрдЯрд╡рд╛рдЗрдЬ рдСрдкреНрд╕
    - [рдПрдХреНрд╕] рд▓реЗрд░реНрдк рдСрдкреНрд╕
    - [ ] BlasOps (th_mv, th_mm, th_fmod, th_eig)
    - [] рд▓рд┐рдирдкреИрдХрдСрдкреНрд╕ (рдмреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)
    - [] рд╕реНрдкреЗрдХреНрдЯреНрд░рд▓рдСрдкреНрд╕ (рд╕рдорд░реНрдерд┐рдд, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХреА рдЬрд░реВрд░рдд рд╣реИ)

    1. cuda_strided_complex



      • [x] рдХреЙрдкреА рдХрд░реНрдиреЗрд▓


      • [ ] TensorFactories (рд╕реАрдкреАрдпреВ рд╕рдорд╕реНрдпрд╛рдПрдВ рджреЗрдЦреЗрдВ)


      • [x] рдмрд╛рдЗрдирд░реАрдСрдкрдХрд░реНрдирд▓реНрд╕


      • [x] UnaryOpKernels (рдЯреВрдбреВ: рдРрдб рдПрдВрдЧрд▓, рд░рд┐рдпрд▓, рдЗрдореЗрдЬ, рдХреЙрдиреНрдЬ)


      • [ ] рдУрдкрдХрд░реНрдирд▓реНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ (рдЯреЛрдбреЛ)


      • [ ] рд░рд┐рдбреНрдпреВрд╕рдСрдкрдХрд░реНрдирд▓реНрд╕ (WARP_SIZE рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢)


      • рдмрд┐рдВрджреБ-рд╡рд╛рд░ рдЧрдгрдирд╛ рд╕реЗ рдкрд░реЗ GPU рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ



  2. vitis_strided_complex

    • Xilinx Vitis рдПрдХ FPGA рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рдВрд╢реНрд▓реЗрд╖рдг рдордВрдЪ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

    • рдЕрдХреНрдЯреВрдмрд░ 2019 рдореЗрдВ рдЬрд╛рд░реА (рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╕реАрдорд┐рдд рд╕рдорд░реНрдерди)ред

    • VIvado HLS (рдПрдореНрдмреЗрдбреЗрдб) рдХреЗ рд╕рд╛рде SDAccel (рд╕рд░реНрд╡рд░) рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред

    • [ ] BinaryOpKernals (рдЬрдирд╡рд░реА рдХрд╛ рдЕрдВрдд)

    • [ ] UnaryOpKernels (рдЬрдирд╡рд░реА рдХреЗ рдЕрдВрдд)

    • [ ] рд░рд┐рдбреНрдпреВрд╕рдСрдкрдХрд░реНрдирд▓реНрд╕ (рдлрд░рд╡рд░реА рдХрд╛ рдЕрдВрдд)ред

    • FPGA рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╡реЗрдХреНрдЯрд░рдХреГрдд рдСрдмреНрдЬреЗрдХреНрдЯ Vec256 PyTorch рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд░реНрдЧ рдХреЗ рд╕рдорд╛рди рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ

    • Vec256 рдпрд╣ рдерд╛ рдХрд┐ рд╕реАрдкреАрдпреВ рдореЗрдВ рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ $C$ рдпрд╛ $R^N$ рдЯреЗрдВрд╕рд░ рд╕реНрдкреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдкрдбреЗрдЯ: https://github.com/pytorch/pytorch/issues/33152

рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ 'рдкрд╛рдЗрдЯреЛрд░рдЪ рдЕрднреА рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ'ред рдЙрд░реНрдл рдЬреЛрдбрд╝, рдЧреБрдгрд╛, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рдирджрдВрдб, рдЬрдЯрд┐рд▓ рднрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рдЖрджрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЗрдЪреНрдЫрд┐рдд рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИред

рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ 'рдкрд╛рдЗрдЯреЛрд░рдЪ рдЕрднреА рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ'ред рдЙрд░реНрдл рдЬреЛрдбрд╝, рдЧреБрдгрд╛, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рдирджрдВрдб, рдЬрдЯрд┐рд▓ рднрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рдЖрджрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЗрдЪреНрдЫрд┐рдд рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИред

рд╣рд╛рдп @redwrasse рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдЯ рд╣реИ рдЬреЛ рдорд╛рд╕реНрдЯрд░ рдкрд░ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдХреБрдЫ рдорд╢рд╛рд▓ рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдФрд░ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ
(рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ 1.6 рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) https://pytorch.org/docs/master/complex_numbers.html?highlight=complexред рдХреНрдпрд╛ рдЖрдк рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рди рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рд╕рдорд░реНрдерди рдФрд░ рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ 'рдкрд╛рдЗрдЯреЛрд░рдЪ рдЕрднреА рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ'ред рдЙрд░реНрдл рдЬреЛрдбрд╝, рдЧреБрдгрд╛, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рдирджрдВрдб, рдЬрдЯрд┐рд▓ рднрд╛рд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рдЖрджрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЗрдЪреНрдЫрд┐рдд рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИред

рд╣рд╛рдп @redwrasse рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдЯ рд╣реИ рдЬреЛ рдорд╛рд╕реНрдЯрд░ рдкрд░ рдЬрдЯрд┐рд▓ рдЯреЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдХреБрдЫ рдорд╢рд╛рд▓ рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рдФрд░ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ
(рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ 1.6 рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) https://pytorch.org/docs/master/complex_numbers.html?highlight=complexред рдХреНрдпрд╛ рдЖрдк рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рди рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рд╕рдорд░реНрдерди рдФрд░ рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @ anjali411 , рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛, рдореБрдЭреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡рд╣ рд╕рд╛рдордиреЗ рд╣реИ рдФрд░ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ 'рдЬрдЯрд┐рд▓ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐' рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рджреЛ ...

рдЬреЛ рд▓реЛрдЧ рдЬрдЯрд┐рд▓ рдСрдЯреЛрдЧреНрд░реИрдб рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ https://github.com/pytorch/pytorch/issues/41857 рдЬреЛ рдЗрд╕ рдмрд╛рдд рдХреЛ рдЫреВрддрд╛ рд╣реИ рдХрд┐ PyTorch рдХрд┐рд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ (JAX рдпрд╛ TF)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕