欧巴不知道你值的是那些操作,如果是乘法,算法所限,你不可能有本质的提高。又比如求逆,相信广大屌丝程序员立马会意识到:高斯-乔丹,小于五阶用伴随除矩阵以行列式,然后用SSE优化浮点速度。想再快就得去翻论文了,可是matlab那群鸟人,就是写论文的人,他们的数学知识是我等码农无法相比的,而matlab十几年前就在做SSE优化。你唯一能做的就是算法上的突破,一旦逆袭高斯-乔丹算法,你必将为国争光,名垂青史。
不过作为一个屌丝,你得明白,必须要抓住一切机会逆袭,因为题目只要求快,其他的限制一概没有,而matlab好像只有在特定情况下,才会有并行支持,所以逆袭计划如下:
1 去换块好的显卡,最好是geforce泰坦.
2 去下个opencl
3 把数据发到泰坦上,开个1000条线程算,就用最通用G-J算法好了。
4 完爆matlab。
其实在着色器里算,更快,因为着色器对程序的控制流程有一定限制,目的就是为了速度,而且着色器的并行程度比matlab高。
当然你也许会问,你这屌丝都懂的问题,别人matlab怎么可能不知道?他们还真知道,不过matlab需要支持任意精度,而且他不知道你啥时候需要并行,啥时候不需要,也不知道你的显卡是啥。至于最新的matlab版本是否支持基于GPU的并行计算,这个俺也不知道,好久没玩过了。如果支持的话,你就省事了。
其实你可以去关注一下并行计算的三方库,特别是那些支持OpenCL的。
用高斯约旦算法就是最佳的了吧
C++有专门算矩阵的库吗?想更快就自己写算法吧