向量化这个,用字符串过滤字符串数组? GPU流水线?

Vectorize this, filter string arrays by a string? GPU pipeline?

我确实进行了搜索,但没有找到使用 MPICH 或矢量化之类的东西。在 fortran 中,我会使用 MPICH 分解代码以使其瘫痪。

这是 运行 iPad 可用金属。

我有一个包含数十万个元素的一维字符串数组,其中很多都是重复的。我想找到重复项的索引。

到目前为止,我使用的是简单循环,但速度很慢,所以我正在寻找一种方法对其进行矢量化或分而治之(如果可能的话)?或者也许有一种方法可以在 Metal 中使用管道?

  class func filterDatabyString(dataString:[String],filterString:String) -> [Int]
  {
    var arrayIndex:[Int] = []
    var i:Int = 0

    for (i = 0; i < dataString.count; i++) {
      if dataString[i] == filterString
      {
        arrayIndex.append(i)
      }
    }

    return (arrayIndex)
  }
filter(enumerate(dataString)) { [=10=].1 == filterString }.map { [=10=].0 }

如果你只需要索引,那么这个例子就足够了。我不确定这是否会更快。有点好奇。

您可以使 dataString 数组成为 NSArray 并同时枚举。像这样的怎么样?

func filterDataByString(dataString:[String], filterString:String) -> [Int]
{
    var arrayIndex = [Int]()
    let data = dataString as NSArray
    data.enumerateObjectsWithOptions(.Concurrent) { (string: AnyObject!, index: Int, stop:UnsafeMutablePointer<ObjCBool>) -> Void in
        if(string as! String == filterString)
        {
            arrayIndex.append(index)
        }
    };

    return arrayIndex
}