HPVM 2.0, CPU, GPU, FPGA рд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдПрдХреНрд╕реЗрд▓реЗрдЯрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдХрдореНрдкрд╛рдЗрд▓рд░, рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫред

LLVM рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ HPVM 2.0 (Heterogeneous Parallel Virtual Machine) рдХреЛ рд░рд┐рд▓реАрдЬрдХреЛ рдШреЛрд╖рдгрд╛ рдЧрд░реНтАНрдпреЛ, рдПрдХ рдХрдореНрдкрд╛рдЗрд▓рд░ рдЬрд╕рдХреЛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рд╖рдо рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рд╕рд░рд▓ рдмрдирд╛рдЙрди рд░ CPUs, GPUs, FPGAs, рд░ рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдПрдХреНрд╕реЗрд▓реЗрд░реЗрдЯрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдб рдЙрддреНрдкрд╛рджрди рдЙрдкрдХрд░рдгрд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрдиреЗ рдерд┐рдпреЛред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб Apache 2.0 рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫред

рд╡рд┐рд╖рдо рд╕рдорд╛рдирд╛рдиреНрддрд░ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рд╕рдорд╛рди рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рд▓реЗ рдЬрдЯрд┐рд▓ рд╣реБрдиреНрдЫ рдЬрд╕рд▓реЗ рд╕рдорд╛рдирд╛рдиреНрддрд░рддрд╛ (CPU рдХреЛрд░, рднреЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ, GPU, рдЖрджрд┐), рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢рди рд╕реЗрдЯрд╣рд░реВ рд░ рд╡рд┐рднрд┐рдиреНрди рдореЗрдореЛрд░реА рдкрджрд╛рдиреБрдХреНрд░рдорд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╡рд┐рднрд┐рдиреНрди рдореЛрдбреЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдгрд╛рд▓реАрд▓реЗ рдпреА рдШрдЯрдХрд╣рд░реВрдХреЛ рдЖрдлреНрдиреИ рд╕рдВрдпреЛрдЬрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред HPVM рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рднрдиреЗрдХреЛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрджрд╛ рд╕рдорд╛рдирд╛рдиреНрддрд░-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдПрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдХреЛ рдПрдХреАрдХреГрдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛ, рдЬреБрди рд╕рдорд╛рдирд╛рдиреНрддрд░ рдХрдореНрдкреНрдпреБрдЯрд┐рдЩрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рдорд╛ GPUs, рднреЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ, рдорд▓реНрдЯрд┐-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░рд╣рд░реВ, FPGAs рд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖ рдЧрддрд┐рд╡рд░реНрдзрдХ рдЪрд┐рдкреНрд╕ред

рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рд╡рд┐рдкрд░реАрдд, HPVM рд▓реЗ рд╡рд┐рд╖рдо рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рддреАрди рдХреНрд╖рдорддрд╛рд╣рд░реВ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреЛ - рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рд╕реНрд╡рддрдиреНрддреНрд░ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (IR), рднрд░реНрдЪреБрдЕрд▓ рдирд┐рд░реНрджреЗрд╢рди рд╕реЗрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (V-ISA) рд░ рд░рдирдЯрд╛рдЗрдо рд╕рдордп рддрд╛рд▓рд┐рдХрд╛:

  • HPVM рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд▓реЗ рдХрд╛рд░реНрдп, рдбреЗрдЯрд╛, рд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реНрддрд░рд╣рд░реВрдорд╛ рд╕рдорд╛рдирд╛рдиреНрддрд░рддрд╛ рдХреНрдпрд╛рдкреНрдЪрд░ рдЧрд░реНрди рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдл рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ LLVM рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрджрдЫред HPVM рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд▓реЗ рднреЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд░ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдХреБрд╢рд▓ рдХреЛрдб рдЙрддреНрдкрд╛рджрди рд░ рд╡рд┐рд╖рдо рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдХреВрд▓рди рд╣реЛред
  • рднрд░реНрдЪреБрдЕрд▓ рдЗрдиреНрд╕реНрдЯреНрд░рдХреНрд╢рди рд╕реЗрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (V-ISA) рд▓реЗ рдирд┐рдореНрди-рд╕реНрддрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВрдХреЛ рд╕рд╛рд░ рдмрдирд╛рдЙрдБрдЫ рд░ рдЖрдзрд╛рд░рднреВрдд рд╕рдорд╛рдирд╛рдиреНрддрд░ рдореЛрдбреЗрд▓-рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдл рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рд░ рдореЗрдореЛрд░реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВрд▓рд╛рдИ рдПрдХреАрдХреГрдд рдЧрд░реНрдЫред V-ISA рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдХрдореНрдкреНрдпреБрдЯрд┐рдЩрдХрд╛ тАЛтАЛрд▓рд╛рдЧрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВ рдмреАрдЪ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рд░ рд╡рд┐рд╖рдо рдкреНрд░рдгрд╛рд▓реАрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдЧреБрдорд╛рдЙрди рдирджрд┐рди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред рднрд░реНрдЪреБрдЕрд▓ ISA рд▓рд╛рдИ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬреБрди CPUs, GPUs, FPGAs, рд░ рд╡рд┐рднрд┐рдиреНрди рдЧрддрд┐рд╡рд░реНрдзрдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЪрд▓рд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред
  • рдХрдореНрдкреНрдпреБрдЯреЗрд╢рдирд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд▓рдЪрд┐рд▓реЛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рдг рдиреАрддрд┐рд╣рд░реВ рд░рдирдЯрд╛рдЗрдордорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫрдиреН рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо (рдЧреНрд░рд╛рдл рд╕рдВрд░рдЪрдирд╛) рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рдЖрдзрд╛рд░рдорд╛ рд░ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдЙрдкрд▓рдмреНрдз рдХреБрдиреИ рдкрдирд┐ рд▓рдХреНрд╖реНрдп рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рдВрдХрд▓рди рдорд╛рд░реНрдлрдд рд▓рд╛рдЧреВ рдЧрд░рд┐рдиреНрдЫред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреЛрдб рдЬреЗрдиреЗрд░реЗрдЯрд░рд╣рд░реВ NVIDIA GPUs (cuDNN рд░ OpenCL), Intel AVX рднреЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ, FPGAs рд░ рдмрд╣реБ-рдХреЛрд░ x86 CPUs рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рднрд░реНрдЪреБрдЕрд▓ ISA рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдиреЛрдбрд╣рд░реВ рдЕрдиреБрд╡рд╛рдж рдЧрд░реНрди рд╕рдХреНрд╖рдо рдЫрдиреНред рдпреЛ рдиреЛрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рдХрд┐ HPVM рдЕрдиреБрд╡рд╛рджрдХрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди GPU рд░ рднреЗрдХреНрдЯрд░ рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рддрд▓реЗ рд▓реЗрдЦрд┐рдПрдХреЛ OpenCL рдХреЛрдбрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

