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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

C#
慕斯王 2023-05-14 16:49:51
這是我的一段代碼,計(jì)算差異。它工作正常但需要很多時(shí)間(因?yàn)楦叨群蛯挾龋??!皵?shù)據(jù)”是一個(gè)灰度圖像位圖?!斑^濾器”是 [3,3] 矩陣?!癴h”和“fw”最大值為 3。我希望加快這段代碼的速度。我也嘗試使用并行,但是它不能正常工作(錯(cuò)誤超出范圍)。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貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

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

}


查看完整回答
反對(duì) 回復(fù) 2023-05-14
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

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

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

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

查看完整回答
反對(duì) 回復(fù) 2023-05-14
  • 2 回答
  • 0 關(guān)注
  • 262 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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