1 /* 2 * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #include <sys/wait.h> 27 #include <chrono> 28 #include "cuda_backend.h" 29 30 31 CudaBackend::CudaModule::CudaModule(Backend *backend, char *src, char *log, bool ok, CUmodule module) 32 : Backend::CompilationUnit(backend, src, log, ok), cudaSource(src), ptxSource(),log(log), module(module) { 33 } 34 35 CudaBackend::CudaModule::~CudaModule() = default; 36 CudaBackend::CudaModule * CudaBackend::CudaModule::of(long moduleHandle){ 37 return reinterpret_cast<CudaBackend::CudaModule *>(moduleHandle); 38 } 39 Backend::CompilationUnit::Kernel * CudaBackend::CudaModule::getKernel(int len, char *name) { 40 CudaKernel* cudaKernel= getCudaKernel(len, name); 41 return dynamic_cast<Backend::CompilationUnit::Kernel *>(cudaKernel); 42 43 } 44 CudaBackend::CudaModule::CudaKernel *CudaBackend::CudaModule::getCudaKernel(char *name) { 45 return getCudaKernel(std::strlen(name), name); 46 } 47 CudaBackend::CudaModule::CudaKernel *CudaBackend::CudaModule::getCudaKernel(int nameLen, char *name) { 48 CUfunction function; 49 WHERE{.f=__FILE__, .l=__LINE__, 50 .e=cuModuleGetFunction(&function, module, name), 51 .t="cuModuleGetFunction" 52 }.report(); 53 return new CudaKernel(this,name, function); 54 55 } 56 57 bool CudaBackend::CudaModule::programOK() { 58 return true; 59 }