小编Meh*_*dad的帖子

用mpi定义全局变量

我在下面写了一个示例代码:

#include <stdio.h> 
#include <mpi.h> 

double x;

int main (int argc, char **argv) { 
   MPI_Init(&argc, &argv); 
   MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
   MPI_Comm_size(MPI_COMM_WORLD, &size); 

   if (rank==0) x=10.1;

   MPI_Barrier(MPI_COMM_WORLD);
   printf("%f\n", x);

   MPI_Finalize(); 
   return 0; 
}
Run Code Online (Sandbox Code Playgroud)

正如人们可能注意到的,这个程序实际上定义了一个名为x的全局变量,而第0个线程试图为它分配一些值.当我在具有4个内核的SMP(对称多处理)机器上运行该程序时,我得到以下结果:

10.1
0
0
0
Run Code Online (Sandbox Code Playgroud)

更有趣的是,当我更改我的代码以便每个线程打印变量x的地址,即&x时,它们都打印相同的东西.

我的问题是,如果SMP系统上的一些线程共享一个变量地址的相同值,而它们不共享相同的值,那么该怎么可能?

我的第二个问题是我应该如何更改上面的代码,以便得到以下结果?

10.1
10.1
10.1
10.1
Run Code Online (Sandbox Code Playgroud)

c c++ mpi

8
推荐指数
1
解决办法
3162
查看次数

为什么要在Scala或Java中使用盒装类型而不是Java或C中的原始类型呢?

我刚刚对Scala,Java和C进行了比较.下面是我运行的代码和我得到的结果:

Java(原始数据类型):

    class test {
        public static void main(String args[]) {
            long t1=System.nanoTime();
            for (int i=0; i<1000000000; i++) {

            }
            long t2 = System.nanoTime();

            System.out.println((t2-t1));
        }
    }
Run Code Online (Sandbox Code Playgroud)

输出:1181601584
,这是1.2秒



C:

    #include <stdio.h>
    #include <time.h>

    int main() {
      clock_t t1=clock();
      for (int i=0; i<1000000000; i++) {

      }
      clock_t t2= clock();

      printf("%u",(t2-t1)/(double)CLOCKS_PER_SEC);

      return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出:2233382994
,这是2.2秒



斯卡拉:

    object test {
      def main(args: Array[String]) {
        val nos = 1 to 1000000000
        val t1 = System.nanoTime
        for (i<-nos) {

        }
        val t2 = …
Run Code Online (Sandbox Code Playgroud)

c java performance scala

-3
推荐指数
1
解决办法
504
查看次数

标签 统计

c ×2

c++ ×1

java ×1

mpi ×1

performance ×1

scala ×1