c# DietPi下的Mono Cudafy运行失败

Posted

技术标签:

【中文标题】c# DietPi下的Mono Cudafy运行失败【英文标题】:c# Mono Cudafy under DietPi failed to run 【发布时间】:2020-01-30 19:50:44 【问题描述】:

我在我的 Odroid XU4 上安装了 DietPi,我安装了 mono-runtime。我用c#做了一个简单的程序:

using System;
using Cudafy;
using Cudafy.Host;
using Cudafy.Translator;

namespace cudafy_test

    class Program
    
        static void Main(string[] args)
        
            try
            
                CudafyModes.Target = eGPUType.OpenCL;
                CudafyTranslator.Language = eLanguage.OpenCL;
                CudafyModule km = CudafyTranslator.Cudafy();

                string txt;
                try
                
                    txt = CudafyHost.GetDeviceCount(eGPUType.Cuda).ToString();
                
                catch
                
                    txt = "0";
                
                Console.WriteLine("Cuda devices: " + txt);
                try
                
                    txt = CudafyHost.GetDeviceCount(eGPUType.OpenCL).ToString();
                
                catch
                
                    txt = "0";
                
                Console.WriteLine("OpenCl devices: " + txt);
                try
                
                    txt = CudafyHost.GetDeviceCount(eGPUType.Emulator).ToString();
                
                catch
                
                    txt = "0";
                
                Console.WriteLine("Emulations CPU devices: " + txt);

                GPGPU gpu = CudafyHost.GetDevice(CudafyModes.Target, CudafyModes.DeviceId);
                gpu.LoadModule(km);
                gpu.Launch().thekernel();
            
            catch (Exception ex)
            
                Console.WriteLine(ex.Message);
            
            Console.WriteLine("Hello world");
            Console.ReadKey();
        

        [Cudafy]
        public static void thekernel()
        
        
    

我将它编译为 x86。甚至我通过以下方式检查了 dll 目标:

using System;
using System.Reflection;
using System.IO;

namespace project

    class Program
    
        static void Main(string[] args)
        
            DirectoryInfo di = new DirectoryInfo(@"dir");
            var files = di.EnumerateFiles("*.dll", SearchOption.TopDirectoryOnly);

            foreach (var d in files)
            
                var ass = AssemblyName.GetAssemblyName(d.FullName);
                Console.WriteLine(d.Name);
                Console.WriteLine(ass.ProcessorArchitecture.ToString());
                Console.WriteLine(".................");
            

            Console.WriteLine("Done");
            Console.ReadKey();
        
    

它产生的结果是所有的 dll。

但是当我在 bash 中运行时:

单声道cudafy_test.exe

它向我报告以下错误:

未处理的异常: System.BadImageFormatException:无法解析字段令牌 0x04000001 文件名:'cudafy_test'

你有足够的经验吗?请给我一条关于如何解决此问题的建议。

【问题讨论】:

【参考方案1】:

我不应该是mono-runtime(小型mono安装,但应该是较大的安装mono-devel或mono-complete)。我必须看看它们有何不同。

【讨论】:

以上是关于c# DietPi下的Mono Cudafy运行失败的主要内容,如果未能解决你的问题,请参考以下文章

C#文件监控工具(对追加内容的监控并输出)

从 Mono C# 运行 Bash 命令

使用Mono将C#编译运行至WebAssembly平台

从 Mono 上运行的 C# 进程运行 C++ 应用程序。运行检测器错误

用C#开发的程序,我现在使用mono脱离了.net环境,但是在没有.net环境的电脑上打不开,不知怎么办?

想用C#写linux下的串口收发程序?