我想从0到50范围内生成5个不同的随机数,然后并行执行一些操作.当我写这个程序时,程序永远不会结束:
new Random().ints(0, 50)
.distinct()
.limit(5)
.parallel()
.forEach(d -> System.out.println("s: " + d));
Run Code Online (Sandbox Code Playgroud)
我试图使用peek调试它.我有无限的c:行数,50 d:行,但零l:或s:行:
new Random().ints(0, 50)
.peek(d -> System.out.println("c: " + d))
.distinct()
.peek(d -> System.out.println("d: " + d))
.limit(5)
.peek(d -> System.out.println("l: " + d))
.parallel()
.forEach(d -> System.out.println("s: " + d));
Run Code Online (Sandbox Code Playgroud)
我的实施有什么问题?
我需要并行化一个简单的密码破解程序,以便在n处理器系统上使用它.我的想法是创建n个线程,并在完成后为它们提供越来越多的工作.
了解线程何时完成的最佳方法是什么?互斥?在其他线程运行时不断检查这个互斥锁是不是很昂贵?
我需要刮掉(使用scrAPI)400多个网页ruby,我的实际代码是非常顺序的:
data = urls.map {|url| scraper.scrape url }
Run Code Online (Sandbox Code Playgroud)
实际上代码有点不同(异常处理和东西).
我怎样才能让它更快?如何并行化下载?
我熟悉Java中的并发编程,它提供了很多工具.但是,C++并发编程并不是那么容易开始使用.
在C++上同时开始编程的最佳方法是什么?是否有任何好的库包装并发编程基元并为您提供更多高级构造?
我尝试了QtConcurrent,它为你提供了很好的MapReduce功能,但它严重偏向于使用Qt的并发计算,所以如果你不想使用Qt,它不是一个好的选择.
还有其他类似的图书馆吗?人们在这里使用什么?
谢谢你的帮助提前,谢谢
这个问题与我之前询问的程序有关.回顾一下,我有一个循环结构的程序,如下所示:
for (int i1 = 0; i1 < N; i1++)
for (int i2 = 0; i2 < N; i2++)
for (int i3 = 0; i3 < N; i3++)
for (int i4 = 0; i4 < N; i4++)
histogram[bin_index(i1, i2, i3, i4)] += 1;
Run Code Online (Sandbox Code Playgroud)
bin_index 对于这个问题而言,它是一个完全确定性的函数,它不会使用或改变任何共享状态 - 换句话说,它显然是可重入的.
我首先编写了这个程序来使用单个线程.然后我将它转换为使用多个线程,这样线程就n可以运行外部循环的所有迭代i1 % nthreads == n.所以在每个线程中运行的函数看起来像
for (int i1 = n; i1 < N; i1 += nthreads)
for (int i2 = 0; i2 < N; i2++) …Run Code Online (Sandbox Code Playgroud) 在我写的应用程序中,我需要编写许多基类型,这很可能是不可变的.但我想知道可变类型在并行应用程序中如何与不可变类型进行比较.
你可以使用带有可变对象的锁,对吧?它与并行应用程序中不可变类型使用的其他技术相比如何?
你至少不使用具有不可变类型的锁,对吧?
我对算法感兴趣(见这里),我想知道是否存在(与我之前的问题相反),并行编程中主流的算法和数据结构.关于主流并行算法和ds的问题可能还为时过早,但这里的一些大师可能对其中一些人有过良好的经历/糟糕的经历.
编辑:我对algos和ds的成功实际应用比对学术论文更感兴趣.
谢谢
我有一个用C++实现的程序,我现在想要添加MPI支持.有一个用于C++的MPI绑定,带有命名空间MPI和所有东西.
在我的例子中,我有一个特定的对象,适合作为集群的并行化进程.
我的问题是:
例如:
MyClass obj;
x = x; //this will be parallelized ?
onj.calc();
y = x++; //this will be parallelized ?
z = obj.result();
Run Code Online (Sandbox Code Playgroud) 在我的C++程序中,我想有时使用OpenMP运行其可执行文件,有时不使用OpenMP(即多线程或单线程).我正在考虑以下两种情况中我的代码如何使用OpenMP:
(1)假设我的代码只有#include <omp.h>和OpenMP指令.
(2)与(1)相同,我的代码进一步调用OpenMP函数omp_get_thread_num().
为了不为不同的运行提供不同的代码,是否使用一些自定义的预编译变量来保护OpenMP出现在我的代码中的唯一方法是什么?
感谢致敬!
更简洁一点,您可以使用多个线程来加速HashMap查找吗?是否有任何实现已经执行此操作?
在我的项目中,我们需要在内存中维护一个大的对象映射.我们从不在创建地图后修改地图,因此地图严格是只读的.但是,此映射上的读取和查找性能对于应用程序的成功至关重要.安装应用程序的系统通常具有许多可用的硬件线程.然而,我们的查找仅使用单个线程从HashMap中检索值.使用多个线程(可能在池中)的分而治之的方法是否有助于提高查找速度?
我的大多数谷歌搜索都没有结果 - 返回了很多关于并发问题而不是解决方案的结果.任何建议都会受到赞赏,但如果您知道开箱即用的解决方案,那就太棒了.
另外值得注意的是,所有键和值都是不可变的.散列码值是预先计算的,并在实例化时存储在对象本身中.
至于实现的细节,Map中有大约35,000个项目.键和值都是对象.键是自定义查找键,值是字符串.目前,我们每秒可处理大约5,000次查找(这包括一些其他逻辑的开销,但主要的瓶颈是地图实现本身).但是,为了满足我们未来的性能需求,我希望每秒可以获得大约10,000次查找.按照大多数正常标准,我们目前的实施速度很快 - 只是我们需要它更快.
在我们35,000个值的Map中,我们平均有一个哈希码冲突,所以我猜测哈希码的分布相当合理.