【发布时间】:2020-02-04 21:20:29
【问题描述】:
假设我有一些函数可以对 float 数组执行矩阵运算(如转置):
void transpose(float *result, const float *input, int rows, int cols){
int i,j;
for(i = 0; i < rows; i++){
for(j = 0; j < cols; j++){
result[rows*j+i] = input[cols*i+j];
}
}
}
此函数适用于大小为sizeof(float) 的任何数据类型。是否可以修改此函数以处理任意数据类型的数组,或者是否需要为每种不同大小的数据类型(例如transpose_8、transpose_32 等)设置单独的函数?
【问题讨论】:
-
传递
void指针,传递数据大小,使用大小计算指针偏移量并使用memcpy而不是赋值。 -
@EugeneSh。谢谢,我知道我缺少一些明显的东西。将此作为答案,我会接受。
-
虽然可以实现通用矩阵转置例程,但矩阵转置是一个臭名昭著的性能问题,如果矩阵大小很大,则可以预期通用例程的性能会受到很大影响。在这种情况下,尝试通用化将是一个坏主意。