第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在我的代碼中單線程比多線程快?

為什么在我的代碼中單線程比多線程快?

躍然一笑 2022-05-12 18:38:53
我的代碼很慢,所以我想我可以用多線程推送它。但是當我使用多線程時它變慢了。它用于卷積操作。Matrix[] 的長度約為 1 到 64,每個 Matrix 的大小為 28x28。Matrix[][] 內(nèi)核長度在第一維和第二維中為 1 到 64,每個內(nèi)核為 3x3 大。(Matrix.matrix 是一個雙 [][] 數(shù)組)我已經(jīng)嘗試過使用 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 分鐘內(nèi)完成 70000 次操作,而使用線程它只能完成 40000 次操作。(Matrix[] in length = 8 and Matrix[][] kernel length = 8 and 8)
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經(jīng)驗 獲得超7個贊

生成線程并運行線程有其自身的開銷并消耗資源。所以它會減慢你的程序,否則會在單個線程中執(zhí)行。

例如:如果您的程序由于阻塞操作而變慢,那么使用線程將減少整體執(zhí)行時間。

注意:使用executorservice-固定線程池和調(diào)度worker任務(wù),不要在loop里面創(chuàng)建線程,線程創(chuàng)建有自己的開銷,會很慢。


查看完整回答
反對 回復(fù) 2022-05-12
  • 1 回答
  • 0 關(guān)注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號