小编Wes*_*and的帖子

用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
查看次数

MPI单面:使用MPI_Win_lock_all进行独占锁定

MPI-3标准规定,当且仅当原始和目标进程相同时MPI_Win_lock(...),锁定类型MPI_LOCK_SHARED必须是阻塞(独占)锁定.MPI_Win_lock_all是锁定类型的窗口中的所有进程的锁定MPI_LOCK_SHARED.

这是否意味着MPI_Win_lock_all还会创建从原点到原点的独占锁定?

c locking mpi

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

如何在Android设备的日历应用程序上以编程方式填充"提醒"部分?

我需要使用一些预先填充的数据打开Android设备的日历应用.我使用的逻辑似乎填充了以下字段:

  1. 活动说明
  2. 活动地点
  3. 从日期,到目前为止
  4. 全天活动/没有
  5. 重复/重复信息

我无法填充"提醒"部分,我想填写提醒部分.很高兴能得到一些帮助

这是我用来打开日历应用程序和填充日期的代码.

// Intent to open Calendar Event
Intent intent = new Intent(Intent.ACTION_INSERT)
                .setData(Events.CONTENT_URI);
intent.putExtra(Events.DESCRIPTION, desc);
intent.putExtra(Events.EVENT_LOCATION, location);
intent.putExtra(Events.TITLE, summary);
intent.putExtra(Events.EVENT_TIMEZONE, beginTime.getTimeZone().getID());
intent.putExtra(Events.STATUS, statusStr);
intent.putExtra(Events.VISIBLE, transparency);
intent.putExtra(Events.RRULE, "FREQ=YEARLY;INTERVAL=1;BYYEARDAY=1,2;UNTIL=20161210;");
intent.putExtra(Events.EXDATE, androidExDateStr.toString());

// Not sure on how to use CalendarContract.Reminders, Tried the following but does not seem to be working
intent.putExtra(CalendarContract.Reminders.DESCRIPTION, desc);
intent.putExtra(CalendarContract.Reminders.EVENT_LOCATION, location);
intent.putExtra(CalendarContract.Reminders.TITLE, summary);
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
intent.putExtra(CalendarContract.Reminders.DTSTART, beginTime.getTimeInMillis());
intent.putExtra(CalendarContract.Reminders.EVENT_TIMEZONE, beginTime.getTimeZone().getID());
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
intent.putExtra(CalendarContract.Reminders.DTEND, endTime.getTimeInMillis());
intent.putExtra(CalendarContract.Reminders.STATUS, statusStr);

intent.putExtra(CalendarContract.Reminders.RRULE,"FREQ=YEARLY;INTERVAL=1;BYYEARDAY=1,2;UNTIL=20161210;");
intent.putExtra(CalendarContract.Reminders.EXDATE, androidExDateStr.toString());

//intent.putExtra(CalendarContract.Reminders.METHOD, Reminders.METHOD_EMAIL);
//intent.putExtra(CalendarContract.Reminders.MINUTES, reminderVal) ; …
Run Code Online (Sandbox Code Playgroud)

android reminders calendar

7
推荐指数
1
解决办法
2634
查看次数

如何在Octave或Scilab中使用并行'for'循环?

我在Matlab代码中运行了两个for循环.内部循环使用Matlabpool在12个处理器中进行并行化(这是Matlab在单个机器中允许的最大值).

我没有分布式计算许可证.请帮我使用Octave或Scilab如何做到这一点.我只想将'for'循环并行化.

当我在谷歌搜索它时,有一些断开的链接.

parallel-processing matlab octave scilab

7
推荐指数
2
解决办法
9287
查看次数

同时打电话给对话

我正在使用Seam并收到"并发呼叫对话"错误.这是什么意思?

我有一个按钮需要5分钟来处理.我在2分钟内收到此错误.将并发请求超时设置为10分钟似乎不起作用.有没有办法阻止所有其他请求,直到第一个请求完成?

seam seam-conversation

6
推荐指数
1
解决办法
8058
查看次数

