我设法追查生物信息学计划的瓶颈。其中之一是计算大数据矩阵的t-test,40K * 30(有时列数可能接近200)矩阵。数据矩阵的行是基因,列是两组的样本,可以相互比较。
const std::size_t gene_count(40000);
std::vector<double> t_score_vector(gene_count, 0.0);
for(std::size_t i=0; i<gene_count; ++i){
// do regular t-test of the two groups for row i of the data matrix
t_score_vector[i] = t_test_score; // this single assignment decreased performance by 50%
}
现在这个大小的数据矩阵不可能完全适合缓存,8 * 40000 * 30~9MB,普通PC最多有8MB L3缓存。更糟糕的是,写入存储所有基因的t检验的载体可以减慢很多事情。
是否有更好的设计,以更好地利用缓存?