标签: parallel-processing

是否有在后台线程上初始化对象的通用模式?

我有一个需要很长时间才能初始化的对象。因此我能够在应用程序启动时开始初始化。任何对类上方法的后续调用都需要有一个延迟机制来等待类完成初始化。

我有几个潜在的解决方案,但我对它们中的任何一个都不完全满意。第一个在 while 循环中使用 Task.Delay,第二个使用 SemaphoreSlim 但涉及一些不必要的阻塞。我觉得这一定是一个相当普遍的要求,有人可以就如何最好地管理这个问题提供一些建议吗?

哦顺便说一句,这是一个 Metro 应用程序,所以我们的 API 有限

这是伪代码:

public class ExposeSomeInterestingItems
{
    private InitialisationState _initialised;
    private readonly SemaphoreSlim _waiter = 
        new SemaphoreSlim(0);

    public async Task StartInitialize()
    {
        if (_initialised == InitialisationState.Initialised)
        {
            throw new InvalidOperationException(
                "Attempted to initialise ActiveTrackDown" +
                "loads when it is already initialized");
        }

        _initialised = 
            InitialisationState.StartedInitialisation;

        new TaskFactory().StartNew(async () =>
        {
            // This takes some time to load
            this._interestingItems = 
                InterestingItemsLoader.LoadItems();
            _waiter.Release();
            _initialised = InitialisationState.Initialised;
        });
    }

    public InterestingItem GetItem(string id) …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing multithreading background

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

用于将 OpenMP 与 C++ 结合使用的算法库

我在 GNU/Linux 桌面上使用 C++ 编程语言和 GCC。我正在尝试用 C++ 实现一些 PRAM 并行算法。据我了解,在多核 CPU 上使用 OpenMP 或多或少有助于模拟 CREW PRAM 算法。

许多复杂的 PRAM 算法涉及诸如并行前缀求和、排序、对全局地址空间中的向量执行元素操作等操作。

不知何故,经过大约 15 分钟的谷歌搜索后,似乎没有提供此功能的库,即一些开箱即用的基本并行算法或数据结构,如标准模板库。

任何人都可以列出任何这样的库吗?

编辑:本质上,我需要的是与 CUDA 世界中使用的 Thrust 库类似的 OpenMP。http://thrust.github.com/

c++ parallel-processing multithreading openmp thrust

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

是否可以在写保护的文件系统上运行 Postgres?还是共享文件系统?

我正在尝试建立一个分布式处理环境,所有数据都位于一个共享网络驱动器中。我不会向它写入任何内容,只是读取它,因此我们也在考虑对网络驱动器进行写保护。

我记得当我使用 MSSQL 时,我可以将数据库备份到 DVD 并将其作为只读数据库直接加载。

如果我可以在 Postgres 中做这样的事情,我应该能够给它一个像只读 DVD 一样的抽象,一切都会好起来的。

在 Postgres 中是否有可能发生这样的事情,如果没有,还有其他选择吗?(MySQL?sqlite 甚至?)

或者,如果这是不可能的,是否有某种方法可以指定共享文件系统?(让它知道其他进程也在读取它?)

由于各种原因,使用并行 dbms 是不可能的,我需要两个并行运行的 DB 进程......

任何帮助是极大的赞赏。谢谢!!

postgresql parallel-processing distributed-computing

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

在Python中同时启动两个方法

我试图在Python中同时运行两个方法.其中一个播放声音,另一个录制它.这两种方法都运行良好但我无法弄清楚如何在尝试多处理和线程的同时启动它们.虽然我现在几乎可以肯定它无法通过线程解决.

def listen_to_audio()

def play_audio()
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?(他们不必同时完成,但他们都应该在一秒钟内开始.)

这是代码,抱歉没有在开头发布它:

import pyaudio
import wave
import sys
import time
from math import *
from getopt import *
import threading

def make_sin(f0=1000.,ampl=30000,rate=22050,length=5.):
  a = 2. * pi * f0/rate              
  n = int(rate * length)
  wav=''
  for i in range(0, n):
    f = int(ampl*sin(a*i))
    wav += chr(f & 0xFF) + chr((f & 0xFF00) >> 8)
  return wav



def play_audio(forHowLong):
    data = make_sin(f0=1000.,ampl=30000,rate=22050,length=5.)

    p = pyaudio.PyAudio() #sets up portaudio system
    stream = p.open(format=p.get_format_from_width(2),
                channels=1,
                rate=22050,
                output=True)

