亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
123456789
最近訪問(wèn)板塊 發(fā)新帖
樓主: hy036630
打印 上一主題 下一主題

多線程O(píng)R多進(jìn)程-訪存密集型應(yīng)用 [復(fù)制鏈接]

論壇徽章:
0
81 [報(bào)告]
發(fā)表于 2011-12-29 18:34 |只看該作者
zylthinking 發(fā)表于 2011-12-29 18:32
你這話說(shuō)的, 8個(gè)核的8個(gè)線程能不比一個(gè)線程高么, 問(wèn)題是你 /8 以后相比單線程性能有沒(méi)有下降, 以及 ...

是說(shuō)的單線程能力呢  8個(gè)線程的時(shí)候 單線程能力比一個(gè)線程還快

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
82 [報(bào)告]
發(fā)表于 2011-12-29 18:36 |只看該作者
hy036630 發(fā)表于 2011-12-29 18:34
是說(shuō)的單線程能力呢  8個(gè)線程的時(shí)候 單線程能力比一個(gè)線程還快


做的工作也一樣? 不會(huì)一個(gè)做了全套, 一個(gè)做了其中的 1/8 吧; 主要是如果下降, 或者持平還能理解, 他還能比單線程快, 就有些不明白了

論壇徽章:
0
83 [報(bào)告]
發(fā)表于 2011-12-29 18:38 |只看該作者
zylthinking 發(fā)表于 2011-12-29 18:36
做的工作也一樣? 不會(huì)一個(gè)做了全套, 一個(gè)做了其中的 1/8 吧; 主要是如果下降, 或者持平還能理解,  ...

能夠理解  呵呵  現(xiàn)在的SMP是共享最后一級(jí)緩存的 如圖,所以后面的幾個(gè)線程不需要從內(nèi)存load數(shù)據(jù) 所以速度有提高可以理解

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
84 [報(bào)告]
發(fā)表于 2011-12-29 18:41 |只看該作者
本帖最后由 zylthinking 于 2011-12-29 18:42 編輯
hy036630 發(fā)表于 2011-12-29 18:38
能夠理解  呵呵  現(xiàn)在的SMP是共享最后一級(jí)緩存的 如圖,所以后面的幾個(gè)線程不需要從內(nèi)存load數(shù)據(jù) 所以速度 ...


那不對(duì), 從你的 event 看, 8個(gè)線程第一個(gè)將其load 進(jìn)cache, 剩下的直接讀; 但單線程不也是將其load進(jìn)cache? 每一個(gè) event 都有一個(gè)load 的動(dòng)作, 怎么會(huì)提高?

何況, 多核是共享一級(jí)緩存的, 莫非多CPU也共享么, 你這個(gè)圖也畫(huà)的是沒(méi)共享嘛

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
85 [報(bào)告]
發(fā)表于 2011-12-29 18:55 |只看該作者
本帖最后由 zylthinking 于 2011-12-29 18:56 編輯
zylthinking 發(fā)表于 2011-12-29 18:41
那不對(duì), 從你的 event 看, 8個(gè)線程第一個(gè)將其load 進(jìn)cache, 剩下的直接讀; 但單線程不也是將其load進(jìn) ...


能想到的一個(gè)理由是8線程爭(zhēng)奪運(yùn)行權(quán)的能力提升了, 原來(lái)是 1/(others + 1), 現(xiàn)在成了 8/(others + 8 )

論壇徽章:
0
86 [報(bào)告]
發(fā)表于 2011-12-30 09:07 |只看該作者

template<class T>
class RingQueue {
public:

    RingQueue() {
        cout << "RingQueue::ctor" << endl;
    };

    virtual ~RingQueue() {
        cout << "RingQueue::destory" << endl;
    };

    void InitQueue() {
        Push_Count = 0;
        Push_Index = 0;
        Pop_Count = 0;
        Pop_Index = 0;
        memset(List, 0, sizeof (List));
    }

    bool Push(const T& AData) {
        if (Push_Count - Pop_Count < Max_Count) {
            List[Push_Index] = AData;
            Push_Count++;
            if (Push_Index == High_Index)
                Push_Index = 0;
            else
                Push_Index++;
            return true;
        } else
            return false;
    }
    T Pop() {
        T result = NULL;
        if (Push_Count != Pop_Count) {
            result = List[Pop_Index];
            Pop_Count++;
            if (Pop_Index == High_Index)
                Pop_Index = 0;
            else
                Pop_Index++;
        }
        return result;
    }

    long size() {
        return this->Push_Count - this->Pop_Count;
    }

private:
    RingQueue(const RingQueue& orig);
    T List[524288 * 2]; //2^19  4M�ռ�
    const static unsigned long Max_Count = 524288 * 2;
    const static unsigned long High_Index = 524288 * 2 - 1;
    unsigned long Push_Count;
    unsigned long Push_Index;
    unsigned long Pop_Count;
    unsigned long Pop_Index;

};
---------------------------------------------------------無(wú)奈的分割線
之前的“編譯器亂序優(yōu)化”,我開(kāi)始說(shuō)Pop()函數(shù)里改成if (Push_Count > Pop_Count)可以避免,想到溢出時(shí)的情況就不成立了,改成if (Push_Count - Pop_Count > 0)就好,但Push函數(shù)也會(huì)有類似的問(wèn)題,就是在環(huán)形隊(duì)列滿的時(shí)候,所以我改成如下:

    bool Push(const T& AData) {
        if (size()  < Max_Count) {//環(huán)形隊(duì)列不滿
            if(List[Push_Index]  != NULL)//這時(shí)候元素還沒(méi)被pop出去
                  return false;
            List[Push_Index] = AData;
            Push_Count++;
            if (Push_Index == High_Index)
                Push_Index = 0;
            else
                Push_Index++;
            return true;
        } else
            return false;
    }
    T Pop() {
        T result = NULL;
        if (size() > 0) {//環(huán)形隊(duì)列不為空
            result = List[Pop_Index];
            Pop_Count++;
            if (Pop_Index == High_Index)
                Pop_Index = 0;
            else
                Pop_Index++;
            List[Pop_Index] = NULL;//已經(jīng)pop的元素清空,放到這里防止編譯器跟Pop_Count++;語(yǔ)句優(yōu)化成序列顛倒
        }
        return result;
    }

論壇徽章:
0
87 [報(bào)告]
發(fā)表于 2011-12-30 09:26 |只看該作者
hy036630 發(fā)表于 2011-12-29 17:39
回復(fù) 76# qsc555

我覺(jué)得pop出來(lái)的數(shù)量做統(tǒng)計(jì)并不是真正的吞吐量,把你的統(tǒng)計(jì)(1個(gè)測(cè)試線程,或8個(gè)線程,或8個(gè)進(jìn)程)看成一個(gè)統(tǒng)計(jì)系統(tǒng)A,對(duì)這個(gè)A來(lái)說(shuō),每秒處理從A外部進(jìn)來(lái)的流數(shù)據(jù)量(events),才是你要的處理能力吧?你從這個(gè)統(tǒng)計(jì)概念再比較8個(gè)線程和8個(gè)進(jìn)程看看。
從我在上面理解的吞吐量來(lái)說(shuō),要提高吞吐量,把8個(gè)線程改成每個(gè)線程做所有原來(lái)8個(gè)線程分別要做的事,然后這8個(gè)線程都接收A系統(tǒng)外部來(lái)的流數(shù)據(jù),最后匯總寫(xiě)到文件的時(shí)候再計(jì)算各個(gè)統(tǒng)計(jì)量的總和;

論壇徽章:
0
88 [報(bào)告]
發(fā)表于 2011-12-30 11:25 |只看該作者
看完整個(gè)帖子,學(xué)習(xí)一下樓主的并行處理方式。留個(gè)腳印
流水線流的是指針,而不是處理過(guò)程,處理過(guò)程還是并發(fā)的。
線程不好進(jìn)程好,從樓主自己的結(jié)論看,是處理過(guò)程的問(wèn)題。

論壇徽章:
0
89 [報(bào)告]
發(fā)表于 2011-12-31 12:43 |只看該作者
qsc555 發(fā)表于 2011-12-30 09:07
template
class RingQueue {
public:

編譯器優(yōu)化的問(wèn)題我還真沒(méi)考慮過(guò),借你的思路正好可以學(xué)習(xí)一下,呵呵。

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
90 [報(bào)告]
發(fā)表于 2011-12-31 14:37 |只看該作者
本帖最后由 zylthinking 于 2011-12-31 21:32 編輯
qsc555 發(fā)表于 2011-12-30 09:07
T Pop() {
        T result = NULL;
        if (size() > 0) {//環(huán)形隊(duì)列不為空
            result = List[Pop_Index];
            Pop_Count++;
            if (Pop_Index == High_Index)
                Pop_Index = 0;
            else
                Pop_Index++;
            List[Pop_Index] = NULL;//已經(jīng)pop的元素清空,放到這里防止編譯器跟Pop_Count++;語(yǔ)句優(yōu)化成序列顛倒
        }
        return result;
    }


真能防止編譯器亂序嗎?
123456789
返回列表 發(fā)新帖
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP