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

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

如何加速 C# 中的嵌套循環(huán)

如何加速 C# 中的嵌套循環(huán)

C#
慕斯王 2023-05-14 16:49:51
這是我的一段代碼,計算差異。它工作正常但需要很多時間(因為高度和寬度)?!皵?shù)據(jù)”是一個灰度圖像位圖?!斑^濾器”是 [3,3] 矩陣?!癴h”和“fw”最大值為 3。我希望加快這段代碼的速度。我也嘗試使用并行,但是它不能正常工作(錯誤超出范圍)。private float[,] Differentiate(int[,] Data, int[,] Filter){    int i, j, k, l, Fh, Fw;    Fw = Filter.GetLength(0);    Fh = Filter.GetLength(1);    float sum = 0;    float[,] Output = new float[Width, Height];    for (i = Fw / 2; i <= (Width - Fw / 2) - 1; i++)    {        for (j = Fh / 2; j <= (Height  - Fh / 2) - 1; j++)        {            sum=0;            for(k = -Fw/2; k <= Fw/2; k++)            {                for(l = -Fh/2; l <= Fh/2; l++)                {                    sum = sum + Data[i+k, j+l] * Filter[Fw/2+k, Fh/2+l];                }            }            Output[i,j] = sum;        }    }    return Output;}
查看完整描述

2 回答

?
烙印99

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

對于并行執(zhí)行,您需要在方法的開頭刪除像變量聲明這樣的 c 語言,并在實際使用的范圍內(nèi)聲明它們,這樣它們就不會在線程之間共享。使其并行應該為性能提供一些好處,但是將它們?nèi)吭O為ParallerFors 并不是一個好主意,因為實際上可以并行運行的線程數(shù)量是有限制的。我會嘗試僅使用頂級循環(huán)來實現(xiàn)它:


private static float[,] Differentiate(int[,] Data, int[,] Filter)

{

    var Fw = Filter.GetLength(0);

    var Fh = Filter.GetLength(1);


    float[,] Output = new float[Width, Height];


    Parallel.For(Fw / 2, Width - Fw / 2 - 1, (i, state) =>

    {

        for (var j = Fh / 2; j <= (Height - Fh / 2) - 1; j++)

        {

            var sum = 0;

            for (var k = -Fw / 2; k <= Fw / 2; k++)

            {

                for (var l = -Fh / 2; l <= Fh / 2; l++)

                {

                    sum = sum + Data[i + k, j + l] * Filter[Fw / 2 + k, Fh / 2 + l];

                }

            }


            Output[i, j] = sum;

        }

    });

    return Output;

}


查看完整回答
反對 回復 2023-05-14
?
四季花海

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

這是使用 GPU 優(yōu)于使用 CPU 的任務的完美示例。GPU 每秒能夠執(zhí)行數(shù)萬億次浮點運算 (TFlops),而 CPU 性能仍以 GFlops 衡量。要注意的是,只有使用 SIMD 指令(單指令多數(shù)據(jù))才有用。GPU 擅長數(shù)據(jù)并行任務。如果不同的數(shù)據(jù)需要不同的指令,使用 GPU 沒有優(yōu)勢。

在您的程序中,位圖的元素經(jīng)過相同的計算:相同的計算只是數(shù)據(jù)略有不同(SIMD!)。所以使用 GPU 是一個不錯的選擇。這不會太復雜,因為 GPU 上的計算線程不需要交換信息,它們也不依賴于先前迭代的結果(每個元素將由 GPU 上的不同線程處理)。

例如,您可以使用 OpenCL 輕松訪問 GPU。

查看完整回答
反對 回復 2023-05-14
  • 2 回答
  • 0 關注
  • 250 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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