System.NotImplementedException when generating bindings for Nvidia CUDA

Open
#1,684 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
cpp, csharp
Domain
devtools

Research direction

Reproduce the failure with cuda_runtime.h and the CUDA 11.7 include and library directories from the issue. Start at PrimitiveTypeExtensions.GetInfo and follow LayoutFieldExtensions.CalculateOffset into CSharpSources.GenerateClassInternalsFields. Done means C# binding generation completes without the NotImplementedException for this CUDA input.

Written by the indexing model from the issue text.

Description

Brief Description

The app fails to generate bindings for Nvidia CUDA library.

OS: Windows 10

Used headers

Download and install this library: https://developer.nvidia.com/cuda-downloads
My main goal was to generate the bindings for all files in that folder:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\
cuda_runtime.h and cuda_runtime_api.h look the most interesting.

Used settings
    public void Setup(Driver driver)
    {
        var options = driver.Options;
        options.GeneratorKind = GeneratorKind.CSharp;
        options.Quiet = false;

        var module = options.AddModule("YCuda");
        module.IncludeDirs.Add(@"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include");

        var headerDirectory = new DirectoryInfo("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\include");
        var headers = headerDirectory.GetFiles();
        // I've tried with this one as well and got the same error
        //foreach (var header in headers)
        //{
        //    module.Headers.Add(header.Name);
        //}
        module.Headers.Add("cuda_runtime.h");

        module.LibraryDirs.Add(@"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\lib\x64");

        var libDirectory = new DirectoryInfo("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\lib\\x64");
        var libs = libDirectory.GetFiles();
        foreach(var lib in libs)
        {
            module.Libraries.Add(lib.Name);
        }
    }

Target: C#

Other settings

I run it like this:

ConsoleDriver.Run(new YCudaLibrary());

Where YCudaLibrary is a class where my setup function is located.

Stack trace or incompilable generated code
Parsing libraries...
Parsed 'cublas.lib'
Parsed 'cublasLt.lib'
Parsed 'cuda.lib'
Parsed 'cudadevrt.lib'
Parsed 'cudart.lib'
Parsed 'cudart_static.lib'
Parsed 'cufft.lib'
Parsed 'cufftw.lib'
Parsed 'cufilt.lib'
Parsed 'curand.lib'
Parsed 'cusolver.lib'
Parsed 'cusolverMg.lib'
Parsed 'cusparse.lib'
Parsed 'nppc.lib'
Parsed 'nppial.lib'
Parsed 'nppicc.lib'
Parsed 'nppidei.lib'
Parsed 'nppif.lib'
Parsed 'nppig.lib'
Parsed 'nppim.lib'
Parsed 'nppist.lib'
Parsed 'nppisu.lib'
Parsed 'nppitc.lib'
Parsed 'npps.lib'
Parsed 'nvblas.lib'
Parsed 'nvjpeg.lib'
Parsed 'nvml.lib'
Parsed 'nvptxcompiler_static.lib'
Parsed 'nvrtc-builtins_static.lib'
Parsed 'nvrtc.lib'
Parsed 'nvrtc_static.lib'
Parsed 'OpenCL.lib'
Parsing code...
Parsed 'cuda_runtime.h'
Processing code...
    Found ambiguous overload: __cudaOccupancyB2DHelper::operator=
    Found ambiguous overload: cudaChannelFormatDesc::operator=
    Found ambiguous overload: cudaArraySparseProperties::operator=
    Found ambiguous overload: cudaArraySparseProperties::operator=
    Found ambiguous overload: cudaArrayMemoryRequirements::operator=
    Found ambiguous overload: cudaPitchedPtr::operator=
    Found ambiguous overload: cudaExtent::operator=
    Found ambiguous overload: cudaPos::operator=
    Found ambiguous overload: cudaMemcpy3DParms::operator=
    Found ambiguous overload: cudaMemcpy3DPeerParms::operator=
    Found ambiguous overload: cudaMemsetParams::operator=
    Found ambiguous overload: cudaAccessPolicyWindow::operator=
    Found ambiguous overload: cudaHostNodeParams::operator=
    Found ambiguous overload: cudaResourceDesc::operator=
    Found ambiguous overload: cudaResourceDesc::operator=
    Found ambiguous overload: cudaResourceDesc::operator=
    Found ambiguous overload: cudaResourceDesc::operator=
    Found ambiguous overload: cudaResourceDesc::operator=
    Found ambiguous overload: cudaResourceDesc::operator=
    Found ambiguous overload: cudaResourceViewDesc::operator=
    Found ambiguous overload: cudaPointerAttributes::operator=
    Found ambiguous overload: cudaFuncAttributes::operator=
    Found ambiguous overload: cudaMemLocation::operator=
    Found ambiguous overload: cudaMemAccessDesc::operator=
    Found ambiguous overload: cudaMemPoolProps::operator=
    Found ambiguous overload: cudaMemPoolPtrExportData::operator=
    Found ambiguous overload: cudaMemAllocNodeParams::operator=
    Found ambiguous overload: CUuuid_st::operator=
    Found ambiguous overload: cudaDeviceProp::operator=
    Found ambiguous overload: cudaIpcEventHandle_st::operator=
    Found ambiguous overload: cudaIpcMemHandle_st::operator=
    Found ambiguous overload: cudaExternalMemoryHandleDesc::operator=
    Found ambiguous overload: cudaExternalMemoryHandleDesc::operator=
    Found ambiguous overload: cudaExternalMemoryHandleDesc::operator=
    Found ambiguous overload: cudaExternalMemoryBufferDesc::operator=
    Found ambiguous overload: cudaExternalMemoryMipmappedArrayDesc::operator=
    Found ambiguous overload: cudaExternalSemaphoreHandleDesc::operator=
    Found ambiguous overload: cudaExternalSemaphoreHandleDesc::operator=
    Found ambiguous overload: cudaExternalSemaphoreHandleDesc::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams_v1::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitParams::operator=
    Found ambiguous overload: dim3::operator=
    Found ambiguous overload: cudaLaunchParams::operator=
    Found ambiguous overload: cudaKernelNodeParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreSignalNodeParams::operator=
    Found ambiguous overload: cudaExternalSemaphoreWaitNodeParams::operator=
    Found ambiguous overload: cudaStreamAttrValue::operator=
    Found ambiguous overload: cudaKernelNodeAttrValue::operator=
    Found ambiguous overload: char1::operator=
    Found ambiguous overload: uchar1::operator=
    Found ambiguous overload: char2::operator=
    Found ambiguous overload: uchar2::operator=
    Found ambiguous overload: char3::operator=
    Found ambiguous overload: uchar3::operator=
    Found ambiguous overload: char4::operator=
    Found ambiguous overload: uchar4::operator=
    Found ambiguous overload: short1::operator=
    Found ambiguous overload: ushort1::operator=
    Found ambiguous overload: short2::operator=
    Found ambiguous overload: ushort2::operator=
    Found ambiguous overload: short3::operator=
    Found ambiguous overload: ushort3::operator=
    Found ambiguous overload: short4::operator=
    Found ambiguous overload: ushort4::operator=
    Found ambiguous overload: int1::operator=
    Found ambiguous overload: uint1::operator=
    Found ambiguous overload: int2::operator=
    Found ambiguous overload: uint2::operator=
    Found ambiguous overload: int3::operator=
    Found ambiguous overload: uint3::operator=
    Found ambiguous overload: int4::operator=
    Found ambiguous overload: uint4::operator=
    Found ambiguous overload: long1::operator=
    Found ambiguous overload: ulong1::operator=
    Found ambiguous overload: long2::operator=
    Found ambiguous overload: ulong2::operator=
    Found ambiguous overload: long3::operator=
    Found ambiguous overload: ulong3::operator=
    Found ambiguous overload: long4::operator=
    Found ambiguous overload: ulong4::operator=
    Found ambiguous overload: float1::operator=
    Found ambiguous overload: float2::operator=
    Found ambiguous overload: float3::operator=
    Found ambiguous overload: float4::operator=
    Found ambiguous overload: longlong1::operator=
    Found ambiguous overload: ulonglong1::operator=
    Found ambiguous overload: longlong2::operator=
    Found ambiguous overload: ulonglong2::operator=
    Found ambiguous overload: longlong3::operator=
    Found ambiguous overload: ulonglong3::operator=
    Found ambiguous overload: longlong4::operator=
    Found ambiguous overload: ulonglong4::operator=
    Found ambiguous overload: double1::operator=
    Found ambiguous overload: double2::operator=
    Found ambiguous overload: double3::operator=
    Found ambiguous overload: double4::operator=
    Found ambiguous overload: surfaceReference::operator=
    Found ambiguous overload: textureReference::operator=
    Found ambiguous overload: cudaTextureDesc::operator=
    Found ambiguous overload: cudaCreateChannelDesc