HPVM 2.0 рдХреЛ рдкреНрд░рдореБрдЦ рдЖрд╡рд┐рд╖реНрдХрд╛рд░рд╣рд░реВ:

  • рдПрдХ Hetero-C++ рднрд╛рд╖рд╛ рдлреНрд░рдиреНрдЯрдПрдиреНрдб рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ HPVM рдорд╛ рд╕рдВрдХрд▓рдирдХреЛ рд▓рд╛рдЧрд┐ C/C++ рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдбрдХреЛ рд╕рдорд╛рдирд╛рдиреНрддрд░реАрдХрд░рдгрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫред Hetero-C++ рд▓реЗ HPVM рдереНрд░реЗрдб рдЧреНрд░рд╛рдлрд╣рд░реВрдорд╛ рдирдХреНрд╕рд╛ рдЧрд░реНрдиреЗ рдбреЗрдЯрд╛-рд╕реНрддрд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рд░ рд╢реНрд░реЗрдгреАрдмрджреНрдз рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫред
  • Intel FPGAs рдорд╛ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдЧрд░реНрди FPGA рдмреНрдпрд╛рдХрдЗрдиреНрдб рдердкрд┐рдПрдХреЛ рдЫред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди, OpenCL рдХреЛ рд▓рд╛рдЧрд┐ Intel FPGA SDK рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред
  • DSE (рдбрд┐рдЬрд╛рдЗрди рд╕реНрдкреЗрд╕ рдПрдХреНрд╕рдкреНрд▓реЛрд░реЗрд╕рди) рдлреНрд░реЗрдорд╡рд░реНрдХ рдердкрд┐рдПрдХреЛ рдЫ, рдЬрд╕рдорд╛ рдХрдореНрдкрд╛рдЗрд▓рд░ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬреЗрд╕рдирд╣рд░реВ рд░ рджрд┐рдЗрдПрдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЯреНрдпреБрдирд┐рдЩ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рдзрд╛рд╣рд░реВ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдВрдпрдиреНрддреНрд░рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреНред рдлреНрд░реЗрдорд╡рд░реНрдХрд▓реЗ Intel рдмрд╛рдЯ FPGAs рдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рдкреНрд░рджрд░реНрд╢рди рдореЛрдбреЗрд▓ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рд░ HPVM рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХреБрдиреИ рдкрдирд┐ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдХреВрд▓рдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдЗрдБрдХреЛ рдЖрдлреНрдиреИ рдкреНрд░реЛрд╕реЗрд╕рд░рд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред HPVM рд░ LLVM рдбрд╛рдЯрд╛рдлреНрд▓реЛ рдЧреНрд░рд╛рдл рд╕реНрддрд░рд╣рд░реВрдорд╛ рдЕрдиреБрдХреВрд▓рдирд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
  • LLVM рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рд╕рдВрд╕реНрдХрд░рдг 13.0 рдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдПрдХреЛ рдЫред
  • рдХреЛрдб рдЖрдзрд╛рд░, рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ, рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рдиреЗрднрд┐рдЧреЗрдЯ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрди рдХреЛрдбрд▓рд╛рдИ рдкреБрди: рд╕рдВрдЧрдард┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫред
  • рдкрд░реАрдХреНрд╖рдг рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╕реБрдзрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд╡рд┐рднрд┐рдиреНрди HPVM рдШрдЯрдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдердкрд┐рдПрдХрд╛ рдЫрдиреНред

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди