Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Raspbery Pi上使用Mono运行Yeppp库_C#_Mono_Raspberry Pi_Simd_Yeppp - Fatal编程技术网

C# 在Raspbery Pi上使用Mono运行Yeppp库

C# 在Raspbery Pi上使用Mono运行Yeppp库,c#,mono,raspberry-pi,simd,yeppp,C#,Mono,Raspberry Pi,Simd,Yeppp,我有一个使用Yeppp的应用程序!SIMD库。应用程序是用C#编写的。它可以在Windows x86-32和x86-64上完美运行。然而,当我在Raspberry Pi和Mono上运行应用程序时,我得到以下异常(不确定是ARM问题、Mono问题还是其他问题)。我尝试以root用户身份运行只是为了检查,也是同样的异常。我注意到堆栈跟踪中的“UnixLibraryLoader”部分,所以我确保了Yeppp DLL(Yeppp.CLR.Bundle.DLL)与可执行文件位于同一目录中,它就是。这是我的

我有一个使用Yeppp的应用程序!SIMD库。应用程序是用C#编写的。它可以在Windows x86-32和x86-64上完美运行。然而,当我在Raspberry Pi和Mono上运行应用程序时,我得到以下异常(不确定是ARM问题、Mono问题还是其他问题)。我尝试以root用户身份运行只是为了检查,也是同样的异常。我注意到堆栈跟踪中的“UnixLibraryLoader”部分,所以我确保了Yeppp DLL(Yeppp.CLR.Bundle.DLL)与可执行文件位于同一目录中,它就是。这是我的代码、编译方式的问题还是库的问题

    Stacktrace:

  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) Yeppp.UnixLibraryLoader.dlopen (string,int) <0xffffffff>
  at Yeppp.UnixLibraryLoader.Yeppp.INativeLibraryLoader.LoadLibrary (string) <0x0002f>
  at Yeppp.NativeLibrary..ctor (string,Yeppp.INativeLibraryLoader) <0x0006b>
  at Yeppp.Loader.LoadNativeLibrary () <0x000db>
  at Yeppp.Library.Init () <0x00027>
  at <Module>..cctor () <0x0000b>
  at (wrapper runtime-invoke) object.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff>
  at <unknown> <0xffffffff>
  at SimdSpeedTest.Program.DisplayCpuFeatures () <0x00033>
  at SimdSpeedTest.Program.Main (string[]) <0x000c7>
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <0xffffffff>

Native stacktrace:


Debug info from gdb:

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
[New Thread 0xb5b7b430 (LWP 2272)]
0xb6eabaac in waitpid () from /lib/arm-linux-gnueabihf/libpthread.so.0
  Id   Target Id         Frame
  2    Thread 0xb5b7b430 (LWP 2272) "mono" 0xb6ea9770 in sem_wait@@GLIBC_2.4 () from /lib/arm-linux-gnueabihf/libpthread.so.0
* 1    Thread 0xb6f80000 (LWP 2271) "mono" 0xb6eabaac in waitpid () from /lib/arm-linux-gnueabihf/libpthread.so.0

