Π Π΅Π»ΠΈΠ· PoCL 6.0 с нСзависимой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ стандарта OpenCL

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Ρ€Π΅Π»ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° PoCL 6.0 (Portable Computing Language OpenCL), Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандарта OpenCL, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ ΠΎΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ графичСских ускоритСлСй ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ бэкСнды для выполнСния OpenCL-ядСр Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… графичСских ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… процСссоров. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… X86_64, MIPS32, ARM v7, AMD HSA APU, NVIDIA GPU ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… спСциализированных ASIP (Application-Specific Instruction-set Processor) ΠΈ TTA-процСссорах (Transport Triggered Architecture) c Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ VLIW.

РСализация компилятора ядСр OpenCL построСна Π½Π° Π±Π°Π·Π΅ LLVM, Π° Π² качСствС фронтэнда для OpenCL C ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Clang. Для обСспСчСния Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΉ пСрСносимости ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ компилятор ядСр OpenCL ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ рСсурсы для распараллСливания выполнСния ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ VLIW, ΡΡƒΠΏΠ΅Ρ€ΡΠΊΠ°Π»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, SIMD, SIMT, ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ICD-Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²
(Installable Client Driver). ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ бэкСнды для обСспСчСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· CPU, ASIP (TCE/TTA), GPU Π½Π° Π±Π°Π·Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ HSA ΠΈ GPU NVIDIA (Ρ‡Π΅Ρ€Π΅Π· libcuda).

Π’ Π½ΠΎΠ²ΠΎΠΉ вСрсии:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Clang/LLVM 18.0, ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° LLVM 10, 11, 12 ΠΈ 13.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ бэкСнд cpu-tbb, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ для распараллСливания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ планирования выполнСния Π·Π°Π΄Π°Ρ‡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ OneTBB, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Intel.
  • Π’ бэкСндС cpu, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ OpenCL-ядСр Π½Π° CPU, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° стандарта ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования OpenMP, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ clGetDeviceAndHostTimer(), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ cl_pocl_svm_rect, cl_pocl_command_buffer_svm ΠΈ cl_pocl_command_buffer_host_buffer.
  • Π’ бэкСнд «Remote», ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ распрСдСлённых вычислСний Ρ‡Π΅Ρ€Π΅Π· вынос ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ OpenCL Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ хосты Π² сСти, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΏΡƒΡ‰Π΅Π½ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс pocld, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° CG SVM (Coarse-Grain Shared Virtual Memory), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обращСния ΠΊ бэкСнду с использованиСм ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Vsock ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° компиляции ΠΈ связывания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ clCompileProgram() ΠΈ clLinkProgram().
  • Π’ бэкСндС LevelZero, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌ API Level Zero, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€Ρ‹, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ большС 4Π“Π‘, ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ процСссов синхронизации.
  • Π’ бэкСндС CUDA Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sub_group_shuffle ΠΈ sub_group_shuffle_xor, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ Π»ΠΈΠΌΠΈΡ‚ CL_DEVICE_MAX_MEM_ALLOC_SIZE.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru