标签: parallel-processing

.Net中的Parallelism可以接管CPU并可能拒绝其他进程的服务吗?

我试图了解如何在.Net中实现Parallelism.以下代码以Reed Copsey Blog为例.

此代码循环遍历客户集合,并在上次联系后的14天后向他们发送电子邮件.我的问题是,如果客户表非常大并且发送电子邮件需要几秒钟,这个代码不会将CPU拒绝服务模式带到其他重要流程吗?

有没有办法并行运行以下代码行,但只使用少量内核,以便其他进程可以共享CPU?或者我是以错误的方式解决问题?

Parallel.ForEach(customers, (customer, parallelLoopState) =>
{
    // database operation
    DateTime lastContact = theStore.GetLastContact(customer); 
    TimeSpan timeSinceContact = DateTime.Now - lastContact;

    // If it's been more than two weeks, send an email, and update...
    if (timeSinceContact.Days > 14)
    {
         // Exit gracefully if we fail to email, since this 
         // entire process can be repeated later without issue.
         if (theStore.EmailCustomer(customer) == false)
             parallelLoopState.Break();
         else
             customer.LastEmailContact = DateTime.Now;
    }
});
Run Code Online (Sandbox Code Playgroud)

一般承认的答案:

思维过程是正确的!正如Cole Campbell指出的那样,通过在此特定示例中指定ParallelOption对象,可以控制和配置应该使用多少个核心.这是怎么回事.

var parallelOptions = new …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing task-parallel-library c#-4.0

4
推荐指数
1
解决办法
2397
查看次数

MPI通信复杂度

我正在研究MPI中Quicksort的并行实现的通信复杂性,并且我在书中发现了以下内容:

“一个进程从其他p-1个进程中收集p个常规样本。由于传递的值相对较少,因此消息等待时间可能是此步骤的主要决定因素。因此,收集的通信复杂度为O(log p)”(O实际上是theta,而p是处理器数)。

对广播消息做出相同的确认。

为什么这些组通信复杂度为O(log p)?是因为通信是使用某种基于树的层次结构完成的?

如果延迟不是主要因素,并且发送了大量数据怎么办?复杂度是否为O(n log(p)),其中n是要发送的数据大小除以可用带宽?

而且,MPI_Send()和MPI_Recv()的通信复杂度如何?

提前致谢!

parallel-processing complexity-theory communication mpi

4
推荐指数
1
解决办法
2698
查看次数

Matchcollection Parallel.Foreach

我正在尝试为matchcollection创建一个Parallel.Foreach循环.这是我建造的刮刀.我只需要知道在Parallel.Foreach中放什么

