青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

string

string
posts - 27, comments - 177, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
通常我們大量使用array of structure來開發(fā)程序,因?yàn)閍rray of structure 具有面向?qū)ο蟮奶卣鳎子诿枋隹陀^世界,代碼也容易理解。但是 array of structure 卻常常會(huì)阻礙程序的并行化。
structure of array 與之相反,它易于并行化,但拙于描述客觀世界,代碼也變得難以理解。 
要想代碼性能好就要使用structure of array , 要想開發(fā)效率高就要使用array of structure, 設(shè)計(jì)之初就要做出選擇,開發(fā)后期如果想轉(zhuǎn)換到另一種方案將會(huì)大費(fèi)周章。 
 Intel 的 Array building block 提供了一套編程接口 讓我們可以從array of structure 的視角編寫基于 structure of array的程序。這話說起來有點(diǎn)繞,可以這樣理解,在邏輯層是array of structure , 在物理層是structrue of array. 
在C++中我們?nèi)绾螌?shí)現(xiàn)這種邏輯層(array of structure )/物理層(structrue of array )的分離與映射呢?
這是我們基于array of structure 的程序
struct RGB
{
        int r;
        int g;
        int b;
};
template<class T>
void test(T& rgb, size_t n)
{
    int i =0;
    for(i=0;i<SIZE;i++){
        rgb[i].r = 3*i;
        rgb[i].g = 3*i + 1;
        rgb[i].b = 3*i + 2;
    }
    for(i=0;i<SIZE;i++){
        rgb[i].b=rgb[i].r + rgb[i].g;
    }

#define SIZE 65536
int main()
{
  RGB* rgb = new RGB[SIZE];
  test(rgb, SIZE);
}

要將上面的程序轉(zhuǎn)換為SOA,我們首先為RGB定義一個(gè)影子
struct RGBshadow
{
        RGBshadow(int& r, int& g, int& b):r(r),g(g),b(b){}
        int& r;
        int& g;
        int& b;
};

然后我們有一個(gè)模板類用于定義SOA類,此類為通用類
template<class Shadow, typename T1, typename T2, typename T3>
class SOA
{
    public:
        typedef T1 aligned_t1 __attribute__((aligned(16)));
        typedef T2 aligned_t2 __attribute__((aligned(16)));
        typedef T3 aligned_t3 __attribute__((aligned(16)));
    public:
        SOA(int n){
            r = (aligned_t1*)_mm_malloc(n*sizeof(T1), 64);
            g = (aligned_t2*)_mm_malloc(n*sizeof(T2), 64);
            b = (aligned_t3*)_mm_malloc(n*sizeof(T3), 64);
        }
        ~SOA(){
            if(r) _mm_free(r);
            if(g) _mm_free(g);
            if(b) _mm_free(b);
        }
        Shadow operator [] ( size_t i){
            return Shadow(r[i],g[i],b[i]);
        }
    private:
        aligned_t1* r ;
        aligned_t2* g ;
        aligned_t3* b ;
};

#define SIZE 65536
int main()
{
  RGB* rgb = new RGB[SIZE];
  test(rgb, SIZE);
  SOA<RGBshadow, intint,int> soa(SIZE);
  test(soa, SIZE);
}
編譯器會(huì)自動(dòng)向量化test(soa,SIZE);
test(rgb, SIZE);中的第二個(gè)for循環(huán)生成的代碼如下:
.L14:
    movl    (
%rbx,%rax), %edx
    addl    
4(%rbx,%rax), %edx
    movl    
%edx, 8(%rbx,%rax)
    addq    $
12%rax
    cmpq    $
786432%rax
    jne .L14

test(soa, SIZE);中的第二個(gè)for循環(huán)生成的代碼如下:
.L16:
    movdqa  (
%rsi,%rax), %xmm0
    paddd   (
%rcx,%rax), %xmm0
    movdqa  
%xmm0, (%rdx,%rax)
    addq    $
16%rax
    cmpq    $
262144%rax
    jne .L16

要將AOS轉(zhuǎn)換為SOA,分如下三步
1。 定義一個(gè)影子結(jié)構(gòu)
2。 利用SOA<shadow,...>模板定義相應(yīng)的SOA結(jié)構(gòu)
3。 修改業(yè)務(wù)代碼,SOA<shadow,...> 與AOS有相同的操作方式,因而可以盡量少的修改代碼。


Feedback

# re: 并行化你的程序--Array of structure 與 structure of Array  回復(fù)  更多評(píng)論   

2012-08-06 14:14 by ningle
看你的博客,uefi的application基本都是用C++寫成,難道這是現(xiàn)在uefi application開發(fā)的主流嘛?

# re: 并行化你的程序--Array of structure 與 structure of Array  回復(fù)  更多評(píng)論   

2012-08-06 22:16 by djx_zh
@ningle
開發(fā)UEFI application的主流還是C。 如果application規(guī)模十分龐大,用C++開發(fā)效率會(huì)高些。

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日韩国产| 亚洲欧美区自拍先锋| 久久久人成影片一区二区三区| 国产酒店精品激情| 久久电影一区| 久久免费视频在线| 亚洲国产成人久久综合一区| 亚洲第一区中文99精品| 欧美大色视频| 亚洲专区免费| 欧美在线播放| 亚洲国产欧美日韩精品| 亚洲精品视频中文字幕| 国产精品高精视频免费| 久久久精品国产免费观看同学| 欧美一区二区三区免费视频| 在线不卡中文字幕| 最新日韩欧美| 国产欧美一区二区视频| 欧美成人午夜激情视频| 国产精品a久久久久久| 久久国产99| 欧美精品久久一区二区| 亚洲欧美在线免费| 蜜臀久久99精品久久久画质超高清| 亚洲精品久久久久久久久久久| 一区二区三区精密机械公司| 国内精品久久久久久影视8 | 在线免费高清一区二区三区| 亚洲精品裸体| 国产一区二区三区四区| 亚洲欧洲一区二区天堂久久| 国产人妖伪娘一区91| 亚洲国产天堂久久国产91| 国产精品一区免费在线观看| 亚洲国产高清高潮精品美女| 国产欧美日韩视频在线观看| 亚洲精品国产日韩| 在线精品一区二区| 亚洲综合色丁香婷婷六月图片| 亚洲黄色毛片| 久久久av水蜜桃| 亚洲欧美日韩国产一区二区| 欧美大片第1页| 久久在线免费视频| 国产精品日韩在线播放| 亚洲日本乱码在线观看| 好吊色欧美一区二区三区四区| 一区二区电影免费在线观看| 亚洲精品免费在线观看| 久久久一本精品99久久精品66| 亚洲欧美日韩精品久久久| 欧美丰满高潮xxxx喷水动漫| 嫩草成人www欧美| 国内精品久久久久影院 日本资源| 99riav久久精品riav| 91久久久久久久久久久久久| 久久久国产一区二区三区| 久久9热精品视频| 国产精品久久久久久久久久直播| 亚洲精品看片| 一本色道久久精品| 欧美欧美午夜aⅴ在线观看| 欧美成人午夜77777| 在线观看日韩国产| 久久久蜜桃一区二区人| 久久综合999| **网站欧美大片在线观看| 欧美在线黄色| 久久综合久久久| 1024欧美极品| 欧美黄污视频| 亚洲精品美女在线观看| 亚洲天堂成人在线观看| 欧美午夜精品久久久久久超碰| 一区二区三区日韩精品| 亚洲欧美日韩国产中文在线| 国产麻豆精品视频| 欧美一区二区啪啪| 欧美xxxx在线观看| 亚洲老板91色精品久久| 欧美屁股在线| 亚洲与欧洲av电影| 久久se精品一区二区| 精品成人乱色一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美高清在线观看| 一区二区三区精密机械公司| 国产精品久久777777毛茸茸| 欧美一区=区| 亚洲国产婷婷综合在线精品| 亚洲视频一区| 国产专区精品视频| 欧美激情导航| 亚洲欧美日韩国产综合精品二区| 久久婷婷综合激情| 妖精视频成人观看www| 国产乱码精品一区二区三区五月婷 | 亚洲免费观看视频| 欧美性猛交一区二区三区精品| 午夜久久tv| 亚洲国产天堂网精品网站| 午夜欧美大尺度福利影院在线看| 国产在线日韩| 欧美日韩一区在线观看| 久久精品国产91精品亚洲| 亚洲欧洲综合另类| 久久久久www| 中日韩美女免费视频网站在线观看| 国产午夜精品一区理论片飘花| 欧美ed2k| 久久精品免费看| 一本久久综合| 亚洲成色999久久网站| 欧美另类一区| 久久久国产精品一区| 日韩视频二区| 亚洲第一福利视频| 久久久免费av| 亚洲欧美日韩另类精品一区二区三区| 在线成人av网站| 国产女优一区| 国产精品久久久久影院亚瑟 | 亚洲一区二区三区四区在线观看 | 免费观看一级特黄欧美大片| 中文一区二区在线观看| 亚洲欧洲综合另类| 伊人影院久久| 激情久久综艺| 国产一区二区三区久久悠悠色av | 欧美乱大交xxxxx| 免费在线亚洲| 美国成人直播| 免费亚洲一区| 免费欧美在线视频| 乱人伦精品视频在线观看| 欧美中文在线免费| 午夜精品在线| 午夜欧美精品久久久久久久| 亚洲网站视频福利| 中文精品一区二区三区| 中文av一区二区| 亚洲性图久久| 亚洲中字黄色| 香蕉久久一区二区不卡无毒影院| 亚洲欧美电影在线观看| 亚洲一区免费观看| 亚洲欧美日韩高清| 欧美一区免费视频| 欧美在线视频免费| 久久久xxx| 老司机精品福利视频| 蜜臀99久久精品久久久久久软件 | 亚洲在线观看免费| 午夜精品美女自拍福到在线| 欧美一级播放| 久久视频在线视频| 欧美大片网址| 国产精品扒开腿爽爽爽视频| 国产精品麻豆成人av电影艾秋| 国产精品欧美日韩一区二区| 国产日韩欧美一区二区| 在线电影国产精品| 亚洲美女视频在线观看| 亚洲视频一区二区免费在线观看| 亚洲与欧洲av电影| 久久精品色图| 欧美韩国一区| 中文在线资源观看网站视频免费不卡 | 国产精品日韩欧美一区二区三区 | 久久综合国产精品台湾中文娱乐网| 久久本道综合色狠狠五月| 久久久久久日产精品| 欧美精品18+| 国产麻豆成人精品| 亚洲欧洲精品一区二区精品久久久| 99re热这里只有精品免费视频| 亚洲欧美一区二区三区极速播放| 久久久久免费观看| 亚洲精品乱码久久久久| 亚洲欧美成人精品| 欧美成人精品不卡视频在线观看| 欧美日韩亚洲一区二区| 好吊日精品视频| 亚洲午夜av| 裸体女人亚洲精品一区| 亚洲免费观看高清在线观看 | 欧美激情一区二区三级高清视频| 国产精品美女久久久免费| 亚洲高清久久网| 欧美亚洲一区| 亚洲美女免费精品视频在线观看| 亚洲欧美中文在线视频| 欧美日本免费| 亚洲成色777777女色窝| 久久成人人人人精品欧| 9国产精品视频| 乱中年女人伦av一区二区| 国产日韩精品视频一区二区三区| av成人国产|