We discuss three SYCL realisations of a simple Finite Volume scheme over multiple Cartesian patches. The realisation flavours differ in the way how they map the compute steps onto loops and tasks: We compare an implementation which is exclusively using a cascade of for-loops to a version which uses nested parallelism, and finally benchmark these against a version which models the calculations as task graph. Our work proposes realisation idioms to realise these flavours within SYCL. The idioms translate to some degree to other GPGPU programming techniques, too. Our preliminary results suggest that SYCL's capability to model calculations via tasks or nested parallelism does not yet allow such realisations to outperform their counterparts using exclusively data parallelism.
翻译:本文讨论了一种基于多笛卡尔补丁的简单有限体积格式的三种SYCL实现。这些实现风格的不同之处在于它们将计算步骤映射到循环和任务的方式:我们将仅使用级联for循环的实现与使用嵌套并行的版本进行比较,并最终将这两种方法与将计算建模为任务图的版本进行基准测试。我们的工作提出了在SYCL中实现这些风格的习惯用法。这些习惯用法在一定程度上也适用于其他GPGPU编程技术。我们的初步结果表明,SYCL通过任务或嵌套并行建模计算的能力尚未使此类实现在性能上超越仅使用数据并行的对应方案。