Hydra MPI的最佳进展是什么?

我正在研究自动与MPICH2一起出现的新进程管理器,但直到现在我还无法弄清楚这个实现有什么大的进步,有人知道一个很好的教程或者有一些经验吗?
氩维基是一种太简单:http://wiki.mcs.anl.gov/mpich2/index.php/Using_the_Hydra_Process_Manager

mpi mpich

6
推荐指数
2
解决办法
2540
查看次数

打开MPI/MPICH - 如果节点终止会发生什么?

我想知道如果OpenMPI/MPICH2集群的节点终止会发生什么?是否有一些机制可以容忍这种情况并继续执行?

谢谢你的回答海因里希

distributed-computing cluster-computing mpi openmpi mpich

5
推荐指数
1
解决办法
1161
查看次数

Rmpi : mclapply: 在 selectChildren(ac, 1) : 错误“系统调用中断”在选择

以下最小示例...

require(Rmpi)
set.seed(1)
foo <- parallel::mclapply(seq_len(10), function(l)
                          lapply(1:10, function(x) mean(rnorm(10000, mean=x))),
                          mc.cores=4)
Run Code Online (Sandbox Code Playgroud)

... 产生类型的警告消息

1: In selectChildren(ac, 1) : error 'Interrupted system call' in select
2: In selectChildren(ac, 1) : error 'Interrupted system call' in select
3: In selectChildren(ac, 1) : error 'Interrupted system call' in select
Run Code Online (Sandbox Code Playgroud)

如何避免它们?

我用Rmpiparallelmclapply一个包,这就是为什么我问。请注意,这已张贴在这里,但我还没有收到答复(还)。如果这很重要,我使用 Ubuntu 12.10、Emacs 24 和 R 2.15.2

parallel-processing r

5
推荐指数
1
解决办法
807
查看次数

MVAPICH2缓冲区别名

我使用MVAPICH2启动了MPI程序,并收到此错误:

Fatal error in PMPI_Gather:
Invalid buffer pointer, error stack:
PMPI_Gather(923): MPI_Gather() failed
PMPI_Gather(857): Buffers must not be aliased
Run Code Online (Sandbox Code Playgroud)

我认为有两种方法可以解决此问题:

  1. 重写我的MPI程序(使用不同的缓冲区)
  2. 禁用检查缓冲区别名

有人知道我该如何使用MVAPICH2吗?一些编译器选项,参数,环境变量等?

像MV2_NO_BUFFER_ALIAS_CHECK之类的东西,但是它不起作用。

hpc mpi

5
推荐指数
1
解决办法
4549
查看次数

带有 MPI_ANY_SOURCE 的 MPI Sendrecv

是否可以在一方不知道另一方的等级的情况下进行 MPI_Sendrecv 交换?如果不是,那么最好的方法是什么(我的下一个猜测就是一对发送和接收)?

例如,在 C 中,如果我想在等级 0 和其他等级之间交换整数,这种类型的事情是否可行?:

MPI_Status stat;
if(rank){
  int someval = 0;
  MPI_Sendrecv(&someval, 1, MPI_INT, 0, 1, &recvbuf, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &stat);
}else{
  int someotherval = 1;
  MPI_Sendrecv(&someotherval, 1, MPI_INT, MPI_ANY_SOURCE, someotherval, &recvbuf, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &stat);
}
Run Code Online (Sandbox Code Playgroud)

编辑:看起来这是不可能的。我将以下内容作为一种包装来添加我需要的功能。

void slave_sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
    int dest, int sendtag, void *recvbuf, int recvcount,
    MPI_Datatype recvtype, int source, int recvtag, MPI_Status *status){

    MPI_Send(sendbuf, sendcount, sendtype, dest, sendtag, MPI_COMM_WORLD);
    MPI_Recv(recvbuf, recvcount, recvtype, source, …
Run Code Online (Sandbox Code Playgroud)

c mpi

5
推荐指数
1
解决办法
5296
查看次数