Abstrakt. Vi presenterar en jämförelse av flera moderna C++-bibliotek som tillhandahåller högnivågränssnitt för programmering av fler- och flerkärniga arkitekturer ovanpå CUDA eller OpenCL. Jämförelsen fokuserar på lösningen av vanliga differentialekvationer och bygger på odeint, en ram för lösningen av system med vanliga differentialekvationer. Odeint är utformat på ett mycket flexibelt sätt och kan lätt anpassas för effektiv användning av bibliotek som MTL4, VexCL eller WienCL med hjälp av CUDA- eller OpenCL-teknik. Vi fann att CUDA och OpenCL fungerar lika bra för problem av stora storlekar, medan OpenCL har högre overhead för mindre problem. Dessutom visar vi att moderna bibliotek på hög nivå gör det möjligt att på ett effektivt sätt använda beräkningsresurserna hos mångkärniga GPU:er eller flerkärniga processorer utan stor kunskap om den underliggande tekniken. Nyckelord. GPGPU, OpenCL, CUDA, C ++, Boost.odeint, MTL4, VexCL, WienCL AMS ämnesklassificeringar. 34-04, 65-04, 65Y05, 65Y10, 97N80 1. Inledning. På senare tid har allmän datoranvändning av grafikprocessorer (GPGPU) fått betydande fart i forskarsamhället. Detta bekräftas både av det ökande antalet GPGPU-relaterade publikationer och GPU-baserade superdatorer i TOP500 1-listan. Större programramar är NVIDIA CUDA och OpenCL. Den förra är en egenutvecklad parallelldatorarkitektur utvecklad av NVIDIA för allmän databehandling på NVIDIA-grafikadaptrar, och den senare är en öppen, royaltyfri standard för plattformsoberoende, parallellprogrammering av moderna processorer och GPU-processorer som upprätthålls av Kronos-gruppen. Till sin natur har de två ramarna sina särskilda för- och nackdelar. CUDA har en mer mogen programmeringsmiljö med en större uppsättning vetenskapliga bibliotek, men är endast tillgänglig för NVIDIA hårdvara. OpenCL stöds på ett brett utbud av hårdvara, men dess inhemska API kräver en mycket större mängd pannplate kod från utvecklaren. Ett annat problem med OpenCL är att det i allmänhet är svårt att uppnå prestandaportabilitet mellan olika maskinvaruarkitekturer. Båda teknikerna kan förse forskarna med moderna GPU:s enorma beräkningsresurser till priset av en brant inlärningskurva. Programmerare måste bekanta sig med ett nytt programmeringsspråk och, ännu viktigare, med ett nytt programmeringsparadigm. Inträdesbarriären kan dock sänkas med hjälp av specialiserade bibliotek. CUDA Toolkit innehåller flera sådana bibliotek (BLAS implementationer, Fast Fourier Transform, Thrust m.fl.). OpenCL saknar vanliga bibliotek, men det finns ett antal tredjepartsprojekt som syftar till att utveckla både CUDA- och OpenCL-program. I detta dokument presenteras en jämförelse av flera moderna C ++ bibliotek som syftar till att underlätta utvecklingen av GPGPU. Vi tittar på både bekvämlighet och prestanda av li-
VexCL REF är ett uttryck mallbibliotek för OpenCL/CUDA.
Programming CUDA and OpenCL: A Case Study Using Modern C++ Libraries
{'venue': 'ArXiv', 'journal': 'ArXiv', 'mag_field_of_study': ['Computer Science', 'Physics']}