MatchCollection m = Regex.Matches(htmlcon, matchlink, RegexOptions.Singleline);

                Parallel.ForEach(WHAT DO I PUT HERE? =>
                {

                        Get(match.Groups[1].Value, false);
                        Match fname = Regex.Match(htmlcon, @"<span class=""given-name"(.*?)</span>", RegexOptions.Singleline);
                        Match lname = Regex.Match(htmlcon, @"span class=""family-name"">(.*?)</span>", RegexOptions.Singleline);

                        firstname = fname.Groups[1].Value;
                        lastname = lname.Groups[1].Value;

                        sw.WriteLine(firstname + "," + lastname);
                        sw.Flush();

                }):
Run Code Online (Sandbox Code Playgroud)

我试过了:

Parallel.ForEach<MatchCollection>(m,match  =>
Run Code Online (Sandbox Code Playgroud)

但没有运气!

提前致谢!:)

c# parallel-processing multithreading

4
推荐指数
1
解决办法
1420
查看次数

选择并行化方案需要考虑什么?

我正在使用c ++为我的计算动力学研究开发一些代码.我的代码解决了稀疏和密集的矩阵,生成网格,并在最微不足道的意义上做类似的操作.我需要并行化我的代码以减少计算时间并为此目的使用OpenMP.

但仔细观察一下商用代码,比如ANSYS CFX,我发现该软件中使用的并行化方案是MPICH2,它是MPI的一种实现方式.

所以你有很多并行化工具/ API:

  • OpenMP的
  • MPI
  • 英特尔线程构建模块
  • 并行线程
  • 微软PPL

我使用了其中一些工具,并使用每个工具在本地计算机上获得100%的CPU使用率.

在选择合适的并行化工具时,我不知道应该注意什么标准.什么样的应用需要哪种工具?上述任何一项可用于研究目的吗?其中哪些主要用于商业软件?

c++ parallel-processing tbb mpi openmp

4
推荐指数
1
解决办法
370
查看次数

并行Dijkstra

我正在使用OpenMP来制作Dijkstra算法的并行版本.我的代码由两部分组成.第一部分仅由一个线程(主)执行.该线程从列表中选择新节点.第二部分由其他线程执行.这些线程改变了从源到其他节点的距离.我的代码中不幸的是错误,因为执行第二部分的许多线程之一突然"消失".可能数据同步存在问题,但我不知道在哪里.如果有人能告诉我我的错误在哪里,我将不胜感激.这是代码:

map<int, int> C;
map<int, int> S;
map<int, int> D;
int init;
int nu;
int u;
int p = 3;//omp_get_num_threads();
int d;
int n = graph->getNodesNum();

#pragma omp parallel shared(n, C, d, S, init, nu, u, D, graph, p) num_threads(p)
{
    int myId = omp_get_thread_num();
    if (myId == 0)
    {
        init = 0;
        nu = 0;

        u = to;
        while (init < p - 1)
        {
        }

        while (u != 0)
        {
            S[u] = 1;
            while (nu < p - …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing dijkstra openmp

4
推荐指数
1
解决办法
5739
查看次数

在python中并行更新搁置字典

我有一个程序,它需要一个非常庞大的输入文件,并从中产生一个字典.由于这不适合内存,我决定使用shelve将其写入我的磁盘.现在我需要利用我的系统中的多个核心(其中8个),这样我就可以加快解析速度.我认为最明显的方法是将输入文件分成8个部分,同时在所有8个部分上运行代码.问题是我最后只需要一本字典.不是8个.那么如何使用shelve并行更新单个字典呢?

python parallel-processing shelve multiprocessing

4
推荐指数
2
解决办法
3461
查看次数

OpenMP和C++并行for循环:为什么我的代码在使用OpenMP时会变慢?

我有一个关于使用OpenMP(使用C++)的简单问题,我希望有人可以帮助我.我在下面添加了一个小例子来说明我的问题.

#include<iostream>
#include<vector>
#include<ctime>
#include<omp.h>

using namespace std;

int main(){
  srand(time(NULL));//Seed random number generator                                                                               

  vector<int>v;//Create vector to hold random numbers in interval [0,9]                                                                                   
  vector<int>d(10,0);//Vector to hold counts of each integer initialized to 0                                                                    

  for(int i=0;i<1e9;++i)
    v.push_back(rand()%10);//Push back random numbers [0,9]                                                                      

  clock_t c=clock();

  #pragma omp parallel for
  for(int i=0;i<v.size();++i)
    d[v[i]]+=1;//Count number stored at v[i]                                                                                     

  cout<<"Seconds: "<<(clock()-c)/CLOCKS_PER_SEC<<endl;

  for(vector<int>::iterator i=d.begin();i!=d.end();++i)
  cout<<*i<<endl;

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

上面的代码创建了一个v包含该范围内10亿个随机整数的向量[0,9].然后,代码循环v计算每个不同整数的实例数(即,在v中找到多少个,有多少两个,等等)

每次遇到特定的整数时,都会通过递增向量的适当元素来计算d.因此,d[0]计算多少个零,d[6]计算多少六个,依此类推.到目前为止有道理吗?

我的问题是当我尝试使计数循环并行时.如果没有#pragma OpenMP …

c++ parallel-processing performance openmp

4
推荐指数
1
解决办法
7912
查看次数

mongodb map在多核服务器上减少

我有一个mongodb有成千上万的记录,持有很长的向量.我正在寻找使用某种算法的输入向量与我的MDB数据集之间的相关性.

psudo代码:

function find_best_correlation(input_vector)
    max_correlation = 0
    return_vector = []
    foreach reference_vector in dataset:
        if calculateCorrelation(input_vector,reference_vector) > max_correlation then:
            return_vector = reference_vector
    return return_vector
Run Code Online (Sandbox Code Playgroud)

这是map-reduce模式的一个非常好的候选者,因为我不关心计算运行的顺序.

问题是我的数据库在一个节点上.我想同时运行多个映射(我有一个8核机器)

据我所知,MongoDb每个节点只使用一个执行线程 - 实际上我是按顺序运行我的数据集.它是否正确?

如果是这样,我可以配置每个map-reduce运行的进程数/线程数吗?如果我管理多个并行运行map-reduce的线程,然后汇总结果,我的性能会有很大提高(有人试过)吗?如果没有 - 我可以在同一节点上多次复制我的数据库,并"哄骗"mongoDb在2次重复上运行吗?

谢谢!

parallel-processing multithreading mapreduce mongodb nodes

4
推荐指数
1
解决办法
2579
查看次数

在python脚本中并行运行多个作业

我不是程序员,因此简单的答案将不胜感激.我是医学博士,参与了生物信息学项目.

假设我有一个Python脚本,abc.py我有一个文本文件,commandline.txt有113个命令行,每行1个,这个脚本可以并行运行.我希望每个这些作业都在其自己的目录中运行,该目录名为scatter.001,scatter.002,...,scatter.113(每个只有一个唯一的编号),要在我执行的目录中创建来自的脚本.

我正在运行,Windows 7与Python 2.7.

这样做的命令行是什么?(python xyz\abc.py .......)

PS:

-p 100 -m 10000000 -e 10 -k I:\Exome\Invex\analyses\PatientSet.load_maf.pkl ,UBE2Q1,RNF17,RNF10,REM1,PMM2,ZNF709,ZNF708,ZNF879,DISC1,RPL37,ZNF700,ZNF707,CAMK4,ZC3H10,ZC3H13,RNF115,ZC3H14,SPN,HMGCLL1,CEACAM5,GRIN1,DHX8,NUP98,XPC,SP4,SP5,CAMKV,SPPL3,RAB40C,RAB40A,COL7A1,GTSE1,OVCH1,FAM183B,KIAA0831,SPPL2B,ITGA8,ITGA9,MYO3B,ATP2A2,ITGA1,ITGA2,ITGA3,ITGA5,RIT1,ITGA7,TRHR,LOC100132288,DENND4A,DENND4B,TAP2,GAP43,PAMR1,HRH2,HRH3,HRH1,FBXL18,FAM169B,GHDC,SDK1,SDK2,THSD4,THSD1,ZFP161,CHST8,COL4A5,COL4A4,COL4A3,COL4A2,COL4A1,CHST1,CHST5,CHST4,ITGAX I:\Exome\Invex\analyses\First7.final_analysis_set.maf I:\Exome\Invex\temp\unzipped_power_files First7 I:\Exome\Invex\analyses\First7.individual_set.txt I:\Exome\Invex\hg19.fasta I:\Exome\Invex\hg19_encoded_by_trinucleotide.fasta I:\Exome\Invex\TCGA.hg19.June2011.gaf I:\Exome\Invex\hg19 I:\Exome\Invex\pph2_whpss_reduced I:\Exome\Invex\cosmic_num_times_each_chr_pos_mutated.tab
Run Code Online (Sandbox Code Playgroud)

这是commandline.txt中一行的示例.我有113条这样的行,在文件中..

python parallel-processing bioinformatics

4
推荐指数
1
解决办法
1万
查看次数

Parallel.For循环冻结

我试图在并行中向DataTable添加一些信息,但是如果循环是长时间它会冻结或者只需要花费很多时间,那么通常用于循环,这是我的Parallel.For循环代码:

Parallel.For(1, linii.Length, index =>
                 {
                     DataRow drRow = dtResult.NewRow();
                     alResult = CSVParser(linii[index], txtDelimiter, txtQualifier);

                     for (int i = 0; i < alResult.Count; i++)
                     {
                         drRow[i] = alResult[i];
                     }
                     dtResult.Rows.Add(drRow);
                 }
             );
Run Code Online (Sandbox Code Playgroud)

怎么了?这个Parallel.For循环比正常循环花费的时间多得多,出了什么问题?

谢谢!

c# parallel-processing datatable

4
推荐指数
1
解决办法
1153
查看次数