• [常见FAQ] 判题器求助
    为什么在windows下打开压缩包按照说明运行run_simple_demo终端会一直出现无限循环
  • [问题求助] AICC 23.200 调用CC-getway签入接口提示跨域问题
    【问题简要】调用CC-getway签入接口提示跨域问题【问题类别】 CC-Gateway   【AICC解决方案版本】  23.200【期望解决时间】【尽快】【问题现象描述】CC-getway服务启用了http,postman调用是正常的。通过网页调用CC-getway签入接口http://ip:port/agentgateway/resource/onlineagent/{agentid},后台日志没有打印。通过抓包看,消息请求已经发到了服务端提示报错如下:Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource 【日志或错误截图】【可选】 
  • [交流分享] 基于 MPI 实现埃拉托斯特尼筛法及性能优化
    埃拉托斯特尼筛法(sieve of Eratosthenes),简称埃氏筛,也称素数筛,是简单且历史悠久的筛法,用来找出一定范围内所有素数。在寻找整数N以内的素数时,古希腊数学家埃拉托斯特尼采用了一种与众不同的方法:先将2-N的各数写在纸上:在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数……依此类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,画了圈的以及未划去的那些数正好就是小于N的素数。 接下来贴出详细代码: #include "mpi.h" #include "math.h" #include "stdio.h" #include "stdlib.h" #include "string.h" #include "error.h"  using namespace std;  #define BLOCK_LOW(id, p, n) ((id) * (n) / (p)) #define BLOCK_HIGH(id, p, n) (BLOCK_LOW((id) + 1, p, n) - 1) #define BLOCK_SIZE(id, p, n) (BLOCK_LOW((id) + 1) - BLOCK_LOW(id)) #define BLCOK_OWNER(index, p, n) (((p)* (index) +1 ) -1 / (n)) #define MIN(a, b) ((a)<(b)?(a):(b))  int main(int argc, char *argv[]) {     int count;              /* Local prime count */     double elapsed_time;    /* Parallel execution time */     int first;              /* Index of first multiple */     int global_count;       /* Global prime count */     int high_value;         /* Highest value on this proc */     int id;                 /* Process ID number */     int index;              /* Index of current prime */     int low_value;          /* Lowest value on this proc */     char *marked;           /* Portion of 2,...,'n' */     int n;                  /* Sieving from 2, ..., 'n' */     int p;                  /* Number of processes */     int proc0_size;         /* Size of proc 0's subarray */     int prime;              /* Current prime */     int size;               /* Elements in 'marked' */     int low_index;          /* Lowest index on this proc */     int high_index;         /* Highest index on this proc */       MPI_Init(&argc, &argv);     MPI_Comm_rank(MPI_COMM_WORLD, &id);     MPI_Comm_size(MPI_COMM_WORLD, &p);     MPI_Barrier(MPI_COMM_WORLD);      elapsed_time = -MPI_Wtime();      if (argc != 2) {         if (!id) printf("Command line: %s <m> \n", argv[0]);         MPI_Finalize();         exit(1);     }      n = atoi(argv[1]);                                                int N = n - 1;     low_index = id * (N / p) + MIN(id, N % p);                       high_index = (id + 1) * (N / p) + MIN(id + 1, N % p) - 1;        low_value = 2 + low_index;                                       high_value = 2 + high_index;                                     size = high_value - low_value + 1;       proc0_size = (n - 1) / p;      if ((2 + proc0_size) < (int) sqrt((double) n)) {         if (!id) printf("Too many processes \n");         MPI_Finalize();                                                  exit(1);     }      marked = (char *) malloc(size);                                  if (marked == NULL) {         printf("Cannot allocate enough memory \n");         MPI_Finalize();         exit(1);     }      for (int i = 0; i < size; i++) marked[i] = 0;      if (!id) index = 0;      prime = 2;     do {                                                                 if (prime * prime > low_value) {             first = prime * prime - low_value;         } else {             if (!(low_value % prime)) first = 0;             else first = prime - (low_value % prime);                    }         for (int i = first; i < size; i += prime) marked[i] = 1;         if (!id) {             while (marked[++index]);             prime = index + 2;         }          if (p > 1) {             MPI_Bcast(&prime, 1, MPI_INT, 0, MPI_COMM_WORLD);         }      } while (prime * prime <= n);      count = 0;     for (int i = 0; i < size; i++)         if (marked[i] == 0) {             count++;         }     MPI_Reduce(&count, &global_count, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);      elapsed_time += MPI_Wtime();      if (!id) {         printf("%d primes are less than or equal to %d \n", global_count, n);         printf("Total elapsed time: %10.6f\n", elapsed_time);     }     MPI_Finalize();      if (!id){         char filename[50] = "result.txt";         FILE *fp;         if ((fp = fopen(filename,"a+")) == NULL){             printf("fail to open file");             exit(0);         }         fprintf(fp, "%d %d %10.6f\n", p, n, elapsed_time);              fclose(fp);     }      return 0; }