【问题标题】:Creating register variable arrays with CudaFy使用 CudaFy 创建寄存器变量数组
【发布时间】:2015-03-09 17:51:23
【问题描述】:

如果我能够使用线程寄存器内存而不是共享内存阵列 (L1),我的 CUDA 内核将运行得更快。

我可以通过以下声明在 CUDA-C 中做到这一点:

unsigned short window[15];

但是当我尝试使用 C# 时:

ushort[] window = new ushort[15];

我收到关于无法在 CudaFy 中创建数组的运行时错误。我不想要全局内存数组或共享内存。 (这是大多数讨论问题)。我正在使用 SM35 架构运行。

Array create expressions are not supported.

【问题讨论】:

    标签: cudafy.net


    【解决方案1】:

    好像Cudafy目前不支持创建线程本地数组,所以通过Cudafy做这个目前是不可能的。

    您可以手动执行此操作并强制 Cudafy 使用生成的 Cuda C 代码的手动编辑版本:

    CudaGPU gpu = (CudaGPU)CudafyHost.GetDevice(eGPUType.Cuda, 0);
    CompileProperties prop = new CompileProperties()
        {
            Platform = ePlatform.x64,
            Architecture = eArchitecture.sm_50, 
            CompileMode = eCudafyCompileMode.Default,
            CompilerPath = @"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc", 
            WorkingDirectory = @"C:\Path\To\Project\bin\Debug", 
            TimeOut = 60000,
            IncludeDirectoryPath = @"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include",
        };
    
    CudafyModule module = CudafyTranslator.Cudafy(prop, typeof(YourClass));
    

    为了确保它使用修改后的代码文件而不是调用CudafyTranslator.Cudafy()生成的代码文件,架构必须设置得比以前更高。

    prop.Architecture = eArchitecture.sm_52; 
    prop.InputFile = @"ModifiedCudaSource.cu"; 
    

    InputFile中指定的文件必须在WorkingDirectory

    最后将修改后的源文件添加到模块中,编译新的PTX,加载模块:

    module.AddSourceCodeFile(new SourceCodeFile(File.ReadAllText(Path.Combine(prop.WorkingDirectory, prop.InputFile), Encoding.Default), eLanguage.Cuda, prop.Architecture));
    module.Compile(prop);
    
    gpu.LoadModule(module);
    

    我不完全确定您是否需要调用 CudafyTranslator.Cudafy() 来获取模块,但这对我有用,我只运行此代码一次,因此 cba 进行进一步测试:)

    【讨论】:

    • 使用 [CudafyDummy] 属性然后用直接的 CUDA-C 编写会不会更简单? (P.S. 我想我 Nick Kopp 有兴趣将此添加到 CudaFy)但更多的投票会有所帮助。
    • 我什至不知道 [CudafyDummy] 选项。这似乎更容易 - 至少更容易管理!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多