Thread 2 (Thread 0xb5b7b430 (LWP 2272)):
#0  0xb6ea9770 in sem_wait@@GLIBC_2.4 () from /lib/arm-linux-gnueabihf/libpthread.so.0
#1  0x001fff10 in mono_sem_wait (sem=0x2f523c, alertable=1) at mono-semaphore.c:119
#2  0x0017db28 in finalizer_thread (unused=<optimized out>) at gc.c:1073
#3  0x001625b4 in start_wrapper_internal (data=0xb0d8c8) at threads.c:643
#4  start_wrapper (data=0xb0d8c8) at threads.c:688
#5  0x001f5c30 in thread_start_routine (args=0xac86c0) at wthreads.c:294
#6  0x00204268 in inner_start_thread (arg=0xac86b4) at mono-threads-posix.c:49
#7  0xb6ea2c00 in start_thread () from /lib/arm-linux-gnueabihf/libpthread.so.0
#8  0xb6e0f728 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
#9  0xb6e0f728 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Thread 1 (Thread 0xb6f80000 (LWP 2271)):
#0  0xb6eabaac in waitpid () from /lib/arm-linux-gnueabihf/libpthread.so.0
#1  0x000b2148 in mono_handle_native_sigsegv (signal=<optimized out>, ctx=<optimized out>) at mini-exceptions.c:2299
#2  0x00027af8 in mono_sigsegv_signal_handler (_dummy=11, info=0xbe9280e0, context=0xbe928160) at mini.c:6777
#3  <signal handler called>
#4  0xb6f6d754 in ?? () from /lib/ld-linux-armhf.so.3
#5  0xbe9284a0 in ?? ()
Cannot access memory at address 0x3000
#6  0xbe9284a0 in ?? ()
Cannot access memory at address 0x3000
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Stacktrace:
在
at(包装器管理为本机)Yeppp.UnixLibraryLoader.dlopen(字符串,int)
位于Yeppp.UnixLibraryLoader.Yeppp.INativeLibraryLoader.LoadLibrary(字符串)
在Yeppp.NativelLibrary..ctor(字符串,Yeppp.InativelLibraryLoader)
在Yeppp.Loader.LoadNativeLibrary()
在Yeppp.Library.Init()上
at..cctor()
at(包装器运行时调用)object.runtime\u invoke\u void(object,intptr,intptr,intptr)
在
在SimdSpeedTest.Program.displaycuffeatures()中
位于SimdSpeedTest.Program.Main(字符串[])
在(包装器运行时调用)。运行时调用无效对象(对象,intptr,intptr,intptr)
本机堆栈跟踪:
来自gdb的调试信息:
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/armlinux gnueabihf/libthread_db.so.1”。
[新螺纹0xb5b7b430(LWP 2272)]
来自/lib/arm-linux-gnueabihf/libpthread.so.0的waitpid()中的0xb6eabaac
Id目标Id帧
来自/lib/arm-linux-gnueabihf/libpthread.so.0的sem_wait@@GLIBC_2.4()中的2线程0xb5b7b430(LWP 2272)“mono”0xb6ea9770
*来自/lib/arm-linux-gnueabihf/libpthread.so.0的waitpid()中的1个线程0xb6f80000(LWP 2271)“mono”0xb6eabaac
螺纹2(螺纹0xb5b7b430(LWP 2272)):
#来自/lib/arm-linux-gnueabihf/libpthread.so.0的sem_wait@@GLIBC_2.4()中的0 0xb6ea9770
#1 0x001fff10在单声道信号灯处的单声道扫描等待(扫描电镜=0x2f523c,可报警=1)中。c:119
#gc.c:1073处终结器_线程(未使用=)中的2 0x0017db28
#线程处的启动包装器内部(数据=0xb0d8c8)中有3个0x001625b4。c:643
#4在线程处启动包装器(数据=0xb0d8c8)。c:688
#在wthreads处的线程启动例程(args=0xac86c0)中的5 0x001f5c30。c:294
#6 0x00204268位于单线程posix.c:49处的内螺纹(arg=0xac86b4)中
#7 0xb6ea2c00,位于/lib/arm-linux-gnueabihf/libpthread.so.0的start_线程()中
#8 0xb6e0f728英寸??()来自/lib/arm-linux-gnueabihf/libc.so.6
#9 0xb6e0f728英寸??()来自/lib/arm-linux-gnueabihf/libc.so.6
反向跟踪停止:上一帧与此帧相同(堆栈损坏?)
螺纹1(螺纹0xb6f80000(LWP 2271)):
#来自/lib/arm-linux-gnueabihf/libpthread.so.0的waitpid()中的0 0xb6eabaac
#1 0x000b2148在最小异常的mono_handle_native_sigsegv(信号=,ctx=)中。c:2299
#在mini.c:6777处的mono_sigsegv_信号处理程序中的2 0x00027af8(_dummy=11,info=0xbe9280e0,context=0xbe928160)
#3  
#4 0xb6f6d754英寸??()来自/lib/ld linux armhf.so.3
#5 0xbe9284a0英寸??()
无法访问地址为0x3000的内存
#6 0xbe9284a0英寸??()
无法访问地址为0x3000的内存
反向跟踪停止:上一帧与此帧相同(堆栈损坏?)

我猜RasPi的ARMV6硬浮点架构上的Mono可能在处理Yepp()中的特性检测代码发出的故意信号时遇到问题,可能正在崩溃

检测依赖于SIGILL处理,只需跳过不支持的指令即可。另一种可能是没有正确地从资源中检索lib(或者检索错误的lib时使用的是Yeppp.Loader.LoadNativeLibrary猜测要在其上运行的体系结构使用哪个本机lib),并且在将执行传递给它时会崩溃

我建议你联系开发人员,因为我在网站上找不到任何参考资料,在我仔细阅读的源文件中,表明支持RasPi及其旧版本的ARM


注:我假设您使用的是使用硬浮点的Raspbian,以及Mono的最新版本(最初使用的是不兼容的软浮点)。

既然悬赏已经结束,让我在这里把我的评论写进一个答案

您使用的是预览版,因此它没有按照您的预期工作可能并不奇怪


覆盆子皮1没有霓虹灯,但有。VFP指令不是SIMD指令,尽管向量浮点的首字母缩写有误导性(请参阅和)

VFPv2是在ARMv5TE、ARMv5TEJ和ARMv6体系结构中引入的。因此,即使没有明确引用ARMV6,也不一定意味着它不支持VFPv2,因为它确实引用了ARMV5T

使用YEPP有什么好处!使用Raspberry Pi 1,因为VFP指令不是SIMD指令?我的猜测是,GCC并没有很好地实现这些功能,因此使用Yeppp!显式地实现这些功能可能是有利的


我不确定覆盆子皮1的最高失败率是多少

  • 0.041 DP GFLOPS
  • 0.192 SP GFLOPS
:

  • 0.5 DP触发器/周期:每四个周期标量VMLA.F64
  • 1.0 DP触发器/周期:标量VADD.F64每个周期
  • 2.0 SP触发器/周期:标量VMLA.F32每个周期
  • 2.0 SP触发器/周期:每隔一个周期2宽VMLA.F32
Raspberry Pi 2有四个内核,因此峰值触发器为
4*触发器/周期/内核。

注意,Cortex-A7霓虹灯的峰值触发器与VFP的峰值触发器相同。Cortex-A7是100%二进制指令集,与Cortex-A15兼容,这就是为什么它用于ARM大、小设计。因此,Neon在Cortex-A7中实现只是为了兼容

我还不知道每个周期的整数运算

不过,覆盆子PI 1和2还有另一个SIMD选项。可以在上使用整数SIMD指令(另请参见)。您可以使用thi实现定点