Generating code...
Unhandled exception. System.NotImplementedException: The method or operation is not implemented.
   at CppSharp.Extensions.PrimitiveTypeExtensions.GetInfo(PrimitiveType primitive, ParserTargetInfo targetInfo, Boolean& signed)
   at CppSharp.Extensions.TypeExtensions.GetWidth(Type type, ParserTargetInfo targetInfo)
   at CppSharp.Extensions.LayoutFieldExtensions.CalculateOffset(LayoutField field, LayoutField previousField, ParserTargetInfo targetInfo)
   at CppSharp.Generators.CSharp.CSharpSources.GenerateClassInternalsFields(Class class, Boolean sequentialLayout)
   at CppSharp.Generators.CSharp.CSharpSources.GenerateClassInternals(Class class)
   at CppSharp.Generators.CSharp.CSharpSources.VisitClassDecl(Class class)
   at CppSharp.AST.Class.Visit[T](IDeclVisitor`1 visitor)
   at CppSharp.Generators.CSharp.CSharpSources.VisitDeclContext(DeclarationContext context)
   at CppSharp.Generators.CodeGenerator.VisitNamespace(Namespace namespace)
   at CppSharp.Generators.CSharp.CSharpSources.VisitNamespace(Namespace namespace)
   at CppSharp.Generators.CodeGenerator.VisitTranslationUnit(TranslationUnit unit)
   at CppSharp.AST.TranslationUnit.Visit[T](IDeclVisitor`1 visitor)
   at CppSharp.Generators.CSharp.CSharpSources.Process()
   at CppSharp.Generators.Generator.GenerateModule(Module module)
   at CppSharp.Generators.Generator.Generate()
   at CppSharp.Driver.GenerateCode()
   at CppSharp.ConsoleDriver.Run(ILibrary library)
   at CudaTest.Generator.Program.Main(String[] args)
Dominant language
C#
Stars
3.4k
Forks
541
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from mono/CppSharp

All issues in mono/CppSharp

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.