⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wtime_sgi64.c

📁 openmp版的banchmark
💻 C
字号:
#include <sys/types.h>#include <fcntl.h>#include <sys/mman.h>#include <sys/syssgi.h>#include <sys/immu.h>#include <errno.h>#include <stdio.h>/* The following works on SGI Power Challenge systems */typedef unsigned long iotimer_t;unsigned int cycleval;volatile iotimer_t *iotimer_addr, base_counter;double resolution;/* address_t is an integer type big enough to hold an address */typedef unsigned long address_t;void timer_init() {    int fd;  char *virt_addr;  address_t phys_addr, page_offset, pagemask, pagebase_addr;    pagemask = getpagesize() - 1;  errno = 0;  phys_addr = syssgi(SGI_QUERY_CYCLECNTR, &cycleval);  if (errno != 0) {    perror("SGI_QUERY_CYCLECNTR");    exit(1);  }  /* rel_addr = page offset of physical address */  page_offset = phys_addr & pagemask;  pagebase_addr = phys_addr - page_offset;  fd = open("/dev/mmem", O_RDONLY);  virt_addr = mmap(0, pagemask, PROT_READ, MAP_PRIVATE, fd, pagebase_addr);  virt_addr = virt_addr + page_offset;  iotimer_addr = (iotimer_t *)virt_addr;  /* cycleval in picoseconds to this gives resolution in seconds */  resolution = 1.0e-12*cycleval;   base_counter = *iotimer_addr;}void wtime_(double *time) {  static int initialized = 0;  volatile iotimer_t counter_value;  if (!initialized) {     timer_init();    initialized = 1;  }  counter_value = *iotimer_addr - base_counter;  *time = (double)counter_value * resolution;}void wtime(double *time) {  static int initialized = 0;  volatile iotimer_t counter_value;  if (!initialized) {     timer_init();    initialized = 1;  }  counter_value = *iotimer_addr - base_counter;  *time = (double)counter_value * resolution;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -