• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 119  文章 - 290  trackbacks - 0

            博客搬家了哦,請(qǐng)移步
            叫我abc

            常用鏈接

            留言簿(12)

            隨筆分類

            我的博客

            搜索

            •  

            積分與排名

            • 積分 - 304348
            • 排名 - 84

            最新評(píng)論

            閱讀排行榜

            最近閱讀了《GAME PROGRAMMING GEMS6》,頗有收獲,以筆記之。

            首先是GENERAL PROGRAMMING SECTION。

            1.2 Utilizing Multicore Processors with OpenMP
            OpenMP是一個(gè)并行庫(kù),和一般的多線程庫(kù)不同,OpenMP著重于局部和片斷的并行,目前VC8.0和GCC4.2均已支持了OpenMP。

            (a)OpenMP的并行方式
            在我未接觸OpenMP之前,我通過多線程只認(rèn)識(shí)到并行其實(shí)和多進(jìn)程并行沒有什么區(qū)別,比如UI線程和工作線程,又比如渲染線程和后臺(tái)裝載線程。
            它們是兩條生命期長(zhǎng)得不得了的線程,通過臨界區(qū)和互斥體訪問共享變量,協(xié)同完成任務(wù)。
            我一直覺得這樣的并行挺危險(xiǎn)的,在這長(zhǎng)長(zhǎng)的生命周期中,它們無法判斷對(duì)方目前正處于何種狀態(tài),只能通過加鎖來解決溝通問題。
            OpenMP的并行是局部的并行,線程的生命周期較短,并且處于同一狀態(tài)。在串行程序中,程序可以分為許多有序的任務(wù),像流水線般,如
               step1->step2->step3->step4->step5。
            OpenMP就是針對(duì)某一個(gè)step,來展開并行處理的。比如之前的5個(gè)step,其中step2和step5使用了并行處理,那么每一步都線程數(shù)量如下(假設(shè)是雙核,那進(jìn)入并行時(shí)產(chǎn)生4個(gè)線程):
               1->4->1->1->4。
            一般能夠展開并行的任務(wù)最好是for循環(huán)的任務(wù),這種任務(wù)可以將被處理的數(shù)據(jù)均分到多個(gè)線程上,并行處理。
            如:
            for n=0,100
               proc( data[n] );
            就可以被OpenMP展開為以下4個(gè)循環(huán),每個(gè)循環(huán)分配一個(gè)線程:
            for n=0,25
               proc( data[n] );
            for n=25,50
                proc( data[n] );
            for n=50,75
                proc( data[n] );
            for n=75,100
                proc( data[n] );

            (b)什么樣的task應(yīng)該交給OpenMP并行?
            由上面的例子可以看到,一般是for循環(huán)的task,可以交給OpenMP。但是這里還是有些需要注意到地方的,比如在處理data[i]的時(shí)候,就不要去訪問data[j]的數(shù)據(jù),也就是盡量不要寫出一些需要加鎖訪問的代碼。即使在處理某個(gè)數(shù)據(jù)的時(shí)候要訪問其他相關(guān)的數(shù)據(jù),這樣的數(shù)據(jù)需要多數(shù)也是可以在進(jìn)入并行區(qū)域前準(zhǔn)備好的:
                  獲取(串行)->處理(并行)->回寫(串行)

            (c)OpenMP的使用接口
            不要在正式程序中太著急的使用OpenMP,先老老實(shí)實(shí)的寫你的串行程序,然后在程序完成后經(jīng)過測(cè)量找出熱點(diǎn),再對(duì)某些熱點(diǎn)使用OpenMP并行。說到這里,你應(yīng)該感覺到,OpenMP是一種想要就要,不破壞程序原有結(jié)構(gòu)的東西了吧。
            沒錯(cuò),OpenMP簡(jiǎn)單用的話簡(jiǎn)單無比,復(fù)雜用的話也不是那么困難。
            比如:
            #pragma omp paralle for
            for ( int i=0; i < 1000; ++i )
                proc( data[i] );
            #pragma omp指令在編譯器的支持下,就會(huì)展開成許多東西,并切實(shí)的發(fā)生并行。
            由于并行一向不好調(diào)試,所以一開始要做的就是,串行編程,然后運(yùn)行無措,最后才優(yōu)化,不是嗎?

            (d)使用OpenMP的必要性
            在游戲開發(fā)中,有兩種程序必然要OpenMP的并行,一種是MMOG的服務(wù)器程序,上面跑著近萬NPC和子物體,再加上幾千玩家,這樣的處理量,不需要多核不需要并行是不可能的。另一種就是游戲機(jī)游戲開發(fā),比如X360,就是幾個(gè)低能的CPU湊在一起拼出來的,這要是不并行,那鐵定沒法跑了。
            高頻的CPU估計(jì)是很難再有了,進(jìn)入多核時(shí)代,不用多線程,不用并行,出門都不好意思跟人打招呼····

            PS:在看本書之前,我就已經(jīng)由X360的朋友介紹,進(jìn)行了OpenMP的研究,有一種與主流同步的感覺+ω+


            1.3Computer Vision in Games Using the OpenCV Library
            (a)OpenCV是一個(gè)視覺,圖像處理庫(kù),比如能從照片中識(shí)別出人臉之類的
            (b)OpenCV是Intel發(fā)起的,所以在Intel的平臺(tái)上效率會(huì)優(yōu)于AMD平臺(tái)
            (c)有興趣的可以用OpenCV做出itoy這樣的游戲,也就是使用camera操作的游戲

            我個(gè)人對(duì)OpenCV目前不是很有興趣,不過公司里面還是有人玩過一段時(shí)間,又一次覺得和主流同步了+ω+

            好,累了,今天先寫到這里,剩下的慢慢出。

            posted on 2007-11-24 10:14 LOGOS 閱讀(2084) 評(píng)論(4)  編輯 收藏 引用 所屬分類: 《GAME PROGRAMMING GEMS6》讀書筆記

            FeedBack:
            # re: 《GAME PROGRAMMING GEMS6》讀書筆記-1[未登錄] 2007-11-24 10:24 海邊沫沫
            正準(zhǔn)備學(xué)OpenMP,摟主的文章對(duì)我很有幫助。  回復(fù)  更多評(píng)論
              
            # re: 《GAME PROGRAMMING GEMS6》讀書筆記-1 2007-11-24 21:19 羅賓李
            學(xué)習(xí),這東西有點(diǎn)意思  回復(fù)  更多評(píng)論
              
            # re: 《GAME PROGRAMMING GEMS6》讀書筆記-1 2007-11-26 09:29 夢(mèng)在天涯
            OpenMp 是intel的多線程lib把,看過簡(jiǎn)單的實(shí)例,但是一直沒有用過啊
              回復(fù)  更多評(píng)論
              
            # re: 《GAME PROGRAMMING GEMS6》讀書筆記-1 2007-11-26 14:55 LOGOS
            @夢(mèng)在天涯
            不是intel的東西,是很多廠商共同維護(hù)的標(biāo)準(zhǔn),由編譯器進(jìn)行支持  回復(fù)  更多評(píng)論
              
            欧美午夜A∨大片久久 | 精品国产一区二区三区久久久狼 | 精品久久久久久无码专区不卡| 久久综合亚洲鲁鲁五月天| 久久久久久国产精品美女| 久久精品国产精品亚洲艾草网美妙| 久久久无码精品亚洲日韩软件| 中文字幕久久亚洲一区| 亚洲国产精品无码久久久不卡| 亚洲国产精品无码久久久秋霞2| 国产精品美女久久久久AV福利| 亚洲国产成人精品女人久久久| 青青草原综合久久| 亚洲国产另类久久久精品小说| 国产精品女同一区二区久久| 国产亚洲精久久久久久无码| 国产精品久久99| 亚洲精品乱码久久久久久自慰| 狠狠色综合网站久久久久久久| 99久久国产综合精品成人影院| 久久精品无码一区二区app| 久久精品九九亚洲精品天堂| 亚洲国产美女精品久久久久∴| 久久最近最新中文字幕大全| 久久久久久久综合狠狠综合| 精品久久人人做人人爽综合 | 精品国产热久久久福利| 久久精品国产亚洲AV无码麻豆| 国产A级毛片久久久精品毛片| 久久久久亚洲国产| 久久精品国产一区二区三区| 99精品国产综合久久久久五月天| 久久久久国产精品嫩草影院| 中文字幕亚洲综合久久| 青青青国产精品国产精品久久久久 | 久久婷婷五月综合97色一本一本| 久久久久久午夜精品| 久久久久成人精品无码| 色婷婷综合久久久久中文字幕| 品成人欧美大片久久国产欧美...| 久久成人精品视频|