Blurring Boundary Between CPU And

Blurring Boundary Between CPU And

Blurring the Boundary between CPU and GPU Optional subheading Karol Herbst Jérôme Glisse 1 SAME VIRTUAL ADDRESS EVERYWHERE Same virtual address on GPU and CPU aka CL fine grain: • Use memory from C malloc() or C++ new operator • Access mapped file directly from GPU • Migrate, range of virtual address, to GPU memory In short, you can access any of existing data structure (tree, list, ...) from the GPU transparently with no changes on how you allocate those structures. 2 HOW TO USE Allocate your objects: struct mystruct *foo = malloc(sizeof(*foo) * nelems); Migrate your object memory to GPU memory: ptrs[0] = &foo[0]; sizes[0] = sizeof(*foo)*nelems; ... clEnqueueSVMMigrateMem(queue, 1, ptrs, sizes, ...); Pass object pointer as a kernel argument: clSetKernelArgSVMPointer(kernel, 0, foo); 3 HOW IT WORKS All done in the linux kernel and kernel device driver. Works with any compiler (without any changes to the compiler). 4 BEHIND THE SCENE On PCIE address back by GPU memory look like swap GPU support page fault like CPU GPU can access any main memory Mirror CPU page table into GPU page table 5 OpenCL inside Mesa 3D 6 SOME DEFINITIONS Gallium3D is a driver framework to ease developing rendering and media APIs (OpenGL, VDPAU, OpenCL, ...) NIR is an driver IR inside Mesa to ease developing backend compilers by sharing common optimization and lowering passes, supported by most drivers inside Mesa 7 GOAL Main Goal: make it easy to write an OpenCL driver We have Open Souce OpenGL(ES) drivers for most hardware inside Mesa supporting Compute Shaders Based on this work, adding support for OpenCL should be trivial 8 EXISTING COMPONENTS • Gallium3D • clover: OpenCL Frontend of Gallium3D • clang: OpenCL C(++) Frontend • SPIRV-LLVM-Translator: LLVM to SPIR-V converter • vtn: SPIR-V to NIR converter (for Vk/GL4.6) • libclc: OpenCL C builtin library written in OpenCL C • existing OpenGL driver wth compute shader support 9 CONCLUSION Most parts already there, little work left for a fully working OpenCL driver 10 TAKEAWAYS Patches submitted for initial support, including support for the Nouveau driver (Open-Source driver for Nvidia GPUs) First working OpenCL kernel running on freedreno after one day of work by reusing existing infrastructure based on this work SyCL can be used on top of clover as well 11.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    11 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us