我的代码很慢,所以我想我可以用多线程推送它。但是当我使用多线程时它变慢了。它用于卷积操作。Matrix[] 的长度约为 1 到 64,每个 Matrix 的大小为 28x28。Matrix[][] 内核长度在第一维和第二维中为 1 到 64,每个内核为 3x3 大。(Matrix.matrix 是一个双 [][] 数组)
我已经尝试过使用 Executorservice,但也有同样的问题。
public static Matrix[] convolve(Matrix[] in, Matrix[][] kernel) {
// Defining size of output matrix
int kr = kernel[0][0].rows - 1;
int kc = kernel[0][0].cols - 1;
Matrix[] out = new Matrix[kernel.length];
for (int i = 0; i < kernel.length; i++) {
out[i] = new Matrix(in[0].rows - kr, in[0].cols - kc);
}
// Convolution operation
for (int i = 0; i < out[0].rows; i++) {
for (int j = 0; j < out[0].cols; j++) {
for (int m = 0; m < kernel.length; m++) { // Size of filters
double sum = 0;
for (int n = 0; n < kernel[m].length; n++) { // Depth of filters
for (int k = 0; k < kernel[m][n].rows; k++) { // Stride over
for (int l = 0; l < kernel[m][n].cols; l++) { // Stride over
sum += in[n].matrix[i + k][j + l] * kernel[m][n].matrix[k][l];
}
}
}
out[m].matrix[i][j] = sum;
}
}
}
return out;
}
没有线程它可以在 5 分钟内完成 70000 次操作,而使用线程它只能完成 40000 次操作。(Matrix[] in length = 8 and Matrix[][] kernel length = 8 and 8)
跃然一笑
芜湖不芜
随时随地看视频慕课网APP
相关分类