    start …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing

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

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

Matlab/C++:使用 C++ Mex 持久对象并行计算时出现分段错误(无法转换句柄)

本帖参考:

我成功地实现了一个 Matlab/C++ 接口,基于 [1] 上提出的方法。无论如何,我在尝试将系统与 Matlab 并行计算一起使用时遇到了麻烦。

在 MEX 接口中尝试在 matlab 句柄和 C++ 指针之间进行转换时,发生在我身上的是分段错误。

为了更清楚,我将回顾一下 [1] 中提出的结构。系统中有三个文件,采用这种通信方案:

[myInterface.m] <--> [myMexInterface.cpp] <--> [myClass.cpp]

在哪里

  • myInterface.m 是一个 matlab 类
  • myMexInterface.cpp 是一个 C++ (mex) 函数
  • myClass.cpp 是一个 C++ (mex) 类

该系统的使用分为两个阶段:

  • 构造:创建一个 matlab 对象 myInterface。这会导致调用 myMexInterface.mexa64,从而调用 C++ myClass 对象的创建。myClass 的 C++ 指针通过 myMexInterface.mexa64 发送回 myInterface,myInterface 将其存储以供进一步使用。特别是,myMexInterface.mexa64 将myClass 的 C++ 指针 …

c++ parallel-processing matlab mex parfor

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

lambda 表达式错误:表达式必须是可修改的左值

好的,代码是:

vector<vector<double>> imageFiltered;

// some processing codes here

parallel_for( blocked_range<unsigned>(0, imageFiltered.size()),
    [=](const blocked_range<unsigned>& r) {
        for( unsigned i = r.begin(); i != r.end(); ++i ){
            for( unsigned j = 0; j != imageFiltered[i].size(); ++j ) {
                imageFiltered[i][j] = 0; // error here?expression must be a modifiable lvalue
            }
        }
});
Run Code Online (Sandbox Code Playgroud)

我写了另一个类似的代码块,它工作得很好。所以,这里有一点帮助。PS:parallel_for 来自 Interl TBB。

parallel-processing lambda tbb

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

OpenMP:并行快速排序

我尝试使用 OpenMP 在分区部分和 QuickSort 部分并行化 QuickSort。我的C代码如下:

#include "stdlib.h"
#include "stdio.h"
#include "omp.h"

// parallel partition
int ParPartition(int *a, int p, int r) {
    int b[r-p];
    int key = *(a+r); // use the last element in the array as the pivot
    int lt[r-p]; // mark 1 at the position where its element is smaller than the key, else 0
    int gt[r-p]; // mark 1 at the position where its element is bigger than the key, else 0
    int cnt_lt = 0; …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing multithreading quicksort openmp

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

在 R 中使用多核计算 SVD

我想svd()在 R 中的大型稀疏矩阵 (17k x 2m) 上运行,并且我可以访问集群。有没有一种使用多核在 R 中计算 SVD 的直接方法?

RScaLAPACK 包(http://www.inside-r.org/packages/cran/RScaLAPACK)似乎使这成为可能,但它似乎不再受到积极支持(http://cran.r-project.org /web/packages/RScaLAPACK/),我认为这是有原因的。

parallel-processing multicore r svd cran

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

如何并行执行对 Pandas 数据帧的多个 SQL 查询

大家好 Python Pandas 大师。我正在寻找一种与 Python 并行运行一些 SQL 的方法,返回几个 Pandas 数据帧。我有类似于下面的代码,它针对 MS SQL 服务器数据库连续运行 4 个 SQL 查询。其中两个查询的执行时间比 IO(网络)时间长得多以获得结果,所以我认为并行化会使代码运行速度提高约 2 倍。有没有一种简单的方法可以并行执行查询?

理想情况下,我希望能够读取项目子目录中的所有 *.sql 文件,然后触发查询以并行运行并以易于使用的格式(列表?)返回四个数据帧以进一步操作(索引、连接、聚合)。

提前致谢,兰德尔

# imports
import ceODBC
import numpy as np
import pandas as pd
import pandas.io.sql as psql
from ConfigParser import ConfigParser  
import os
import glob

# db connection string
cnxn = 'DRIVER={SQL Server Native Client 11.0}; SERVER=<servername>; DATABASE=<dname>; Trusted_Connection=Yes'

# directories (also should be moved to config)
dataDir = os.getcwd() + '\\data\\'
sqlDir = os.getcwd() + '\\sql\\' …
Run Code Online (Sandbox Code Playgroud)

python sql parallel-processing pandas

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