我遇到了设计问题。准备,因为会有很多未来,也许对于SO来说这是一个太复杂的问题。
对于熟悉R的人来说,这可能会有所帮助: 我在R中创建了一个包,用于创建变量之间的相关性(用于模拟)。我创建了一个多线程版本以允许并行。虽然R使它看似令人尴尬地平行,但我几乎在C ++中重新考虑这个陈述。
mclapply
,它可以将矩阵作为列表中的“项”处理),我能够将这些具有2维的较小数据矩阵发送到同一函数,但是不同的主题。x
和y
来解决跳过步骤的解决方案。listdata: [[1]] [1] [2] ... ... ... ... [[2]] [1] [2] ... ... ... ...
申请:
mclapply(listdata, myFunction, cores=4)
结果:
[1] [2]
... ...
... ...
... ...
... ...
我想要一个线程安全的,统计上随机的(与伪随机无关的结果)函数,产生聚合的依赖x
和y
向量。
我的一些解决方案显示线程都使用了相似的值,使用R不会发生。
我正在使用Qt,并且我尝试使用QtConcurrent来创建正确的(方便用户)线程数量,给定可变数量的拆分。
我首先要说的是我找不到能够将多个参数传递给QtConcurrent中的函数的方法。他们似乎都专注于绘图,而不允许额外的论点。
尝试如下:
QList< QVector<double> > list_of_one_split;
QList< QList< QVector<double> > list_containing_all_splits;
QVector<double> vector_of_doubles(10);
qFill(vector_of_doubles.begin(), vector_of_doubles.end(), 1); // not random
list_of_a_split.append(vector_of_doubles); // x variable split
list_of_a_split.append(vector_of_doubles); // y variable split
list_containing_all_splits.append(list_of_a_split) // first split
list_containing_all_splits.append(list_of_a_split) // second split
QtFuture<void> res = `QtConcurrent::map(list_containing_all_splits.begin(),
list_containing_all_splits.end(),
mapFunction)`
QList< QVector<double> > mapFunction(QList< QVector<double> > &list_of_a_split)
{
// random arranging one column on other
return list_of_a_split;
}
由于某种原因,此返回似乎并未影响原始列表。
我尝试的另一种方法是在mapper函数中生成y
,将其作为输入X
,并使用y
将QtConcurrent:mappedReduced()
返回到新变量中,映射在分割格式中超过x
,生成y
,返回y
拆分,并使用reduce将它们合并到QVector<double> y
中。这有严重的随机问题,因为我无法发送generator
作为额外参数。
我只是在这里展示我的努力,但你可以随心所欲地解决问题(虽然结果相同)。
// Whether or not packed in a QList< >:
QVector<double> x = {..., ..., ..., ...};
QVector<double> y = {..., ..., ..., ...}; // dependent on x