我想做的事情如下:
exec sproc1 and sproc2 at the same time
when they are both finished exec sproc3
Run Code Online (Sandbox Code Playgroud)
我可以用dts做到这一点.有没有办法在transact sql中做到这一点?或者有没有办法使用批处理脚本(例如vbs或powershell)?
我是MPI编程的新手,很难学习,直到通过定义结构创建Derived数据类型我才成功.现在我想在我的结构中包含Vector,并希望在整个Process中发送数据.对于前:
struct Structure{
//Constructor
Structure(): X(nodes),mass(nodes),ac(nodes) {
//code to calculate the mass and accelerations
}
//Destructor
Structure() {}
//Variables
double radius;
double volume;
vector<double> mass;
vector<double> area;
//and some other variables
//Methods to calculate some physical properties
Run Code Online (Sandbox Code Playgroud)
现在使用MPI我想在整个过程中发送结构中的数据.我可以创建包含的MPI_type_struct向量并发送数据吗?
我尝试通过论坛阅读,但我无法从那里的回复中得到清晰的图片.希望我能够获得一个清晰的想法或方法来发送数据
PS:我可以单独发送数据,但是如果我们认为域非常大(比如10000*10000),那么使用MPI_Send/Recieve发送数据的开销可能是
我编写了一个程序,用于使用c ++ 0x线程搜索数组中的最大值(用于学习目的).为了实现,我使用了标准线程和未来的类.但是,并行化功能不断显示与非并行化相同或更差的运行时间.
代码如下.我试图将数据存储在一维数组,多维数组中,最后得到几个数组.但是,没有选择取得好成绩.我试图从Eclipse和命令行编译和运行我的代码,仍然没有成功.我也尝试过类似的测试而不使用数组.并行化只提高了20%的速度.从我的角度来看,我运行非常简单的并行程序,没有锁和几乎没有资源共享(每个线程在他自己的数组上运行).什么是瓶颈?
我的机器配备2.2 GHz英特尔酷睿i7处理器和8 GB内存,运行Ubuntu 12.04.
const int n = 100000000;
int a[n], b[n], c[n], d[n];
int find_max_usual() {
int res = 0;
for (int i = 0; i < n; ++i) {
res = max(res, a[i]);
res = max(res, b[i]);
res = max(res, c[i]);
res = max(res, d[i]);
}
return res;
}
int find_max(int *a) {
int res = 0;
for (int i = 0; i < n; ++i)
res = max(res, a[i]); …Run Code Online (Sandbox Code Playgroud) 根据关于并行收集和在互联网上搜索的论文,并行集合应该与视图一起工作,但我不清楚它们之间的区别
coll.par.view.someChainedIterations
Run Code Online (Sandbox Code Playgroud)
和
coll.view.par.someChainedIterations
Run Code Online (Sandbox Code Playgroud)
似乎coll.view.par放弃了集合的视图:
scala> val coll = 1 to 3
coll: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)
scala> coll.view.par
res2: scala.collection.parallel.ParSeq[Int] = ParArray(1, 2, 3)
scala> coll.par.view
res3: java.lang.Object with scala.collection.parallel.ParSeqView[Int,scala.collection.parallel.immutable.ParSeq[Int],scala.collection.immutable.Seq[Int]] = $anon$1(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
但我不知道为什么.它是一个功能还是一个bug?
parallel-processing scala scala-collections parallel-collections
我认为这是R的能力极端,但是这里......
我在R中做了一些繁重的处理,其中我编写了一个函数,它可以通过一次调用完成所有腿部工作.但是,我想要连接或使用多个核心.
我看过Parallel包,它已经被弃用了.我理想地喜欢将函数称为新线程.
我理解并行计算的复杂性并不是世界上最简单的东西,但如果有人知道某些有用的软件包或我忽略的任何东西,我会很感激.
干杯
昨天我更新了我的R包,从那以后并列执行列车功能失败了.
似乎从工作者中调用的某些函数不可用.这些函数至少是flatTable和probFunction.
我在生产机器上遇到了这个问题,并且能够在干净的Windows 7 x64 VM上重现它.
我在下面添加了一个最小的工作示例 亲爱的stackoverflow用户:非常感谢!
# R 3.0.2 x64, RStudio Version 0.98.490, Windows 7 x64
data(iris)
library(caret) # 6.0-21
library(doParallel) # 1.0.6
model <- "rf"
# Fail
?probFunction
?flatTable
fitControl <- trainControl(
method = "repeatedcv"
, number = 5 ## 5-fold CV
, repeats = 1 ## repeated one times
, verboseIter =TRUE
)
#### Sequential Version ####
# Runs
train(Species ~ ., data = iris, method = model, trControl = fitControl)
#### Parallelized version ####
# …Run Code Online (Sandbox Code Playgroud) 我有一个MyReader实现Iterator并生成Buffers的地方Buffer : Send.很快就会MyReader生成很多东西Buffer,但我有一个CPU密集型的工作要对每个Buffer(.map(|buf| ...))这是我的瓶颈,然后收集结果(有序).我希望将CPU密集型工作并行化 - 希望能够使用工作窃取来执行它们,以及核心数量允许的速度.
编辑:更准确.我正在努力rdedup.MyStruct是Chunker哪些读取io::Read(通常是stdio),查找数据的部分(块)并产生它们.然后map()假设,对于每个块,计算它的sha256摘要,压缩,加密,保存并返回摘要作为结果map(...).已保存数据的摘要用于构建index数据.正在处理的块之间的顺序map(...)无关紧要,但是从每个块 返回的摘要map(...)需要以与找到块相同的顺序收集.实际save到文件步骤被卸载到另一个线程(写入线程).有问题的PR的实际代码
我希望我可以使用rayon它,但rayon期望一个已经可以并行的迭代器 - 例如.一个Vec<...>或类似的东西.我发现没有办法得到一个par_iter从MyReader-我的读者是非常单线程的性质.
有simple_parallel,但文件说,它不推荐用于一般用途.我想确保一切都能正常运作.
我可以采用spmc队列实现和自定义thread_pool,但我正在寻找经过优化和测试的现有解决方案.
还有pipeliner但不支持有序地图.
API通常具有用户必须遵循的速率限制。例如,让我们接受50个请求/秒。顺序请求需要0.5-1秒,因此太慢了,无法接近该限制。但是,使用aiohttp的并行请求超出了速率限制。
为了尽可能快地轮询API,需要对并行调用进行速率限制。
到目前为止,我发现的示例装饰了session.get,大致像这样:
session.get = rate_limited(max_calls_per_second)(session.get)
Run Code Online (Sandbox Code Playgroud)
这对于顺序调用非常有效。尝试在并行调用中实现此功能无法按预期进行。
这是一些示例代码:
async with aiohttp.ClientSession() as session:
session.get = rate_limited(max_calls_per_second)(session.get)
tasks = (asyncio.ensure_future(download_coroutine(
timeout, session, url)) for url in urls)
process_responses_function(await asyncio.gather(*tasks))
Run Code Online (Sandbox Code Playgroud)
问题在于它将限制任务的排队速度。与的执行gather将或多或少地同时发生。两全其美;-)。
是的,我在aiohttp处发现了一个类似的问题:设置每秒的最大请求数,但没有答复回答限制请求速率的实际问题。同样,来自Quentin Pradet的博客文章仅在限制队列速率上起作用。
总结一下:如何限制并行请求的每秒aiohttp请求数?
我使用tqdm将进度条添加到了2.7 python代码中,但是它大大降低了我的代码速度。如果没有进度条,则需要12秒,而使用进度条则需要57秒。
没有进度条的代码如下所示:
p = mp.Pool()
combs = various combinations
result = p.map(self.parallelize, combs)
p.close()
p.join()
Run Code Online (Sandbox Code Playgroud)
带有进度条的代码如下:
from tqdm import tqdm
p = mp.Pool()
combs = various combinations
result = list(tqdm(p.imap(self.parallelize, combs), total = 5000))
p.close()
p.join()
Run Code Online (Sandbox Code Playgroud)
有没有一种更好的方法不会降低我的代码速度呢?
我有一种算法,可以在给定段上同步计算某个积分。我想使用Control.Parallel库,或者par :: a -> b -> b将并行计算添加到此算法。我怎样才能做到这一点?
integrate :: (Double -> Double) -> Double -> Double -> Double
integrate f a b =
let
step = (b - a) / 1000
segments = [a + x * step | x <- [0..999]]
area x = step * (f x + f (x + step)) / 2
in sum $ map area segments
Run Code Online (Sandbox Code Playgroud)