首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cudafy在测试时抛出异常

cudafy在测试时抛出异常
EN

Stack Overflow用户
提问于 2013-09-05 13:29:33
回答 1查看 941关注 0票数 0

我在Windows7 64x上使用VS2010。

我使用以下代码创建了一个静态类Cuda

代码语言:javascript
复制
namespace Network
{
    public static class Cuda
    {
        static GPGPU gpu= CudafyHost.GetDevice();
        static CudafyHost host = new CudafyHost();
        static GPGPUBLAS blas = GPGPUBLAS.Create(gpu);

        public static void GEMM(int m, int n, int k, float alpha, float[] a, float[] b, float beta, float[] c,Cudafy.Maths.BLAS.Types.cublasOperation Op)
        {
            float[] d_a = gpu.Allocate(a);
            float[] d_b = gpu.Allocate(b);
            float[] d_c = gpu.Allocate(c);

            gpu.CopyToDevice(a, d_a);
            gpu.CopyToDevice(b, d_b);
            gpu.CopyToDevice(c, d_c);

            blas.GEMM(m, n, k, alpha, d_a, d_b, beta, d_c, Op);

            gpu.CopyFromDevice(d_c, c);

            gpu.Free(d_a);
            gpu.Free(d_b);
            gpu.Free(d_c);
        }
    }
}

我成功地使用了这个GEMM函数,但是当我尝试使用下面这样的测试来测试我的代码时

代码语言:javascript
复制
``
namespace TestProject
{
    [TestClass]
    public class MatrixTest
    {
        /// <summary>
        ///op_Multiply
        ///</summary>
        [TestMethod()]
        public void op_MultiplyTest()
        {


            Matrix a = new Matrix(2,3); 
            a.Data = new float[] { 1, 2, 3, 4, 5, 6 };

            Matrix b = new Matrix (3,4);
            b.Data = new float[] { 1, 0, 2, 3, 1, 2, 0, 4, 2, 1, 1, 0, 3, 0, 1, 1 };

            Matrix expected = new Matrix(2, 4);

            expected.Data = new float[] {11,14,16,22,22,28,4,6};

            Matrix actual;
            actual = (a * b);
            Assert.AreEqual(expected, actual);
        }
    }
}

我得到了以下异常:

代码语言:javascript
复制
System.TypeInitializationException
Message=Type Initializer "Cudafy.Host.CudafyHost" threw an exception.
Source=Cudafy.NET
TypeName=Cudafy.Host.CudafyHost
StackTrace:
   в Cudafy.Host.CudafyHost.GetDevice(eGPUType type, Int32 deviceId)
   в Network.Cuda..cctor() в C:\Users\Dan\Documents\Visual Studio 2010\Projects\Network\Network\Cuda.cs:строка 14
InnerException: System.InvalidOperationException
   Message=Category does not exist.
   Source=System
   StackTrace:
        в System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter)
        в System.Diagnostics.PerformanceCounter.InitializeImpl()
        в System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly)
        в System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName)
        в Cudafy.Host.EmulatedGPU..ctor(Int32 deviceId)
        в Cudafy.Host.CudafyHost.DoCreateDevice(eGPUType target, Int32 deviceId)
        в Cudafy.Host.CudafyHost.CreateDevice(eGPUType type, Int32 deviceId)
        в Cudafy.Host.CudafyHost.GetDevice(eGPUType type, Int32 deviceId)
        в Cudafy.Host.CudafyHost..cctor()
   InnerException: 

在我看来,问题似乎是IDE两次使用cudafy DLL或两次初始化静态类…

我该怎么解决它呢?

===============编辑===============

我尝试在我的类MatrixTest中使用来自cudafy dll的任何函数。好吧,它起作用了。但不是全部。例如,Cudafy.Host.CudaGPU.GetDeviceCount()返回0,就像没有找到支持cuda的设备一样。

当我尝试使用像CudafyHost.GetDeviceCount(eGPUType.Cuda)这样的smth或者CudafyHost类中的任何其他东西时,我得到了上面的异常。

EN

回答 1

Stack Overflow用户

发布于 2013-09-19 15:33:23

您看到的异常是由于系统上缺少性能类别所致。这显然是.NET偶尔会出错的地方。参见this thread for more information。下一个CUDAfy版本将更优雅地处理此类错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18628447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档