CPU 与查询的最大使用量
Maximum usage of CPU with a query
我正在尝试对最小实体执行此搜索。列表 "Titles" 大约有 5Mio。项目,它是一个列表。每个标题都将针对实体放置。
我的问题是,如何优化此搜索?我可以通过并行使用此搜索来最大限度地利用 CPU 吗?
欢迎任何提示或任何研究指南。
提前谢谢你。
for we in titles:
dist = stringdist.levenshtein_norm(we, ent)
if dist < best_1:
best_1 = dist
best_match_1 = we
elif dist < best_2:
best_2 = dist
best_match_2 = we
您最好的选择是使用 python multiprocessing
模块。使用工作池 运行 stringdist.levenshtein_norm
处理 titles
中的所有内容,并将每个函数 return (dist,ent)
作为一个元组,将其转化为 map-reduce 问题。然后取min()
,既给你最低分,又给你入围
如果您 运行 在具有 96 个内核的系统上运行,您将看到 ≈96 倍的加速。
如果您运行在具有 1 个核心的系统上运行,您将看不到加速。
您还可以通过在 GPU 或机器代码中将 stringdist.levenshtein_norm
重写为 运行 来加快速度。
我正在尝试对最小实体执行此搜索。列表 "Titles" 大约有 5Mio。项目,它是一个列表。每个标题都将针对实体放置。
我的问题是,如何优化此搜索?我可以通过并行使用此搜索来最大限度地利用 CPU 吗?
欢迎任何提示或任何研究指南。
提前谢谢你。
for we in titles:
dist = stringdist.levenshtein_norm(we, ent)
if dist < best_1:
best_1 = dist
best_match_1 = we
elif dist < best_2:
best_2 = dist
best_match_2 = we
您最好的选择是使用 python multiprocessing
模块。使用工作池 运行 stringdist.levenshtein_norm
处理 titles
中的所有内容,并将每个函数 return (dist,ent)
作为一个元组,将其转化为 map-reduce 问题。然后取min()
,既给你最低分,又给你入围
如果您 运行 在具有 96 个内核的系统上运行,您将看到 ≈96 倍的加速。
如果您运行在具有 1 个核心的系统上运行,您将看不到加速。
您还可以通过在 GPU 或机器代码中将 stringdist.levenshtein_norm
重写为 运行 来加快速度。