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

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

?? memstuff.c

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? C
字號:
#if defined(USE_MLP)#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/mman.h>#include <errno.h>#define CACHE_LINE_SIZE 128#define SECTION_ROUND (1024*1024)#define BARRIER_AREA_ROUND (16*1024)#define round_up(n, round)  (((n + (round - 1)) / round) * round)#if defined ( PGI )  || defined ( LAHEY )#define ROUND (1024*1024)volatile long long *__prior_counter_ptr;volatile long long *__current_counter_ptr; #endif/**********************************************************************//**********************************************************************//* Barrier                                                            *//**********************************************************************/#if defined ( PGI ) || defined ( LAHEY )char *_lock_filename = "./_lock_file";void_lock(void)    /*This part will be implemented by semaphore later, BW */{  unsigned long long num_attempts = 0;  int fd;  while ((fd = creat(_lock_filename, 0)) == -1) {    if (errno != EACCES) {      perror("Failed to creat _lock_file");      printf("Failed to creat _lock_file");      exit(1);    }/*    if ((++num_attempts % 100000) == 0) {       */    if ((++num_attempts % 100000) == 0) {      fprintf(stderr, "%lld lock attemps have failed on %s\n"                "(Perhaps an old copy of the file was not deleted?)\n",                num_attempts, _lock_filename);    }  }  close(fd);}void_unlock(void) /*This part will be implemented by semaphore later, BW */{  if (unlink(_lock_filename) == -1) {    perror("unlink of _lock_file");    printf("unlink of _lock_file");    exit(1);  }}                         voidmlp_barrier__(int *n_ptr)    {  long long target_value = *n_ptr + *__prior_counter_ptr;  long long new_value;/*  printf("getpid = %d \n", getpid());   *//*  printf("target_value = %d for %d \n", target_value, getpid()); */  _lock();  {    new_value = *__current_counter_ptr + 1;    *__current_counter_ptr = new_value;  }  _unlock();  if (new_value == target_value) {    *__prior_counter_ptr = target_value;  }  while (*__prior_counter_ptr != target_value) {    /* spin */ ;  }}                                 #else/* Note: FAN_IN is arbitrary - it does not need to be a power of two.** By using a power of two, the compiler can optimize the arithmetic.** FAN_IN of 2 would be a binary tree, FAN_IN of 4 a quad tree, etc.*/#define FAN_IN 4#define MAX_PROCESSES 1024typedef struct {    volatile unsigned long long current_value;    unsigned long long pad1[CACHE_LINE_SIZE/sizeof(unsigned long long) - 1];    volatile unsigned long long previous_value;    unsigned long long pad2[CACHE_LINE_SIZE/sizeof(unsigned long long) - 1];} __mlp_join_line_type;__mlp_join_line_type *__ptr_mlp_join_area;/*** Barrier wait for n processes with id's  0 .. n-1**** Each block of FAN_IN processes increments a different counter.  When** all the procs in that block have reported in, the group counter one** level up is incremented.  When all the groups on that level have reported** in, the next higher level counter is incremented.  When everyone has** reported in, notification is propagated back down and we are done.**** Note: we must acquire the target_value *before* we __add_and_fetch** the counter to avoid a race condition.**** By using 64bit monotonic counters, we do not need to reset the counts.** This saves memory transactions.  The code as written does NOT assume** FAN_IN is a power of two; we rely on the compiler to simplify the** arithmetic where possible and appropriate.** (we use unsigned values to make this more clear to the compiler).*//* Recurse up the barrier tree *//* Note that the id's are zero-based */void__mlp_sync_step(    __mlp_join_line_type *base,    unsigned int my_id,    unsigned int last_id){    unsigned int last_group = last_id / FAN_IN;    unsigned int my_group = my_id / FAN_IN;     unsigned int my_group_size =        (my_group < last_group) ?  FAN_IN : (last_id % FAN_IN) + 1;    __mlp_join_line_type *ptr_my_group = base + my_group;    unsigned long long target_value =        ptr_my_group->previous_value + my_group_size;    unsigned long long value =        __add_and_fetch(&(ptr_my_group->current_value), 1ULL);    if (value < target_value) {        /* I am not the last process of my group that needs to get here */        /* Spin until previous_value is set by the last member of the group */        while (ptr_my_group->previous_value < target_value) /* spin */ ;    }    else {        /* I was the last process in my group to reach this sync point. */        /* If we are not already at the top level, then sync one level up */        if (last_group != 0) {          __mlp_sync_step(base + last_group + 1, my_group, last_group);        }        /* Propagate notification downwards to other processes in my group */        ptr_my_group->previous_value = target_value;    }}voidmlp_barrier_(unsigned int *ptr_my_id, unsigned int *ptr_num_procs){    __mlp_sync_step(__ptr_mlp_join_area, *ptr_my_id, *ptr_num_procs - 1);}#endif/**********************************************************************//**********************************************************************//* End Barrier                                                        *//**********************************************************************//**********************************************************************//**********************************************************************//* Allocate and Initialize the shared memory                          *//**********************************************************************/voidmlp_getmem_(long long *n_ptr, long long size[], long long pointer[]){  int fd, i, n = *n_ptr;  unsigned long long total_size = 0;  char buf[100];  char *mmap_addr;#if defined ( IRIX64 )  unsigned long barrier_area_size = 0;  unsigned long num_groups_this_level = 0;#endif  for (i=0; i<n; i++) {    total_size += size[i];  }          /* Add space for the barrier counters */#if defined ( PGI ) || defined ( LAHEY )  total_size += 2*sizeof(long long);  total_size = ((total_size + (ROUND - 1))/ROUND) * ROUND;     #else  num_groups_this_level = round_up(MAX_PROCESSES, FAN_IN) / FAN_IN;  for (;;) {    barrier_area_size += sizeof(__mlp_join_line_type)*num_groups_this_level;    if (num_groups_this_level == 1) break;    num_groups_this_level = round_up(num_groups_this_level, FAN_IN) / FAN_IN;  }  barrier_area_size = round_up(barrier_area_size, BARRIER_AREA_ROUND);  total_size += barrier_area_size;          /* round up the whole thing */  total_size = round_up(total_size, SECTION_ROUND);#endif  /* Generate and open a temp file */  sprintf(buf, "./tempfile.%d", getpid());  unlink(buf);  fd = open(buf, O_RDWR|O_CREAT, 0600);  if (fd < 0) {    perror("open(2) of the shm file");    exit(1);  }  /* Unlink the temp file so it will be automatically removed */  unlink(buf);  /* Grow the file */  if (ftruncate(fd, (off_t)total_size) < 0) {    perror("ftruncate(2) of the shm file");    exit(1);   }    /* Map the file "shared" */  mmap_addr = (char *)mmap(0, (size_t) total_size,                        PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);  if (mmap_addr == (char *)MAP_FAILED) {    perror("mmap(2) of the shm file");    exit(1);  }#if defined ( IRIX64 )  /* Initialize the barrier area */  __ptr_mlp_join_area = (__mlp_join_line_type *) mmap_addr;  for (i = barrier_area_size/sizeof(__mlp_join_line_type); i >=0; i--) {    __ptr_mlp_join_area[i].current_value = 0;    __ptr_mlp_join_area[i].previous_value = 0;  }  mmap_addr += barrier_area_size;#endif  /* Parcel out the space */  for (i=0; i<n; i++) {    pointer[i] = (long long) mmap_addr;    mmap_addr += size[i];  }#if defined ( PGI ) || defined ( LAHEY )  __prior_counter_ptr = (volatile long long *) mmap_addr;  *__prior_counter_ptr = 0;  mmap_addr += sizeof(long long);  __current_counter_ptr = (volatile long long *) mmap_addr;  *__current_counter_ptr = 0;  mmap_addr += sizeof(long long);           #endif}  #endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜av区久久| 成人午夜视频在线观看| 亚洲女爱视频在线| 国产亚洲欧洲997久久综合| 欧美日韩一区二区三区高清| 国产福利不卡视频| 激情综合色综合久久综合| 亚洲成人精品一区| 亚洲国产日韩a在线播放性色| 国产精品色哟哟| 亚洲精品在线观看网站| 精品国产凹凸成av人导航| 91精品国产综合久久婷婷香蕉| 91成人免费网站| 在线观看视频91| 在线免费av一区| 日本乱人伦一区| 欧美日韩亚洲高清一区二区| 欧美中文一区二区三区| 色一情一伦一子一伦一区| 色婷婷狠狠综合| 色婷婷久久久久swag精品| 91香蕉视频mp4| 91老师国产黑色丝袜在线| 91无套直看片红桃| 欧美日韩一级二级三级| 欧美日韩国产高清一区| 91精选在线观看| 在线观看视频91| 欧美日韩国产一区| 欧美成人官网二区| 欧美视频一区在线| 日韩欧美一区在线观看| 精品av综合导航| 久久一夜天堂av一区二区三区 | 91精品国产综合久久久久久漫画| 欧美日韩精品一区视频| 日韩一区二区免费在线电影 | 国产欧美1区2区3区| 欧美激情一区二区在线| 亚洲色图制服诱惑| 日本欧美一区二区三区| 国产精品一区二区无线| 成人免费视频一区| 欧美精品色一区二区三区| 欧美一区二区三区精品| 2023国产精品自拍| 亚洲久草在线视频| 美女视频一区二区| 成人综合在线观看| 欧美日韩精品是欧美日韩精品| 日韩欧美aaaaaa| 日本一区二区三区国色天香 | 日本va欧美va欧美va精品| 国产一区亚洲一区| 色婷婷av一区| 精品国产成人在线影院| 亚洲欧美一区二区久久| 日本午夜一区二区| 97精品久久久午夜一区二区三区| 欧美日韩亚洲不卡| 国产清纯在线一区二区www| 亚洲免费观看在线观看| 久久99精品国产.久久久久| 成人精品电影在线观看| 欧美喷潮久久久xxxxx| 国产亚洲女人久久久久毛片| 一区二区三区四区视频精品免费 | 色国产精品一区在线观看| xfplay精品久久| 一区二区三区在线观看国产| 久久99精品国产麻豆不卡| 欧美在线免费视屏| 久久精品人人做人人爽人人| 亚洲www啪成人一区二区麻豆| www.欧美.com| 日韩三级.com| 一区二区三区成人| 国产福利不卡视频| 日韩一级在线观看| 亚洲免费观看高清完整| 国产老女人精品毛片久久| 91精品国产麻豆国产自产在线 | 亚洲成人动漫在线免费观看| 国产精品一级黄| 在线成人av网站| 一区二区三区免费看视频| 国产91精品免费| 日韩欧美国产一二三区| 亚洲gay无套男同| 成人91在线观看| 久久亚洲精华国产精华液| 亚洲欧美电影院| 国产精品伊人色| 日韩免费在线观看| 亚洲一级二级三级在线免费观看| av中文一区二区三区| 久久久99免费| 久久99精品久久只有精品| 欧美一区二区在线看| 亚洲综合精品久久| 风流少妇一区二区| 国产人伦精品一区二区| 韩日精品视频一区| 欧美人与性动xxxx| 精品噜噜噜噜久久久久久久久试看| 五月婷婷激情综合| 色欧美片视频在线观看| 国产精品美女一区二区三区| 成人动漫中文字幕| 日本一区二区三区四区在线视频| 国内精品免费在线观看| 欧美欧美欧美欧美首页| 丝袜国产日韩另类美女| 欧美日韩一区二区在线观看| 国产精品久久久久毛片软件| 99久久综合狠狠综合久久| 国产精品日韩成人| 粉嫩蜜臀av国产精品网站| 1024精品合集| 91亚洲精品乱码久久久久久蜜桃| 一区在线播放视频| 在线亚洲精品福利网址导航| 日韩毛片视频在线看| 99视频有精品| 一区二区三区不卡视频 | 亚洲视频一二三区| 91在线观看视频| 国产精品久久久久aaaa| av不卡免费在线观看| 国产精品久久久久三级| 91天堂素人约啪| 亚洲一区免费视频| 91精品免费观看| 天天综合网 天天综合色| 欧美日韩精品一区二区三区四区| 天堂av在线一区| 日韩精品一区二区三区中文精品| 免费在线一区观看| 久久嫩草精品久久久精品一| 成人精品高清在线| 一区二区三区欧美在线观看| 欧美蜜桃一区二区三区| 久热成人在线视频| 久久品道一品道久久精品| 日韩va欧美va亚洲va久久| 精品国产一区二区三区av性色 | 国产91对白在线观看九色| 1000部国产精品成人观看| 欧美视频在线不卡| 国产一区999| 亚洲视频一区二区在线观看| 欧美日韩aaaaaa| 国产乱对白刺激视频不卡| 中文字幕日韩一区二区| 欧美三级电影网站| 亚洲一区二区在线视频| 在线不卡中文字幕播放| 成人免费观看视频| 亚洲一区二区三区爽爽爽爽爽| 欧美一区二区三区视频在线观看| 韩国av一区二区三区| 亚洲另类春色校园小说| 日韩免费在线观看| 奇米精品一区二区三区四区| 亚洲欧洲无码一区二区三区| 欧美区在线观看| 国产一区二区毛片| 国产亚洲自拍一区| 欧美影院午夜播放| 韩国av一区二区三区| 一区二区三区蜜桃| 久久综合久久综合久久| 欧美日韩综合不卡| 国产二区国产一区在线观看| 亚洲欧美激情插| 欧美不卡123| 在线观看国产一区二区| 成人综合在线网站| 久久精品国产澳门| 亚洲影院在线观看| 国产人久久人人人人爽| 欧美r级电影在线观看| 在线观看不卡视频| 成人高清视频在线| 久久国产尿小便嘘嘘尿| 亚洲老司机在线| 欧美激情艳妇裸体舞| 欧美v日韩v国产v| 欧美性videosxxxxx| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 欧美v亚洲v综合ⅴ国产v| 在线免费观看成人短视频| 国产精品一二三四| 日日摸夜夜添夜夜添国产精品 | 激情欧美一区二区| 亚洲午夜私人影院| 日韩美女视频一区二区| 亚洲欧洲美洲综合色网| 久久影院午夜论|