我可以在managedCuda中初始化string []或list <string>吗?

时间:2018-08-07 10:15:29

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

我想在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>'

有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

基于documentation和您的错误消息,CudaDeviceVariable仅可以使用非空值类型。

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

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

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

然后尝试如下操作:

CudaDeviceVariable<byte> d_data = stringArAsBytes;