问题的标题可能听起来很混乱,但实际上.. 它是!
我有一个执行这一行的程序
new_matrix = matrix1 + matrix2 + CPU_GIVE_ME_A_MATRIX();
“+”运算符被重载,我创建了一个简单的矩阵类来简化代码阅读。
myMatrixClass operator+ (const myMatrixClass& mt)
{
myMatrixClass result(this->rows, this->columns);
// Sum each couple of values
for(int i=0; i<rows; i++)
{
for(int j=0; j<columns; j++)
result.values[i*columns+j] = this->values[i*columns+j] + mt.values[i*columns+j];
}
return result;
}
我有另一个版本的程序,它用 CUDA 计算第三项
new_matrix = matrix1 + matrix2 + GPU_GIVE_ME_A_MATRIX();
在分析了一下之后,我发现:
整个 GPU_GIVE_ME_A_MATRIX() 函数比 CPU_GIVE_ME_A_MATRIX() 函数更快(包括内存传输),所以 CUDA 完成了它的工作。
但是 new_matrix = matrix1 + matrix2 + CPU_GIVE_ME_A_MATRIX(); 比 new_matrix = matrix1 + matrix2 + GPU_GIVE_ME_A_MATRIX() 快;
什么可能导致这种奇怪的行为?CPU缓存什么?
由于这条线被执行了几次(渲染需要),整个CUDA程序比CPU版本慢,但正如我所说的GPU_GIVE_ME_A_MATRIX()函数比CPU_GIVE_ME_A_FUNCTION()快