This Intel® DPC++ Compatibility Tool minimizes code-migration time and assists in the migration of a developer's program that is written in CUDA* to a program written in Data Parallel C++ (DPC++) by generating DPC++ code for the developer wherever possible.
Refer to this article to get more information about semantic versioning followed by this tool.
Key Features
- Support for migration of CUDA* kernels, host and device API calls (for example, memory management, events, math, etc..) and library calls (cuBLAS*, cuSPARSE*, cuSolver*, cuRand*, cuFFT*, Nvidia* Thrust*, CUB*). Typically, 80%-90% of CUDA code migrates to DPC++ code by the tool.
- Warning messages are emitted to command line output and inlined into the generated code, when the code requires manual work to help you finish the application.
- Integration with Visual Studio* 2017 and 2019 on Windows* and Eclipse* on Linux* provides enhanced migration usability.
2021.4.0 Release
New Features
- Partial migration of CUB* API is added.
- Migration of __byte_perm() is added.
- More Thrust API migration is added.
- Experimental feature - migration of grid level synchronization is added.
- Experimental feature - migration using free function queries is added.
- Added support for CUDA* version 11.4 header files.
Changes to Existing Features
- Continous changes to improve conformance with SYCL 2020 specification.
- Intercept-build updates to intercept clang++ and MPI commands.
- Use sycl::accessor instead of dpct::accessor when '--usm-level' is set to none.
Fixed Issues
- When using 'custom-helper-name' option to specify the header file name, the file name in the leading comment of this header file and the guard MACRO name to avoid duplicate header file includes are not changed.
- Slow memory copy performance because of splitting 2D/3D ranges to a chunk of rows.
- Sub-group size attribute is not added to kernel.
- Fixed a set of bugs discovered on migration of Chai*, Rodinia*, SHOC* and QMCPACK*.
- Multiple other bug fixes and improvements.
2021.3.0 Release
New Features
- Some driver API migration related to module, device and kernel launch is added.
- Partial support for CUDA memory fence API migration is added.
- More Thrust and cuRand API migration is added.
- Enhancement on the CUDA event and macro migrations.
- Enabled integration of helper header files into migrated projects via the new option "--use-custom-helper".
- Added support for CUDA* version 11.2 and 11.3 header files.
Changes to Existing Features
- Improved conformance to API changes in SYCL 2020 specification.
- Intercept-build requires python 3 or higher.
Fixed Issues
- Command line option "--process-all" doesn't retain the folder structure.
- DPCT reports that CUDA device code doesn't support variadic functions.
- Crash issue when "--process-all" is specified, output directory specified is in "--in-root" directory, and the same migration command is run two times or more.
- link error of multiple definition of `dpct::malloc_device'.
- Fixed a set of bugs discovered on migration of Rodinia, NAMD and QMCPACK.
- Multiple other bug fixes and improvements.
2021.2.0 Release
New Features
- Partial support for cuFFT* migration is added.
- Partial support for CUDA driver API migration is added.
- Several new Thrust API migration is added.
- Support for a Visual Studio solution with multiple projects migration is added.
Changes to Existing Features
- Improved DPCT helper functions (in namespace of dpct::) to decrease the verbosity of the generated code.
- dpct::malloc_device<T> now receives the number of elements of type T for which storage is to be allocated, instead of the number of bytes to allocate.
Fixed Issues
- Macro migration scenario where function name is passed as macro argument.
- Several issues to support migration of Rodinia/kmeans, Rodinia/mummergpu and SHOC/S3D.
- The parameter sycl::nd_item is inserted to host only function.
- Potential crash in DPCT helper function caused by referring to freed sycl::queue resource.
- VisualStudio integration cannot work when the original project is removed or moved to other directory.
- Multiple other bug fixes and improvements.
Software requirements
Please reference Intel® DPC++ Compatibility Tool System Requirements
How to use Intel® DPC++ Compatibility Tool
Please reference Getting Started Guide for Intel® DPC++ Compatibility Tool
Known Issues or Limitations
- Fortran code is not supported.
- Intel® DPC++ Compatibility Tool migrates memory copy API calls to USM sycl::queue.memcpy() by default. sycl::queue.memcpy() may not provide expected performance when run on DPC++ CPU device. To get better performance, you may try to replace cl::sycl::queue.memcpy() with parallel memcpy implemented by DPC++ kernel or try to migrate the code again with “--usm-level=none” passed to dpct.
- If you use Intel® DPC++ Compatibility Tool to migrate project with compilation database (compile_commands.json) without specifying input files in command line, the Intel® DPC++ Compatibility Tool will try to migrate all source file(s) listed in compilation database together. If kernel function(s) with the same signature is redefined in several file(s) which are used to build different binary or library targets in original project, then the migration result may be wrong. The workaround is to migrate the source file(s) which are used to build one binary or library target together and not mix them with the source file(s) which are used to build the other binary or library target. You can specify the input file(s) to be migrated together in the command line of the Intel® DPC++ Compatibility Tool, or generate a set of the compilation databases by running “intercept-build make sub-target” with different sub-target each time and migrate source files with each compilation database.
Notices and Disclaimers
Intel technologies may require enabled hardware, software or service activation.
No product or component can be absolutely secure.
Your costs and results may vary.
© Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries. Other names and brands may be claimed as the property of others.
No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document.
The products described may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.
Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness for a particular purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or usage in trade.
"