DietPi 下的 c# Mono Cudafy 失败 运行
c# Mono Cudafy under DietPi failed to run
我的 Odroid XU4 上安装了 DietPi,我在那里安装了 mono-运行time。我用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 时:
mono cudafy_test.exe
它报告我以下错误:
Unhandled Exception:
System.BadImageFormatException: Could not resolve field token 0x04000001
File name: 'cudafy_test'
您对此有足够的经验吗?请给我一些关于如何解决这个问题的建议。
我应该不是mono-runtime(小型mono安装,但应该是大型安装mono-devel或mono-complete)。我必须看看,它们有何不同。
我的 Odroid XU4 上安装了 DietPi,我在那里安装了 mono-运行time。我用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 时:
mono cudafy_test.exe
它报告我以下错误:
Unhandled Exception: System.BadImageFormatException: Could not resolve field token 0x04000001 File name: 'cudafy_test'
您对此有足够的经验吗?请给我一些关于如何解决这个问题的建议。
我应该不是mono-runtime(小型mono安装,但应该是大型安装mono-devel或mono-complete)。我必须看看,它们有何不同。