16k乘以16k的float矩阵做转置
在一个文件里存了16k×16k的float型裸数据,一共是1GB,想做转置操作,存在另一个文件里。
目前的想法是:
设置一个开辟的内存上限,例如128MB,开两个这么大的内存块,一个存读的,一个存写的。
然后读取原数据中的若干列,如果设置的是128MB,那么一共可以读取 128M / 16k / sizeof(float) = 2k列。
也就是说,在外层循环读取块数据,所以一共读取16k /2k = 8次。
当然每块是没法一次读的,因为数据是非连续的。fread每次只能读2k个数。一次大循环需要执行16k次。
所以fread一共调用了 16k * 8 = 128k次。
fwrite可以一次写一大块,调用8次就可以了。
但是这样做还是有点慢,大概需要100s,有没有更好的法子?
因为数据不一定是1GB,可能还更大,所以暂时不考虑开辟一个大内存,将整个数据读进来。