根据矩阵大小(从8x8到20x20),我对方形矩阵乘法有不同的功能。这些函数彼此不同,因为每个函数采用不同的优化策略,即不同的循环排列和不同的循环展开因子。在程序生命周期中,矩阵大小是不变的。我的目标是减少决定必须使用哪个功能的时间。例如,一个简单的实现是:
if (matrixSize == 8) C = mxm8(A, B);
else if (matrixSize == 9) C = mxm9(A,B);
...
else if (matrixSize == 20) C = mxm20(A,B);
在这种情况下,决定对每个矩阵乘法使用哪个函数所花费的时间是很重要的。可以使用C++函数模板立即调用适当的函数吗?
最佳答案
如果矩阵的大小在程序生命周期内是不变的,则可以将std::array
的std::array
用于矩阵的类型。然后,您可以拥有一个乘法函数,并针对您支持的不同类型对其进行重载,并且选择将在编译时完成。
如果您对矩阵使用一些自定义类,并且可以将其设置为大小为模板参数的模板类,则可以采用这种方法。