【问题标题】:Can I initialize string[] or list<string> in managedCuda?我可以在 managedCuda 中初始化 string[] 或 list<string> 吗?
【发布时间】:2019-01-14 09:31:17
【问题描述】:

我想在 managedCuda 中使用一个字符串匹配。但是如何初始化呢?

我尝试过使用 C# 版本,示例如下:

stringAr = new List<string>();
        stringAr.Add("you");
        stringAr.Add("your");
        stringAr.Add("he");
        stringAr.Add("she");
        stringAr.Add("shes");

对于字符串匹配,我使用了以下代码:

bool found = false;
        for (int i = 0; i < stringAr.Count; i++)
        {
            found = (stringAr[i]).IndexOf(textBox2.Text) > -1;
            if (found) break;
        }
        if (found && textBox2.Text != "")
        {
            label1.Text = "Found!";
        }
        else
        {
            label1.Text = "Not Found!";
        }

我还在主机内存中分配输入 h_A

            string[] h_B = new string[N];

当我想在设备内存中分配并将向量从主机内存复制到设备内存时

        CudaDeviceVariable<string[]> d_B = h_B;

它给了我这个错误

The type 'string[]' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'CudaDeviceVariable<T>'

有什么帮助吗?

【问题讨论】:

    标签: c# cuda string-matching managed-cuda


    【解决方案1】:

    根据documentation 和您的错误消息,只有不可为空的值类型可以与CudaDeviceVariable 一起使用。

    stringAr 列表更改为char[](或byte[])数组,然后使用带有泛型参数char(或字节)的CudaDeviceVariable 在设备上分配它。

    EDIT1 这是将stringAr 更改为byte[] 数组的代码:

    byte[] stringArAsBytes = stringAr
                    .SelectMany(s => System.Text.Encoding.ASCII.GetBytes(s))
                    .ToArray();
    

    然后尝试这样的事情:

    CudaDeviceVariable<byte> d_data = stringArAsBytes;
    

    【讨论】:

    • 注意,char 不是 .net 中的 blittable 类型:它在托管和非托管内存中的表示是不一样的。因此,为了安全起见,将您的字符串转换为 byte[]。
    • @kunzmi 如何安全地转换?你能给我举个例子吗?
    • @Slawomir Orlowski 我试过了,但结果相同..如何使用通用参数分配它?有什么例子吗?
    • @Slawomir Orlowski 谢谢队友 :) 就像魅力一样。如果我想将它返回到字符串,我该怎么做?
    • @ThomasYap 不​​客气 :) 我对 managedCuda 不是很熟悉。如果你可以直接访问设备缓冲区d_data,那么试试这个:string s = System.Text.Encoding.ASCII.GetString(d_data, 0, d_data.Length);。我不太确定d_data.Length 是否是获得d_data 长度的正确方法。必要时更换。
    猜你喜欢
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多