精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

并行程序VS串行程序——優化實錄

開發 開發工具
透過MPI寫成一個并行排序程序,但其實這是一個偽并行程序,其實質還是一個串行程序。那么究竟該怎么對比他們呢?

  在多核處理器、超級計算機日益普及的今天,程序員們怎能對并行程序“袖手旁觀”呢?

  為了練手,我用MPI寫了一個并行排序程序,

  先介紹下我的第一個版本,大概的思路是:

  使用MPI在各個進程之間進行通信,

  1. 進程0生成隨機數,并且講數據分段,將各段數據分配給其他進程

  2. 其他進程收到數據段,使用冒泡排序進行,發送回進程0

  3. 進程0收到這些數據,通過歸并排序按順序整合起來。

  下面是這個版本代碼,

  1.   //MPI Hello World demo  
  2.   #include <mpi.h>  
  3.   #include <stdio.h>  
  4.   #include <stdlib.h>  
  5.   #include <time.h>  
  6.   #defineN 30  
  7.   intmain(intargc, char** argv)  
  8.   {  
  9.  intprocessRank, processNum, t, data, num;  
  10.   intdataArr[N];  
  11.   intdataArrB[N];  
  12.   intpointer[100];  
  13.   intsecEnd[100];  
  14.   MPI_Status mpistat;  
  15.   MPI_Init(&argc, &argv);  
  16.   MPI_Comm_size(MPI_COMM_WORLD, &processNum);  
  17.   MPI_Comm_rank(MPI_COMM_WORLD, &processRank);  
  18.   printf("Yes, Sir! From process %i of %i ", processRank, processNum);  
  19.   if(processRank == 0)  
  20.   {  
  21.   srand(time(NULL));  
  22.   for(inti = 0;i <N; i++){  
  23.   dataArr[i] = rand()%1000;  
  24.  }  
  25.   printf("Original Array: ");  
  26.   for(inti = 0;i< N; i++){  
  27.   printf("%d ", dataArr[i]);  
  28.   }  
  29.   printf(" ");  
  30.   puts("Distribute data to processes");  
  31.   for(inti = 1;i <processNum; i++){  
  32.   num = (N/(processNum-1));  
  33.  if(i == processNum -1)  
  34.   num = N - num * (processNum -2);  
  35.   ///distribute data to each process  
  36.   printf("Sending to process %d... ", i);  
  37.   MPI_Send(&num, 1, MPI_INT, i, 55, MPI_COMM_WORLD);  
  38.   MPI_Send(&dataArr[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD);  
  39.   ///gather the sorted data  
  40.   printf("Receiving from process %d... ", i);  
  41.   MPI_Recv(&dataArrB[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD, &mpistat);  
  42.   ///prepare for merge, set the pointers  
  43.   pointer[i] = (N/(processNum-1)) * (i-1);  
  44.   secEnd[i] = pointer[i] + N/(processNum-1);  
  45.   if(i == processNum-1) secEnd[i] = N;  
  46.   }  
  47.   printf("Sorted Sections Array: ");  
  48.   for(inti = 0;i< N; i++){  
  49.   printf("%d ", dataArrB[i]);  
  50.   }  
  51.   puts("");  
  52.   ///merge the sorted sections  
  53.   puts("Merging...");  
  54.   for(inti = 0;i <N; i++){  
  55.   inttMin = 1;  
  56.   intmin = 10000;  
  57.   for(t = 1;t <processNum; t++){  
  58.   if(pointer[t] <secEnd[t] &&dataArrB[pointer[t]] <min){  
  59.   min = dataArrB[pointer[t]];  
  60.   tMin = t;  
  61.   }  
  62.   }  
  63.   dataArr[i] = dataArrB[pointer[tMin]];  
  64.   pointer[tMin]++;  
  65.   }  
  66.   ///output the results  
  67.   printf("Final Sorted Array: ");  
  68.   for(inti = 0;i< N; i++){  
  69.   printf("%d ", dataArr[i]);  
  70.   }  
  71.   printf(" ");  
  72.   }  
  73.   else 
  74.   {  
  75.   //receieve the section  
  76.   MPI_Recv(&num, 1, MPI_INT, 0, 55, MPI_COMM_WORLD, &mpistat);  
  77.   MPI_Recv(&dataArr[0], num, MPI_INT, 0, 55, MPI_COMM_WORLD, &mpistat);  
  78.   printf("Received Original Array: ");  
  79.   for(inti = 0;i< num; i++){  
  80.   printf("%d ", dataArr[i]);  
  81.   }  
  82.   printf(" ");  
  83.   //sort this section  
  84.   for(inti = 0;i <num -1;i++)  
  85.   for(intj = num-1;j>=i+1;j--)  
  86.   if(dataArr[j] <dataArr[j-1]){  
  87.   inttmp = dataArr[j];  
  88.   dataArr[j]= dataArr[j-1];  
  89.   dataArr[j-1] = tmp;  
  90.   }  
  91.   MPI_Send(&dataArr[0], num, MPI_INT, 0, 55, MPI_COMM_WORLD);  
  92.   ///display  
  93.   printf("My Sorted Section: ");  
  94.   for(inti = 0;i< num; i++){  
  95.   printf("%d ", dataArr[i]);  
  96.   }  
  97.  printf(" ");  
  98.   }  
  99.   MPI_Finalize();  
  100.   return0;  
  101.   } 

  自己寫出之后當然高興,不過程序經過高手檢查之后,提出了一些問題。

  最要命的是這個

  1.   for(inti = 1;i <processNum; i++){  
  2.   num = (N/(processNum-1));  
  3.   if(i == processNum -1)  
  4.   num = N - num * (processNum -2);  
  5.   ///distribute data to each process  
  6.   printf("Sending to process %d... ", i);  
  7.   MPI_Send(&num, 1, MPI_INT, i, 55, MPI_COMM_WORLD);  
  8.   MPI_Send(&dataArr[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD);  
  9.   ///gather the sorted data  
  10.   printf("Receiving from process %d... ", i);  
  11.   MPI_Recv(&dataArrB[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD, &mpistat);  
  12.   ///prepare for merge, set the pointers  
  13.   pointer[i] = (N/(processNum-1)) * (i-1);  
  14.   secEnd[i] = pointer[i] + N/(processNum-1);  
  15.   if(i == processNum-1) secEnd[i] = N;  
  16.   } 

  這段程序徹底抹殺掉了我這個并行程序的光輝形象,因為這段煞有介事的并行程序,其實是一段串行程序。

  屏幕前的高手應該看出來了吧,同一段程序的收發,都在同一段循環中。

  也就意味著,不同段之間的收發是一個接著一個的。也就意味著,其他每個進程各自的排序也是一個接著一個進行的,并不會如我初衷并行排序。

  想來,這段錯誤應該是并行程序小白們常犯的錯誤,所以我也很樂于把我做過的蠢事發出來給大家分享。前車之鑒,警鐘長鳴lol

  改正之后的這段程序是這樣的,

  1.   for(inti = 1;i <processNum; i++){  
  2.   num = (N/(processNum-1));  
  3.   if(i == processNum -1)  
  4.   num = N - num * (processNum -2);  
  5.   ///distribute data to each process  
  6.   printf("Sending to process %d... ", i);  
  7.   MPI_Send(&num, 1, MPI_INT, i, 55, MPI_COMM_WORLD);  
  8.   MPI_Send(&dataArr[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD);  
  9.   }  
  10.   for(inti = 1;i <processNum; i++){  
  11.   num = (N/(processNum-1));  
  12.   if(i == processNum -1)  
  13.   num = N - num * (processNum -2);  
  14.   ///gather the sorted data  
  15.   printf("Receiving from process %d... ", i);  
  16.   MPI_Recv(&dataArrB[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD, &mpistat);  
  17.   ///prepare for merge, set the pointers  
  18.   pointer[i] = (N/(processNum-1)) * (i-1);  
  19.   secEnd[i] = pointer[i] + N/(processNum-1);  
  20.   if(i == processNum-1) secEnd[i] = N;  
  21.   } 

  同時程序的效率還可以提升,比如說把其他進程排序的算法換成快排什么的。

  最后奉上優化后的版本

  1.   //MPI Hello World demo  
  2.   #include <mpi.h>  
  3.   #include <stdio.h>  
  4.   #include <stdlib.h> //'qsort' is in it.  
  5.   #include <time.h>  
  6.   #include <map>  
  7.   #defineN 30  
  8.   intQuickSortCompareFun(constvoid*p1, constvoid*p2)  
  9.   {  
  10.   return*((constint*)p1) - *((constint*)p2);  
  11.   }  
  12.   intmain(intargc, char** argv)  
  13.   {  
  14.   intprocessRank, processNum, t, data, num;  
  15.   intdataArr[N];  
  16.   intdataArrB[N];  
  17.   intpointer[100];  
  18.   intsecEnd[100];  
  19.   MPI_Status mpistat;  
  20.   MPI_Init(&argc, &argv);  
  21.   MPI_Comm_size(MPI_COMM_WORLD, &processNum);  
  22.   MPI_Comm_rank(MPI_COMM_WORLD, &processRank);  
  23.   printf("Yes, Sir! From process %i of %i ", processRank, processNum);  
  24.   if(processRank == 0)  
  25.   {  
  26.   srand(time(NULL));  
  27.   for(inti = 0;i <N; i++){  
  28.   dataArr[i] = rand()%1000;  
  29.   }  
  30.   printf("Original Array: ");  
  31.  for(inti = 0;i< N; i++){  
  32.   printf("%d ", dataArr[i]);  
  33.   }  
  34.   printf(" ");  
  35.   puts("Distribute data to processes");  
  36.   for(inti = 1;i <processNum; i++){  
  37.   num = (N/(processNum-1));  
  38.   if(i == processNum -1)  
  39.   num = N - num * (processNum -2);  
  40.   ///distribute data to each process  
  41.   printf("Sending to process %d... ", i);  
  42.   MPI_Send(&num, 1, MPI_INT, i, 55, MPI_COMM_WORLD);  
  43.   MPI_Send(&dataArr[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD);  
  44.   }  
  45.   for(inti = 1;i <processNum; i++){  
  46.   num = (N/(processNum-1));  
  47.  if(i == processNum -1)  
  48.   num = N - num * (processNum -2);  
  49.   ///gather the sorted data  
  50.   printf("Receiving from process %d... ", i);  
  51.   MPI_Recv(&dataArrB[(N/(processNum-1)) * (i-1)], num, MPI_INT, i, 55, MPI_COMM_WORLD, &mpistat);  
  52.   ///prepare for merge, set the pointers  
  53.   pointer[i] = (N/(processNum-1)) * (i-1);  
  54.   secEnd[i] = pointer[i] + N/(processNum-1);  
  55.   if(i == processNum-1) secEnd[i] = N;  
  56.   }  
  57.   printf("Sorted Sections Array: ");  
  58.   for(inti = 0;i< N; i++){  
  59.   printf("%d ", dataArrB[i]);  
  60.   }  
  61.   puts("");  
  62.   ///merge the sorted sections  
  63.   puts("Merging...");  
  64.   std::map<intint>data2rank;  
  65.   for(t = 1;t <processNum; t++){  
  66.   if(pointer[t] <secEnd[t]){  
  67.   data2rank.insert(std::make_pair<intint>(dataArrB[pointer[t]], t));  
  68.   pointer[t]++;  
  69.   }  
  70.   }  
  71.   for(inti = 0;i <N; i++){  
  72.   intdata = data2rank.begin()->first;  
  73.   intrank = data2rank.begin()->second;  
  74.   dataArr[i] = data;  
  75.   data2rank.erase(data2rank.begin());  
  76.   if(pointer[rank] <secEnd[rank])  
  77.   {  
  78.   data2rank.insert(std::make_pair<intint>(dataArrB[pointer[rank]], rank));  
  79.   pointer[rank]++;  
  80.   }  
  81.   }  
  82.   ///output the results  
  83.   printf("Final Sorted Array: ");  
  84.   for(inti = 0;i< N; i++){  
  85.   printf("%d ", dataArr[i]);  
  86.   }  
  87.   printf(" ");  
  88.   }  
  89.   else 
  90.   {  
  91.   //receieve the section  
  92.   MPI_Recv(&num, 1, MPI_INT, 0, 55, MPI_COMM_WORLD, &mpistat);  
  93.   MPI_Recv(&dataArr[0], num, MPI_INT, 0, 55, MPI_COMM_WORLD, &mpistat);  
  94.   printf("Received Original Array: ");  
  95.   for(inti = 0;i< num; i++){  
  96.  printf("%d ", dataArr[i]);  
  97.   }  
  98.   printf(" ");  
  99.   //sort this section  
  100.   qsort(dataArr, num, sizeof(int), QuickSortCompareFun);  
  101.   MPI_Send(&dataArr[0], num, MPI_INT, 0, 55, MPI_COMM_WORLD);  
  102.   ///display  
  103.   printf("My Sorted Section: ");  
  104.   for(inti = 0;i< num; i++){  
  105.   printf("%d ", dataArr[i]);  
  106.   }  
  107.   printf(" ");  
  108.   }  
  109.   MPI_Finalize();  
  110.  return0; 

原文鏈接:http://www.cnblogs.com/rosting/archive/2011/11/16/2251892.html

[[50028]]

【編輯推薦】

  1. 微軟發布新版Windows 7及.NET 4軟件開發工具包
  2. 詳解.NET 4.0并行計算支持歷史
  3. 詳讀.NET 4.0環境配置
  4. 詳解.NET 4.0中異常處理方面的新特性
  5. 三方面詮釋.NET 4.0的新特性
責任編輯:彭凡 來源: 博客園
相關推薦

2013-12-16 16:58:47

OpenMP并行

2013-12-16 16:49:57

OpenMP

2012-03-12 12:34:02

JavaF#

2010-06-03 19:28:02

Hadoop

2020-02-26 09:42:15

主存程序存儲器

2013-05-14 10:53:41

AIR Android真機運行

2023-03-31 08:44:55

Go開發命令

2016-03-28 10:00:09

Swift命令程序

2019-04-16 06:50:34

2021-04-21 07:53:12

JavaScript單行程序

2012-04-26 13:36:30

iPhone運行程序

2010-07-15 10:58:23

Perl命令行程序

2021-04-19 11:30:06

Java開發程序

2010-02-26 13:03:31

Python腳本語言

2022-02-04 22:05:19

JVM程序內存模型

2011-09-19 19:21:54

linux

2013-05-14 10:41:31

2010-02-24 15:41:53

Python解釋器

2013-10-31 15:47:29

CloudaApp

2015-07-15 10:32:44

Node.js命令行程序
點贊
收藏

51CTO技術棧公眾號

国产成人亚洲精品自产在线 | 国产一级黄色录像| a级在线观看| 99久久久精品免费观看国产蜜| 97av在线视频| 少妇无套高潮一二三区| 久久一级大片| 欧美日韩亚洲成人| 一区二区三区四区国产| 亚洲精品国产av| 日韩av一级片| 欧美黄色片在线观看| av网站免费在线看| www.国产精品一区| 欧美日韩日本视频| 国产美女在线一区| 在线播放日本| 久久综合久久综合久久综合| 91免费精品国偷自产在线| 97久久久久久久| 欧美va天堂在线| 一区二区亚洲精品国产| 农村末发育av片一区二区| 中韩乱幕日产无线码一区| 亚洲亚洲人成综合网络| 亚洲伊人婷婷| 国产小视频在线| av在线这里只有精品| 91精品久久久久久久久不口人| 日本午夜视频在线观看| 国产真实久久| 久久影视电视剧免费网站| 国产又粗又猛又爽又黄av| 久久精品66| 精品国产一区二区三区忘忧草| 五月天激情视频在线观看| 天堂在线中文网官网| 亚洲综合在线五月| 最新黄色av网站| 日本www在线观看视频| 久久精品欧美一区二区三区麻豆| 国产呦系列欧美呦日韩呦| 国产丰满美女做爰| 极品少妇一区二区三区精品视频| 日本国产欧美一区二区三区| 日韩精品视频播放| 在线成人欧美| 久久久天堂国产精品女人| 欧美性猛交xxxxx少妇| 91亚洲成人| 日韩有码片在线观看| 长河落日免费高清观看| 日韩免费视频| 最近2019中文免费高清视频观看www99| 亚洲最大成人网站| 久操国产精品| 在线日韩精品视频| 18精品爽国产三级网站| 91亚洲成人| 久久成年人视频| 少妇久久久久久被弄高潮| 欧美在线二区| 国语自产在线不卡| 欧美一级视频免费观看| 男人的天堂成人在线| 国产不卡av在线免费观看| 青青草视频在线观看免费| 天堂成人免费av电影一区| 国产精品九九九| 亚洲图片中文字幕| 国产一区在线观看麻豆| 成人av男人的天堂| 欧美自拍偷拍第一页| 久久亚洲精品国产精品紫薇| 色婷婷精品国产一区二区三区| 午夜免费视频在线国产| 亚洲激情图片一区| 毛片在线视频播放| 91福利精品在线观看| 欧美蜜桃一区二区三区| 91porn在线| 婷婷成人在线| 日韩在线视频线视频免费网站| 少妇视频一区二区| 欧美日韩精品| 欧美一性一乱一交一视频| 亚洲手机在线观看| 国产成人精品影院| 欧美久久电影| 国产在线激情视频| 午夜亚洲福利老司机| 久久精品影视大全| 亚洲精品不卡在线观看| 亚洲欧美精品一区二区| 欧美a级片免费看| 亚洲福利一区| 国产精品无av码在线观看| 亚洲精品喷潮一区二区三区| 久久久久久黄色| 肉大捧一出免费观看网站在线播放 | 中文字幕av久久爽| 成人高清视频在线观看| 婷婷五月色综合| 51漫画成人app入口| 欧美体内she精视频| av电影中文字幕| 日本一区二区高清不卡| 欧美精品久久久久久久久| 欧美另类高清videos的特点| 成人中文字幕电影| 亚洲永久激情精品| 超碰一区二区| 精品国产伦理网| 国产福利在线导航| 国产精品毛片| 成人免费视频观看视频| av天在线观看| 日韩欧美在线视频| 人妻激情偷乱频一区二区三区| 欧美xxav| 国产精品久久久久久亚洲影视| 黄色aaa毛片| 亚洲女同ⅹxx女同tv| 美女网站色免费| 最新亚洲精品| 欧美一级电影在线| 黄色av免费观看| 亚洲一区二区在线视频| 亚洲第一色av| 成人中文视频| 国产精品久久久久久久久免费 | 亚洲午夜性刺激影院| 日韩精品一区三区| 成人av片在线观看| 成人在线视频一区二区三区| 日韩免费大片| 国产一区二区黄| 无码人妻丰满熟妇奶水区码| 9人人澡人人爽人人精品| 国产www免费| 国产精品视频3p| 欧美激情videos| 精品人妻无码一区二区色欲产成人 | 国产老妇另类xxxxx| 一区二区三区精品国产| 国产精品一区二区免费福利视频| 亚洲品质视频自拍网| 丁香六月婷婷综合| xnxx国产精品| 日韩 欧美 高清| 精品国产a一区二区三区v免费| 欧美孕妇性xx| 搞黄视频在线观看| 欧美系列亚洲系列| 日韩三级久久久| 国产主播一区二区三区| 国产精品12p| 一区二区日韩| 97视频国产在线| 男女av在线| 欧美午夜不卡视频| 国产午夜精品理论片| 国产裸体歌舞团一区二区| 日韩精品免费一区| 1313精品午夜理伦电影| 久久久久久久久久av| 香蕉国产在线视频| 欧美亚洲综合在线| 在线日韩国产网站| 国产成人av电影在线| 欧美日韩中文字幕在线播放| 国产区精品视频在线观看豆花| 51精品国产黑色丝袜高跟鞋| 国产三级视频在线看| 欧美日韩激情一区二区三区| 粉嫩av性色av蜜臀av网站| 成人精品视频一区二区三区 | 久草成人在线视频| 99久久精品国产一区二区三区 | 国产主播一区二区| 久久黄色片视频| 三区四区不卡| 国产精品视频免费一区| 免费成人直播| 久久夜色精品国产欧美乱| 手机在线观看免费av| 欧美日韩一区三区| 久久免费视频99| 国产清纯在线一区二区www| caoporm在线视频| 亚洲视频1区| 中文字幕一区二区三区最新| 国产图片一区| 国产日韩欧美日韩| cao在线视频| 久久久精品电影| 欧美女同网站| 欧美夫妻性生活| 欧美videossex极品| 国产精品伦一区| 黄色av网址在线观看| 久久精品国产免费看久久精品| 国产欧美日韩小视频| av中文一区| 国产精品乱码一区二区三区| 韩国女主播一区二区| 国内外成人免费激情在线视频网站| 国产精品ⅴa有声小说| 精品福利视频一区二区三区| 在线观看中文字幕码| 精品久久久视频| 免费一级黄色大片| 国产精品你懂的| 国产美女精品久久| 激情综合网av| 香蕉视频网站入口| 国产亚洲激情| 欧美精品久久久久久久自慰| 99九九热只有国产精品| 秋霞毛片久久久久久久久| www.成人网| 7777精品久久久大香线蕉小说| 成人国产一区| 日韩av观看网址| 中文字幕人成乱码在线观看 | 不卡一区二区在线| 91亚洲一区二区| 久久se精品一区二区| 一本久道中文无码字幕av| 中文久久精品| www插插插无码视频网站| 欧美 日韩 国产一区二区在线视频| 亚洲国产欧洲综合997久久| 最新国产精品视频| 玛丽玛丽电影原版免费观看1977| 高潮按摩久久久久久av免费| 99re在线播放| 一区二区日韩| 成人免费视频观看视频| av一级亚洲| 高清av免费一区中文字幕| 亚洲精品观看| 成人激情直播| 99re热精品视频| 国产精品一区二区免费| 国产精品国产| 国产一区免费观看| 希岛爱理av免费一区二区| 久久久久网址| 国产成人av| 日韩电影大全在线观看| 成人黄色av| 亚洲欧洲一区二区在线观看| 国产精品99视频| 麻豆md0077饥渴少妇| 综合激情婷婷| 97中文字幕在线| 亚洲看片一区| 国产xxxxx视频| 久久se这里有精品| 日本黄色大片在线观看| 99久久国产免费看| 黄色正能量网站| 中文字幕的久久| 亚洲人与黑人屁股眼交| 一区二区三区在线观看动漫| 国产一级片视频| 欧美午夜精品久久久久久久| 日本久久综合网| 91精品在线麻豆| 日本黄色大片视频| 亚洲最新av网址| av网站大全在线| 992tv在线成人免费观看| 欧美日韩精品免费观看视完整| 国产狼人综合免费视频| 亚洲一区av| 国产一区二区精品在线| 精品国产一区探花在线观看| av不卡在线免费观看| 亚洲黄色免费| 一区二区三区韩国| 成人丝袜高跟foot| 成人在线一级片| 亚洲人成在线播放网站岛国| 日韩欧美激情视频| 欧美三级视频在线观看| av在线亚洲天堂| 亚洲欧美国产视频| 天天色天天射天天综合网| 91av在线国产| 国产高清精品二区| 欧美精品欧美精品系列c| 欧美一区影院| 91热这里只有精品| 不卡的av电影| 亚洲 欧美 国产 另类| 欧美性黄网官网| 国产激情视频在线播放| 亚洲视频日韩精品| 国产偷倩在线播放| 国产精品视频公开费视频| 国产精品自在| 爱爱爱视频网站| 国产精品美女久久久| 国产高清999| 国产日韩精品一区二区三区 | 91香蕉国产在线观看| 伊人久久大香线蕉无限次| 欧美黄网在线观看| 麻豆精品一区二区综合av| 黄色网址在线视频| 亚洲综合成人网| 国产精品色综合| 这里只有精品在线观看| 黄色污网站在线观看| 97免费高清电视剧观看| 成人午夜av| 欧美私人情侣网站| 波多野结衣亚洲一区| 欧美成人黄色网| 7777精品伊人久久久大香线蕉超级流畅| 污视频在线免费| 欧美激情一区二区三区在线视频观看 | av2014天堂网| 亚洲国产一区二区三区青草影视 | 国产精品成人国产| 欧美日韩最好看的视频| 日韩图片一区| 成人区人妻精品一区二| 亚洲午夜久久久| 亚洲AV无码乱码国产精品牛牛 | 日本午夜精品一区二区三区| 国产欧美不卡| 中文在线观看免费视频| 亚洲国产日韩精品| 欧美特黄一级视频| 国外视频精品毛片| 欧美大奶一区二区| 无码专区aaaaaa免费视频| www.久久精品| 国产精品suv一区二区三区| 亚洲成人av在线播放| 99re6在线精品视频免费播放| 国产美女精品在线观看| 激情综合久久| 88av在线播放| 色综合婷婷久久| 国产精品影院在线| 国产精品91在线| 久久综合电影| 两性午夜免费视频| 亚洲一级在线观看| 三级网站在线看| 日韩av观看网址| 日韩激情在线| 在线免费黄色小视频| 亚洲一区视频在线| 完全免费av在线播放| 黄色三级视频片| 久久精品欧美一区二区三区不卡 | 国产黄色精品网站| 国产一级特黄毛片| 日韩精品在线免费观看视频| 成人性生交大片免费网站| 日韩一本精品| 国产精品一二三四五| 精品成人久久久| 国产午夜精品视频免费不卡69堂| 久久精品黄色| 白白操在线视频| 99国内精品久久| 日本一本在线观看| 操91在线视频| 美女一区二区在线观看| 波多野结衣作品集| 亚洲女子a中天字幕| 亚洲AV第二区国产精品| 国产精品欧美日韩一区二区| 欧美1区2区| 亚洲 小说 欧美 激情 另类| 欧美日韩精品一区二区天天拍小说| 色婷婷视频在线观看| 你懂的网址一区二区三区| 理论电影国产精品| 99免费在线观看| 中文字幕亚洲情99在线| 都市激情亚洲| 欧美成年人视频在线观看| 亚洲一级不卡视频| 天堂а√在线资源在线| 国产精品美女黄网| 蜜臀久久99精品久久久久宅男| 久久亚洲av午夜福利精品一区| 亚洲人成电影网站色…| 亚洲高清999| 在线观看亚洲色图| 欧美日韩另类在线| 国产1区在线| 亚洲高清视频一区二区|