亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fft.c

?? 多核(64核)系統(tǒng)的并行FFT運算程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*#line 185 "/home/hg/splash2/codes/null_macros/c.m4.null.POSIX_BARRIER"*//*#line 1 "fft.C"*//*************************************************************************//*                                                                       *//*  Copyright (c) 1994 Stanford University                               *//*                                                                       *//*  All rights reserved.                                                 *//*                                                                       *//*  Permission is given to use, copy, and modify this software for any   *//*  non-commercial purpose as long as this copyright notice is not       *//*  removed.  All other uses, including redistribution in whole or in    *//*  part, are forbidden without prior written permission.                *//*                                                                       *//*  This software is provided with absolutely no warranty and no         *//*  support.                                                             *//*                                                                       *//*************************************************************************//*************************************************************************//*                                                                       *//*  Perform 1D fast Fourier transform using six-step FFT method          *//*                                                                       *//*  1) Performs staggered, blocked transposes for cache-line reuse       *//*  2) Roots of unity rearranged and distributed for only local          *//*     accesses during application of roots of unity                     *//*  3) Small set of roots of unity elements replicated locally for       *//*     1D FFTs (less than root N elements replicated at each node)       *//*  4) Matrix data structures are padded to reduce cache mapping         *//*     conflicts                                                         *//*                                                                       *//*  Command line options:                                                *//*                                                                       *//*  -mM : M = even integer; 2**M total complex data points transformed.  *//*  -pP : P = number of processors; Must be a power of 2.                *//*  -nN : N = number of cache lines.                                     *//*  -lL : L = Log base 2 of cache line length in bytes.                  *//*  -s  : Print individual processor timing statistics.                  *//*  -t  : Perform FFT and inverse FFT.  Test output by comparing the     *//*        integral of the original data to the integral of the data      *//*        that results from performing the FFT and inverse FFT.          *//*  -o  : Print out complex data points.                                 *//*  -h  : Print out command line options.                                *//*                                                                       *//*  Note: This version works under both the FORK and SPROC models        *//*                                                                       *//*************************************************************************//***********************************************************************************************//*全局宏及全局變量聲明*//***********************************************************************************************/#include <stdio.h>#include <math.h>#include <pthread.h>#include <sys/time.h>#include <unistd.h>#include <stdlib.h>#include <malloc.h>#define PAGE_SIZE               4096        /*Cache參數(shù)需要改變,暫不復(fù)制,使用默認值*/#define NUM_CACHE_LINES        65536        /*Cache參數(shù)需要改變,暫不復(fù)制,使用默認值*/#define LOG2_LINE_SIZE             4        /*Cache參數(shù)需要改變,暫不復(fù)制,使用默認值*/#define PI                         3.1416#define DEFAULT_M                 10        /*FFT參數(shù),暫使用默認值*/#define DEFAULT_P                 64        /*處理器數(shù)量需要改變 */#define MAX_THREADS 32#define SWAP_VALS(a,b) {double tmp; tmp=a; a=b; b=tmp;} /*互換值函數(shù)*/pthread_t PThreadTable[MAX_THREADS];        /*建立一個類型為pthread內(nèi)容為線程的數(shù)組*//*定義變量為*Global的結(jié)構(gòu)體*/struct GlobalMemory {  long id;  pthread_mutex_t (idlock);                 /*互斥體型 idlock*/  pthread_barrier_t (start);                /*barrier型 start*/  long *transtimes;  long *totaltimes;  unsigned long starttime;  unsigned long finishtime;  unsigned long initdonetime;} *Global; long P = DEFAULT_P ;    /*該默認值為測試方案中的數(shù)值,即為64*/long M = DEFAULT_M;long N;                 /* N = 2^M                                */long rootN;             /* rootN = N^1/2                          */double *x;              /* x is the original time-domain data     */double *trans;          /* trans is used as scratch space         */double *umain;          /* umain is roots of unity for 1D FFTs    */double *umain2;         /* umain2 is entire roots of unity matrix */long test_result = 1;   /*  可以進行結(jié)果正確性的判斷,但可以不將判斷結(jié)果打印,賦值為1       */long doprint = 1;       /*  不需要打印結(jié)果,但需要賦值為1                                   */long dostats = 1;       /*  需要各個處理器結(jié)果輸出,賦值為1                                 */long transtime = 0;long transtime2 = 0;long avgtranstime = 0;long avgcomptime = 0;unsigned long transstart = 0;unsigned long transend = 0;long maxtotal=0;long mintotal=0;double maxfrac=0;double minfrac=0;double avgfractime=0;long orig_num_lines = NUM_CACHE_LINES;     /* number of cache lines 需要輸入數(shù)據(jù),暫使用默認值*/long num_cache_lines = NUM_CACHE_LINES;    /* number of cache lines 需要輸入數(shù)據(jù),暫使用默認值*/long log2_line_size = LOG2_LINE_SIZE;      /*                       需要輸入數(shù)據(jù),暫使用默認值*/long line_size;long rowsperproc;/*double ck1;*//*double ck3;*/                        /* checksums for testing answer */long pad_length;/***********************************************************************************************//*對整個程序需調(diào)用的函數(shù)進行聲明*//***********************************************************************************************/void SlaveStart(void);double TouchArray(double *x, double *scratch, double *u, double *upriv, long MyFirst, long MyLast);double CheckSum(double *x);void InitX(double *x);void InitU(long N, double *u);void InitU2(long N, double *u, long n1);long BitReverse(long M, long k);void FFT1D(long direction, long M, long N, double *x, double *scratch, double *upriv, double *umain2,	   long MyNum, long *l_transtime, long MyFirst, long MyLast, long pad_length, long test_result, long dostats);void TwiddleOneCol(long direction, long n1, long j, double *u, double *x, long pad_length);void Scale(long n1, long N, double *x);void Transpose(long n1, double *src, double *dest, long MyNum, long MyFirst, long MyLast, long pad_length);void CopyColumn(long n1, double *src, double *dest);void Reverse(long N, long M, double *x);void FFT1DOnce(long direction, long M, long N, double *u, double *x);/*void PrintArray(long N, double *x);   不需要打印FFT結(jié)果,注釋掉*/void printerr(char *s);long log_2(long number);void srand48(long int seedval);double drand48(void);/***********************************************************************************************//*主函數(shù)區(qū)域*//***********************************************************************************************/int main(int argc, char *argv[]){  long i;   long c;  /*extern char *optarg;*/  /*直接賦值,無需從外部輸入數(shù)據(jù)*/  long m1;  long factor;  long pages;  unsigned long start;  {	struct timeval	FullTime;	gettimeofday(&FullTime, NULL);	(start) = (unsigned long)(FullTime.tv_usec + FullTime.tv_sec * 1000000);};/***********************************************************************************************//*   判斷輸入數(shù)據(jù)是否合法,并初始化整個函數(shù),測試時無需進行判斷    while ((c = getopt(argc, argv, "p:m:n:l:stoh")) != -1) {          switch(c) {      case 'p': P = atoi(optarg);                 if (P < 1) {                  printerr("P must be >= 1\n");                  exit(-1);                }                if (log_2(P) == -1) {                  printerr("P must be a power of 2\n");                  exit(-1);                }	        break;        case 'm': M = atoi(optarg);                 m1 = M/2;                if (2*m1 != M) {                  printerr("M must be even\n");                  exit(-1);                }	        break;        case 'n': num_cache_lines = atoi(optarg);                 orig_num_lines = num_cache_lines;                if (num_cache_lines < 1) {                  printerr("Number of cache lines must be >= 1\n");                  exit(-1);                }	        break;        case 'l': log2_line_size = atoi(optarg);                 if (log2_line_size < 0) {                  printerr("Log base 2 of cache line length in bytes must be >= 0\n");                  exit(-1);                }	        break;        case 's': dostats = !dostats; 	        break;      case 't': test_result = !test_result; 	        break;      case 'o': doprint = !doprint; 	        break;      case 'h': printf("Usage: FFT <options>\n\n");                printf("options:\n");                printf("  -mM : M = even integer; 2**M total complex data points transformed.\n");                printf("  -pP : P = number of processors; Must be a power of 2.\n");                printf("  -nN : N = number of cache lines.\n");                printf("  -lL : L = Log base 2 of cache line length in bytes.\n");                printf("  -s  : Print individual processor timing statistics.\n");                printf("  -t  : Perform FFT and inverse FFT.  Test output by comparing the\n");                printf("        integral of the original data to the integral of the data that\n");                printf("        results from performing the FFT and inverse FFT.\n");                printf("  -o  : Print out complex data points.\n");                printf("  -h  : Print out command line options.\n\n");                printf("Default: FFT -m%1d -p%1d -n%1d -l%1d\n",                       DEFAULT_M,DEFAULT_P,NUM_CACHE_LINES,LOG2_LINE_SIZE);		exit(0);	        break;    }  }*//***********************************************************************************************/  {;};/*Padding algorithm */  N = 1<<M; /*M = even integer; 2**M total complex data points transformed.*/  rootN = 1<<(M/2);  rowsperproc = rootN/P;/************************************************************************************************//*  無需對rowperproc值進行判斷    if (rowsperproc == 0) {                                                                       printerr("Matrix not large enough. 2**(M/2) must be >= P\n");                                exit(-1);                                                                                     }*/	/************************************************************************************************/  line_size = 1 << log2_line_size;  if (line_size < 2*sizeof(double)) {    printf("WARNING: Each element is a complex double (%ld bytes)\n",2*sizeof(double));    printf("  => Less than one element per cache line\n");    printf("     Computing transpose blocking factor\n");    factor = (2*sizeof(double)) / line_size;    num_cache_lines = orig_num_lines / factor;  }    if (line_size <= 2*sizeof(double)) {    pad_length = 1;  } else {    pad_length = line_size / (2*sizeof(double));  }  if (rowsperproc * rootN * 2 * sizeof(double) >= PAGE_SIZE) {    pages = (2 * pad_length * sizeof(double) * rowsperproc) / PAGE_SIZE;    if (pages * PAGE_SIZE != 2 * pad_length * sizeof(double) * rowsperproc) {      pages ++;    }    pad_length = (pages * PAGE_SIZE) / (2 * sizeof(double) * rowsperproc);  } else {    pad_length = (PAGE_SIZE - (rowsperproc * rootN * 2 * sizeof(double))) /                 (2 * sizeof(double) * rowsperproc);    if (pad_length * (2 * sizeof(double) * rowsperproc) !=        (PAGE_SIZE - (rowsperproc * rootN * 2 * sizeof(double)))) {      printerr("Padding algorithm unsuccessful\n");      exit(-1);    }  }    /*使用Valloc函數(shù)為變量分配內(nèi)存,地址為memory每頁的邊界*/  Global = (struct GlobalMemory *) valloc(sizeof(struct GlobalMemory));;  x = (double *) valloc(2*(N+rootN*pad_length)*sizeof(double)+PAGE_SIZE);;  trans = (double *) valloc(2*(N+rootN*pad_length)*sizeof(double)+PAGE_SIZE);;  umain = (double *) valloc(2*rootN*sizeof(double));;    umain2 = (double *) valloc(2*(N+rootN*pad_length)*sizeof(double)+PAGE_SIZE);;  Global->transtimes = (long *) valloc(P*sizeof(long));;    Global->totaltimes = (long *) valloc(P*sizeof(long));;   /************************************************************************************************/ /*  無需進行判斷    if (Global == NULL) {    printerr("Could not malloc memory for Global\n");    exit(-1);  } else if (x == NULL) {    printerr("Could not malloc memory for x\n");    exit(-1);  } else if (trans == NULL) {    printerr("Could not malloc memory for trans\n");    exit(-1);  } else if (umain == NULL) {    printerr("Could not malloc memory for umain\n");    exit(-1);  } else if (umain2 == NULL) {    printerr("Could not malloc memory for umain2\n");    exit(-1);  }*//************************************************************************************************/  x = (double *) (((unsigned long) x) + PAGE_SIZE - ((unsigned long) x) % PAGE_SIZE);  trans = (double *) (((unsigned long) trans) + PAGE_SIZE - ((unsigned long) trans) % PAGE_SIZE);  umain2 = (double *) (((unsigned long) umain2) + PAGE_SIZE - ((unsigned long) umain2) % PAGE_SIZE);/************************************************************************************************//* 內(nèi)存分配算法的解釋及改進算法   In order to optimize data distribution, the data structures x, trans,    and umain2 have been aligned so that each begins on a page boundary.    This ensures that the amount of padding calculated by the program is    such that each processor's partition ends on a page boundary, thus    ensuring that all data from these structures that are needed by a    processor can be allocated to its local memory *//* POSSIBLE ENHANCEMENT:  Here is where one might distribute the x,   trans, and umain2 data structures across physically distributed    memories as desired.      One way to place data is as follows:   double *base;   long i;   i = ((N/P)+(rootN/P)*pad_length)*2;   base = &(x[0]);   for (j=0;j<P;j++) {    Place all addresses x such that (base <= x < base+i) on node j    base += i;   }   The trans and umain2 data structures can be placed in a similar manner.   *//************************************************************************************************//************************************************************************************************//*  打印處理器配置信息,測試時無需打印輸出  printf("\n");  printf("FFT with Blocking Transpose\n");  printf("   %ld Complex Doubles\n",N);  printf("   %ld Processors\n",P);    if (num_cache_lines != orig_num_lines) {    printf("   %ld Cache lines\n",orig_num_lines);    printf("   %ld Cache lines for blocking transpose\n",num_cache_lines);  } else {    printf("   %ld Cache lines\n",num_cache_lines);  }  printf("   %d Byte line size\n",(1 << log2_line_size));  printf("   %d Bytes per page\n",PAGE_SIZE);  printf("\n");*/ /************************************************************************************************/    {	pthread_barrier_init(&(Global->start), NULL, P);/*barrier初始化 */  };

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日本青草视频在线怡红院| 亚洲国产日韩一区二区| 欧美日韩国产影片| 91麻豆国产精品久久| 大白屁股一区二区视频| 麻豆精品视频在线观看免费| 亚洲精品欧美二区三区中文字幕| 99综合电影在线视频| 国产高清视频一区| 高清成人在线观看| 成人免费黄色大片| 国产乱妇无码大片在线观看| 蜜桃精品视频在线| 国产一区二区三区在线观看免费视频 | 欧美视频在线观看一区二区| 国产精品传媒在线| www国产亚洲精品久久麻豆| 久久精品亚洲精品国产欧美| 国产精品久久久久婷婷二区次| 久久99国产精品免费网站| 国产99精品在线观看| 国产成人av电影在线播放| 成人99免费视频| 91年精品国产| 久久人人超碰精品| www国产精品av| 一区二区三区精品久久久| 亚洲图片有声小说| 看片网站欧美日韩| 久久9热精品视频| 色哟哟日韩精品| 欧美高清视频在线高清观看mv色露露十八 | 中文字幕亚洲成人| 日韩精品乱码av一区二区| 国产在线国偷精品免费看| 91影院在线观看| 麻豆精品国产传媒mv男同| 91蝌蚪porny| 3atv一区二区三区| 一区二区三区波多野结衣在线观看| 日本亚洲免费观看| 色8久久人人97超碰香蕉987| 久久精品久久综合| 欧美一区二区三区不卡| 亚洲一区欧美一区| 91社区在线播放| 亚洲欧洲av在线| 国产日产欧美一区二区视频| 日本午夜精品一区二区三区电影 | 卡一卡二国产精品 | 久久久久国产成人精品亚洲午夜| 国产乱子伦一区二区三区国色天香| 欧美性淫爽ww久久久久无| 亚洲色图欧美在线| 久久久久久日产精品| 国产精品亚洲视频| 亚洲电影第三页| 日韩免费观看高清完整版在线观看| 天天综合色天天综合色h| 丝袜美腿成人在线| 91精品福利在线| 亚洲一区影音先锋| 日韩欧美一二区| 国产高清成人在线| 一区二区在线看| 久久精品视频在线免费观看| 国产成人精品综合在线观看| 最新热久久免费视频| 欧美日韩成人综合在线一区二区| 国产91丝袜在线播放0| 亚洲午夜在线电影| 国产亚洲一区字幕| 日韩欧美国产不卡| 欧美视频自拍偷拍| 91视频在线观看| 美女一区二区三区| 一区二区在线观看视频在线观看| 欧美一区二区三区爱爱| 在线观看欧美日本| 成人激情免费电影网址| 美女国产一区二区| 一本一道综合狠狠老| 日韩av一区二区三区四区| 久久久久成人黄色影片| 五月天一区二区三区| 日本一区二区高清| 久久只精品国产| 日韩手机在线导航| 欧美成人福利视频| 91久久精品日日躁夜夜躁欧美| 国产亚洲视频系列| 国产色一区二区| 久久精品男人的天堂| 欧美不卡一区二区| 久久一夜天堂av一区二区三区| 精品久久久久久无| 亚洲综合色丁香婷婷六月图片| 国产日韩视频一区二区三区| 中文字幕免费在线观看视频一区| 久久精品一区二区三区av| 久久久www成人免费毛片麻豆| 国产日韩欧美制服另类| 国产亚洲美州欧州综合国| 国产精品久久久久一区二区三区 | 亚洲一区二区视频在线| 亚洲国产婷婷综合在线精品| 九九视频精品免费| 成人免费毛片嘿嘿连载视频| 91福利视频久久久久| 欧美二区三区91| 亚洲欧美色综合| 亚洲综合视频在线观看| 久99久精品视频免费观看| 成人一道本在线| 欧美三区免费完整视频在线观看| 91精品国产美女浴室洗澡无遮挡| 国产色产综合产在线视频| 亚洲午夜久久久久中文字幕久| 免费高清不卡av| 97超碰欧美中文字幕| 亚洲国产电影在线观看| 欧美午夜不卡视频| 久久天天做天天爱综合色| 亚洲一区二区三区四区在线观看| 精品剧情在线观看| 亚洲成av人片| 欧美色国产精品| 亚洲欧洲美洲综合色网| 国产一区二区在线观看免费| 精品国产髙清在线看国产毛片| 亚洲日本丝袜连裤袜办公室| 国产精品亚洲一区二区三区妖精| 欧美日韩成人一区二区| 亚洲精品日日夜夜| 欧美精品一级二级| 偷拍亚洲欧洲综合| 在线国产亚洲欧美| 亚洲欧洲精品一区二区精品久久久 | 欧美一区二区三区在线看| 日韩一区精品视频| 一本一道综合狠狠老| 亚洲免费观看高清完整| 日韩av中文字幕一区二区三区| 色av成人天堂桃色av| 成人免费视频在线观看| 成人丝袜视频网| 一区二区三区四区av| 欧美日本视频在线| 蜜臀久久99精品久久久久宅男| 国产农村妇女毛片精品久久麻豆| 成人av午夜影院| 亚洲高清在线精品| 久久综合九色综合欧美亚洲| 一本大道久久精品懂色aⅴ| 亚洲国产视频一区| 在线综合视频播放| 成人国产精品免费观看| 五月天一区二区| 日韩毛片精品高清免费| 欧美日韩五月天| 99热99精品| 捆绑紧缚一区二区三区视频| 一区二区三区四区国产精品| 精品国产乱子伦一区| 欧美三级日韩三级国产三级| 91玉足脚交白嫩脚丫在线播放| 五月综合激情网| 亚洲精品国产a| 国产精品久久久久一区二区三区| 久久精品日产第一区二区三区高清版| 色婷婷激情久久| 91国模大尺度私拍在线视频| 成人免费观看av| 在线播放中文字幕一区| 在线观看日韩电影| 欧美日韩黄色一区二区| 91美女在线看| 国产成人午夜电影网| 久久精品99国产精品| 欧美aaa在线| 久久99这里只有精品| 国产成人日日夜夜| 99久久婷婷国产综合精品电影| 国产一区二区中文字幕| 国产乱人伦精品一区二区在线观看 | 国产精品正在播放| 亚洲成人一区二区在线观看| 天天色天天操综合| 卡一卡二国产精品| 国产精品一二三| 色诱亚洲精品久久久久久| 91性感美女视频| 亚洲综合在线视频| 在线视频国内一区二区| 国产精品的网站| 成人av在线播放网址| 亚洲三级免费观看| 色综合久久中文综合久久97| 中文字幕亚洲电影| av电影天堂一区二区在线观看|