我必须编写 Levenshtein 距离问题的优化多线程实现。它可以使用带有矩阵的动态规划来计算,Levenshtein distance 上的维基百科页面已经足够好。
现在,我可以同时计算对角线元素。没关系。
我的问题现在与缓存有关。c++ 中的矩阵通常逐行保存在内存中,对吗?好吧,这对我不利,因为我需要前一行的 2 个元素和当前行的 1 个元素来计算我的结果,这在缓存方面太可怕了。缓存将保存当前行(或其中的一部分),然后我要求它可能不再保存前一个。然后对于另一个,我需要对角线的不同部分,所以再一次,我要求完全不同的行,缓存不会为我准备好那些。
因此,我想将我的矩阵以块或对角线的形式保存到内存中。这将导致更少的缓存未命中,并使我的实现再次更快。
你是怎样做的?我尝试在互联网上搜索,但我找不到任何能告诉我方向的东西。是否可以告诉 c++ 如何在内存中订购该类型?
编辑:你们中的一些人似乎对我的问题的性质感到困惑。我想以自定义方式将矩阵(无论我将其设为 2D 数组还是任何其他方式)保存到 MEMORY 中。通常,二维数组将逐行保存,我需要使用对角线,因此缓存会在我将处理的巨大矩阵(可能数百万行和列)上丢失很多。