到目前为止,我的应用程序正在读取带有整数列表的txt文件.这些整数需要由主进程存储在数组中,即排名为0的处理器.这样可以正常工作.
现在,当我运行程序时,我有一个if语句检查它是否是主进程,如果是,我正在执行MPI_Scatter命令.
根据我的理解,这将使用数字细分数组并将其传递给从属进程,即所有rank> 0.但是,我不知道如何处理MPI_Scatter.从属进程如何"订阅"以获取子数组?如何告诉非主进程对子数组执行某些操作?
有人可以提供一个简单的例子来向我展示主进程如何从数组中发出元素,然后让奴隶添加总和并将其返回给主数据库,将所有总和加在一起并将其打印出来?
我的代码到目前为止:
#include <stdio.h>
#include <mpi.h>
//A pointer to the file to read in.
FILE *fr;
int main(int argc, char *argv[]) {
int rank,size,n,number_read;
char line[80];
int numbers[30];
int buffer[30];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
fr = fopen ("int_data.txt","rt"); //We open the file to be read.
if(rank ==0){
printf("my rank = %d\n",rank);
//Reads in the flat file of integers and stores it in the array 'numbers' of type int.
n=0;
while(fgets(line,80,fr) …Run Code Online (Sandbox Code Playgroud) 我试图并行化以下程序,但不知道如何减少数组.我知道不可能这样做,但还有其他选择吗?谢谢.(我添加了对m的减少,这是错误的,但希望就如何做到这一点提出建议.)
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <omp.h>
using namespace std;
int main ()
{
int A [] = {84, 30, 95, 94, 36, 73, 52, 23, 2, 13};
int S [10];
time_t start_time = time(NULL);
#pragma omp parallel for private(m) reduction(+:m)
for (int n=0 ; n<10 ; ++n ){
for (int m=0; m<=n; ++m){
S[n] += A[m];
}
}
time_t end_time = time(NULL);
cout << end_time-start_time;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我确信在标准库中有这样的东西,但似乎我错了.
我有一堆我想urlopen并行的网址.我想要内置map函数,除了工作由一堆线程并行完成.
是否有一个很好的模块可以做到这一点?
在我的Django项目中,我使用sqlite数据库来运行测试.因为它只使用内存,所以它比MySQL快得多,但它仍然不够快.在测试期间,仅使用4个处理器中的一个,并且消耗的内存不多.所以,我想在内存中有4个sqlite数据库来并行运行4个测试.
有没人试过这个?
我正在研究F#中的多核并行性.我必须承认,不可变性确实有助于编写正确的并行实现.但是,当核心数量增长时,很难实现良好的加速和良好的可扩展性.例如,我使用快速排序算法的经验是,许多尝试以纯粹功能的方式实现并行快速排序并使用List或Array作为表示失败.对这些实现进行分析表明,与顺序版本相比,缓存未命中数量显着增加.但是,如果使用阵列内部的突变实现并行快速排序,则可以获得良好的加速.因此,我认为突变可能是优化多核并行性的一种很好的实践.
我认为缓存局部性是功能语言中多核并行的一大障碍.函数式编程涉及创建许多短期对象; 破坏这些对象可能会破坏CPU缓存的一致性.我已经看到很多建议如何改进命令式语言中的缓存局部性,例如,这里和这里.但是我不清楚如何在函数式编程中完成它们,特别是对于经常出现的递归数据结构(如树等).
是否有任何技术可以改进不纯函数语言(特别是F#)中的缓存局部性?任何建议或代码示例都非常受欢迎.
parallel-processing f# asynchronous functional-programming multicore
我正试图从并行集合转换回常规地图.根据api,如果我在任何适当定义的并行集合上调用map,它应该返回一个标准的Map,但是它会在一个扁平的iterables集合上返回ParMap.
我有一个
val task: Stream[Future[Iterable[Tuple2[String, String]]]]
Run Code Online (Sandbox Code Playgroud)
从中得到:
val res: ParSeq[Iterable[Tuple2[String, String]]] = tasks.par.map(f => f.apply())
Run Code Online (Sandbox Code Playgroud)
最后:
val finalresult = res.flatten.toMap
Run Code Online (Sandbox Code Playgroud)
不幸的是,类型finalresult是ParMap[String, String].
另一方面,如果我称之为:
tasks.par.map(f => f.apply()).reduce(_++_).toMap
Run Code Online (Sandbox Code Playgroud)
那么返回类型是Map[String, String].
谁能告诉我为什么会这样?和(出于好奇),我怎么可以强制转换ParMap到Map时斯卡拉不会放过我?
我一直在使用R中并行技术的项目近期开工,并有我的程序使用Linux系统的工作mclapply从并行包.但是,我parLapply对Windows的理解遇到了障碍.
使用mclapply我可以设置核心数,迭代次数,并将其传递给我的工作区中的现有函数.
mclapply(1:8, function(z) adder(z, 100), mc.cores=4)
Run Code Online (Sandbox Code Playgroud)
我似乎无法在Windows中实现相同的功能parLapply.据我了解,我需要通过使用传递所有变量clusterExport()并将我想要应用的实际函数传递给参数.
这是正确的还是有类似于mclapply适用于Windows 的功能?
有一些类似的问题,但我的问题不是"并行运行几个程序" - 这可以通过parallel或琐事完成xargs.
我需要并行化Bash函数.
让我们想象这样的代码:
for i in "${list[@]}"
do
for j in "${other[@]}"
do
# some processing in here - 20-30 lines of almost pure bash
done
done
Run Code Online (Sandbox Code Playgroud)
某些处理需要调用外部程序.
我想运行一些(4-10)任务,每个任务运行不同$i.$ list中的元素总数> 500.
我知道我可以将整个for j ... done循环放在外部脚本中,并且只是并行调用该程序,但是可以不在两个单独的程序之间分割功能吗?
我需要从两个Web服务器请求数据.任务是独立的; 因此,我使用的是aync.parallel.现在我只在我的网页正文中写'abc','xyz'和'Done'.
由于任务是同时执行的,我可以遇到奇怪的输出吗?例如,
xab
cyz
Run Code Online (Sandbox Code Playgroud)
代码.
var async = require('async');
function onRequest(req, res) {
res.writeHead(200, {
"Content-Type" : "text/plain"
});
async.parallel([ function(callback) {
res.write('a');
res.write('b');
res.write('c\n');
callback();
}, function(callback) {
res.write('x');
res.write('y');
res.write('z\n');
callback();
} ], function done(err, results) {
if (err) {
throw err;
}
res.end("\nDone!");
});
}
var server = require('http').createServer(onRequest);
server.listen(9000);
Run Code Online (Sandbox Code Playgroud) 它们之间有什么相似之处和不同之处,看起来Java Parallel Stream有一些RXJava中可用的元素,是吗?