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通过任务或嵌套并行建模计算的能力尚未能使其在性能上超越纯数据并行方案。