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

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

?? fft.c

?? 多核(64核)系統(tǒng)的并行FFT運(yùn)算程序
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/*#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ù)制,使用默認(rèn)值*/#define NUM_CACHE_LINES        65536        /*Cache參數(shù)需要改變,暫不復(fù)制,使用默認(rèn)值*/#define LOG2_LINE_SIZE             4        /*Cache參數(shù)需要改變,暫不復(fù)制,使用默認(rèn)值*/#define PI                         3.1416#define DEFAULT_M                 10        /*FFT參數(shù),暫使用默認(rèn)值*/#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];        /*建立一個(gè)類型為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 ;    /*該默認(rèn)值為測(cè)試方案中的數(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;   /*  可以進(jìn)行結(jié)果正確性的判斷,但可以不將判斷結(jié)果打印,賦值為1       */long doprint = 1;       /*  不需要打印結(jié)果,但需要賦值為1                                   */long dostats = 1;       /*  需要各個(gè)處理器結(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ù),暫使用默認(rèn)值*/long num_cache_lines = NUM_CACHE_LINES;    /* number of cache lines 需要輸入數(shù)據(jù),暫使用默認(rèn)值*/long log2_line_size = LOG2_LINE_SIZE;      /*                       需要輸入數(shù)據(jù),暫使用默認(rèn)值*/long line_size;long rowsperproc;/*double ck1;*//*double ck3;*/                        /* checksums for testing answer */long pad_length;/***********************************************************************************************//*對(duì)整個(gè)程序需調(diào)用的函數(shù)進(jìn)行聲明*//***********************************************************************************************/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ù)是否合法,并初始化整個(gè)函數(shù),測(cè)試時(shí)無需進(jìn)行判斷    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;/************************************************************************************************//*  無需對(duì)rowperproc值進(jìn)行判斷    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));;   /************************************************************************************************/ /*  無需進(jìn)行判斷    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)存分配算法的解釋及改進(jìn)算法   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.   *//************************************************************************************************//************************************************************************************************//*  打印處理器配置信息,測(cè)試時(shí)無需打印輸出  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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利一区二区| 日韩一区二区在线看| 国产精品美女www爽爽爽| 韩国视频一区二区| 久久丝袜美腿综合| 成人av综合一区| 亚洲乱码国产乱码精品精可以看| 日本久久精品电影| 日韩二区在线观看| 久久久久久久综合日本| 成人动漫在线一区| 亚洲综合视频网| 欧美精品久久久久久久多人混战 | 久久综合色综合88| 国产精品亚洲专一区二区三区| 国产农村妇女精品| 色香蕉成人二区免费| 日韩国产高清影视| 久久婷婷综合激情| 97精品久久久久中文字幕 | 99免费精品视频| 亚洲色图在线播放| 在线综合+亚洲+欧美中文字幕| 美国三级日本三级久久99| 国产日产欧产精品推荐色| 91黄色免费版| 狠狠色丁香久久婷婷综合_中| 国产精品美女视频| 欧美肥妇bbw| 成人毛片在线观看| 调教+趴+乳夹+国产+精品| 国产亚洲短视频| 欧美日韩国产一级二级| 国产成人精品免费看| 午夜影院久久久| 亚洲国产成人一区二区三区| 欧美日韩一区二区三区在线| 国模一区二区三区白浆| 亚洲一卡二卡三卡四卡| 久久久一区二区三区捆绑**| 欧美无人高清视频在线观看| 国产九九视频一区二区三区| 亚洲成人动漫精品| 国产精品―色哟哟| 日韩精品一区二区三区老鸭窝| av午夜精品一区二区三区| 蜜臀久久99精品久久久久久9| 一区二区三区免费观看| 久久精品一级爱片| 日韩一区二区三区三四区视频在线观看| 99久久婷婷国产综合精品| 久久精品99久久久| 图片区小说区区亚洲影院| 中文字幕一区二区5566日韩| 欧美www视频| 正在播放亚洲一区| 欧美日韩精品一区二区天天拍小说 | 91福利在线导航| 成人小视频免费在线观看| 精品一区二区三区视频 | 日韩高清不卡一区| 亚洲综合网站在线观看| 亚洲视频你懂的| 国产人伦精品一区二区| 26uuu精品一区二区在线观看| 欧美丰满一区二区免费视频| 欧美日韩国产高清一区| 欧洲激情一区二区| 97se亚洲国产综合在线| www.亚洲免费av| 成人午夜视频免费看| 高清不卡一区二区在线| 国产精品系列在线观看| 国产精品一区二区久久精品爱涩| 激情综合网激情| 韩国精品一区二区| 国产麻豆精品在线观看| 国产在线日韩欧美| 国产精品1区2区3区| 国内国产精品久久| 国产精品18久久久久| 国产精品2024| k8久久久一区二区三区| 不卡在线视频中文字幕| 97久久人人超碰| 91国产视频在线观看| 欧美日韩中文字幕一区| 欧美老女人在线| 日韩一区二区高清| 26uuu成人网一区二区三区| 久久免费的精品国产v∧| 国产欧美日本一区二区三区| 欧美激情综合网| 亚洲图片激情小说| 天天av天天翘天天综合网| 免费观看在线综合色| 国产一区二区导航在线播放| 风间由美中文字幕在线看视频国产欧美| 国产**成人网毛片九色| 色综合久久中文字幕综合网 | 91精品啪在线观看国产60岁| 91精品国产色综合久久ai换脸 | 亚洲制服丝袜一区| 日本午夜一本久久久综合| 久久精品999| 成av人片一区二区| 7799精品视频| 国产日韩成人精品| 亚洲福中文字幕伊人影院| 免费黄网站欧美| 99视频在线精品| 日韩欧美中文字幕制服| 欧美激情中文字幕| 五月婷婷色综合| 国产福利一区二区三区视频| 色婷婷久久久久swag精品 | 884aa四虎影成人精品一区| 欧美精品一区二区高清在线观看| 中文字幕乱码久久午夜不卡 | 国产91精品一区二区| 欧美午夜精品理论片a级按摩| 精品国产污污免费网站入口| 国产精品久久毛片av大全日韩| 亚洲1区2区3区视频| 国产成人精品网址| 欧美一区二区三区四区视频| 国产精品狼人久久影院观看方式| 香港成人在线视频| 99视频精品免费视频| 精品日韩99亚洲| 一区二区三区精品在线| 国产成人午夜片在线观看高清观看| 日本道色综合久久| 国产女主播一区| 久草热8精品视频在线观看| 色噜噜久久综合| 国产日韩精品久久久| 蜜臀精品久久久久久蜜臀| 日本韩国欧美三级| 国产日韩欧美亚洲| 麻豆精品国产91久久久久久| 日本久久精品电影| 中文字幕在线视频一区| 国产在线精品一区二区不卡了 | 欧美一级久久久久久久大片| 一区二区三区四区国产精品| 丁香天五香天堂综合| 精品少妇一区二区三区在线播放 | 亚洲gay无套男同| 91啪亚洲精品| 国产精品久久久久久久第一福利| 精品一区二区在线免费观看| 欧美精品v国产精品v日韩精品| 亚洲精品五月天| jlzzjlzz欧美大全| 国产日韩精品久久久| 国产麻豆精品在线| 久久久亚洲精品石原莉奈| 麻豆久久一区二区| 91精品在线观看入口| 日韩vs国产vs欧美| 欧美精三区欧美精三区| 亚洲成人免费看| 欧美午夜片在线观看| 一区二区三区精密机械公司| 91色综合久久久久婷婷| 亚洲视频中文字幕| 91国产视频在线观看| 亚洲男人电影天堂| 欧美在线观看禁18| 亚洲gay无套男同| 91精品国产免费| 久久国产人妖系列| 26uuu成人网一区二区三区| 国产精品99久久久久久久vr | 亚洲成人精品在线观看| 欧美视频在线一区二区三区| 亚洲另类在线制服丝袜| 在线精品国精品国产尤物884a| 一区二区三区色| 欧美片网站yy| 久草在线在线精品观看| 国产欧美日韩亚州综合| 成人av影院在线| 一区二区三区免费看视频| 91精品视频网| 国产高清久久久久| 亚洲日穴在线视频| 欧美剧在线免费观看网站 | 国产高清在线观看免费不卡| 中文在线资源观看网站视频免费不卡| 成人精品国产一区二区4080| 亚洲精品中文字幕在线观看| 欧美一区二区三区在线视频| 国产在线一区观看| 亚洲欧美综合色| 在线不卡中文字幕播放| 国产精品影视网| 一区二区三区中文字幕电影| 日韩一区二区三区精品视频|