向量化这个,用字符串过滤字符串数组? 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
}
我确实进行了搜索,但没有找到使用 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
}