我正在使用Ant的<parallel>任务来执行多个使用<exec>任务的同时目标,但由于它是交错的,所以很难读取输出.有没有办法更改[exec]每行输出之前出现的标签以使用命令或目标名称?
例如,在运行pdepend和phpcpd我想改变[exec],以[pdepend]和[phpcpd]:
pdepend:
[exec] PHP_Depend 0.10.5 by Manuel Pichler
[exec]
phpcpd:
[exec] Parsing source files:
[exec] phpcpd 1.3.2 by Sebastian Bergmann.
[exec]
[exec] ............................................................ 60
[exec] Found 26 exact clones with 640 duplicated lines in 28 files:
[exec]
[exec] - application/modules/controllers/IndexController.php:16-31
[exec] ............................................................ 120
[exec] application/modules/controllers/ErrorController.php:15-30
[exec]
[exec] - application/modules/controllers/PhotosController.php:24-33
[exec] ............................................................ 180
[exec] ............................................................ 240
Run Code Online (Sandbox Code Playgroud)
变
pdepend:
[pdepend] PHP_Depend 0.10.5 by Manuel Pichler …Run Code Online (Sandbox Code Playgroud) 如何在集群上生成独立的伪随机数,例如蒙特卡罗模拟?我可以有很多计算节点(例如100),我需要在每个节点上生成数百万个数字.我需要保证一个节点上的PRN序列不会与另一个节点上的PRN序列重叠.
我目前正在探索统一并行C的某些方面,作为HPC中标准并行化方法的替代方法(如MPI,OpenMP或氢化方法).
我的问题是:有没有人在大规模应用程序(〜> 10.000核心)上有UPC性能经验?我主要对共享内存的访问速度感兴趣.显然这取决于底层硬件,网络连接,操作系统,编译器等.但我通常对使用UPC解决任何类型的"真实世界"问题感兴趣.
此外,您对UPC的总体印象是什么?你认为它有可能比现在更广泛地使用未来吗?是否值得转用它?
欢迎任何评论!
非常感谢,马克
有没有相当于Haskell Control.Parallel.Strategies或实现相同的方法?
这允许以不同的方式评估现有代码.通过将算法与策略和算法从评估中分离出来.
因此,在SO和整个互联网上,如何使OpenMP易于使用的#pragma指令与C++同样易于使用的STL容器配合使用,会有很多困惑和沮丧.
每个人都有关变通的STL会谈vector,但对于非随机接入/双向容器,如map,list,set,等?
我遇到了这个问题并设计了一个非常简单明了的解决方法.我在这里介绍STL map,但它显然是可推广的.
串口版:
for (std::map<A,B>::iterator it = my_map.begin();
it != my_map.end();
++it)
{ /* do work with it */ }
Run Code Online (Sandbox Code Playgroud)
我提出的将OpenMP与STL一起使用的解决方案map:
//make an array of iterators.
int loop_length = my_map.size();
std::map<A,B>::iterator loop_array[ loop_length ];
std::map<A,B>::iterator allocate_it = my_map.begin();
for (int j=0; j<loop_length; ++j)
loop_array[j] = allocate_it++;
// now you can use OpenMP as usual:
#pragma omp parallel for
for (uint j=0; j<loop_length; ++j)
{ /* …Run Code Online (Sandbox Code Playgroud) 我开始尝试使用IPython并行工具并遇到问题.我启动我的python引擎:
ipcluster start -n 3
Run Code Online (Sandbox Code Playgroud)
然后以下代码运行正常:
from IPython.parallel import Client
def dop(x):
rc = Client()
dview = rc[:]
dview.block=True
dview.execute('a = 5')
dview['b'] = 10
ack = dview.apply(lambda x: a+b+x, x)
return ack
ack = dop(27)
print ack
Run Code Online (Sandbox Code Playgroud)
按原样返回[42,42,42].但如果我将代码分成不同的文件:dop.py:
from IPython.parallel import Client
def dop(x):
rc = Client()
dview = rc[:]
dview.block=True
dview.execute('a = 5')
dview['b'] = 10
print dview['a']
ack = dview.apply(lambda x: a+b+x, x)
return ack
Run Code Online (Sandbox Code Playgroud)
并尝试以下方法:
from dop import dop
ack = dop(27)
print ack
Run Code Online (Sandbox Code Playgroud)
我从每个引擎得到错误:
[0:apply]: …Run Code Online (Sandbox Code Playgroud) 我正在尝试优化我的代码,利用多核处理器来复制任何操作大型密集阵列.
对于复制:我有一个大密集阵列(大约6000x100000),我需要从中拉出15x100000子阵列,在管道上进行多次计算.该管道由许多线性代数函数组成,这些函数由blas处理,这是多核的.与线性代数相比,提取数据的时间是否真的重要是一个悬而未决的问题,但我要谨慎一点,并确保数据复制得到优化.
对于操作:我有许多不同的函数,通过元素或行来操作数组.如果每个都做多核,那将是最好的.
我的问题是:最好是使用正确的框架(OpenML,OpenCL)并让编译器发生所有的魔术,还是有更好的功能/库可以更快地完成这项工作?
想象一下经典的OMP任务:
using namespace std;
int main() {
vector<double> v;
// generate some data
generate_n(back_inserter(v), 1ul << 18,
bind(uniform_real_distribution<double>(0,1.0), default_random_engine { random_device {}() }));
long double sum = 0;
{
#pragma omp parallel for reduction(+:sum)
for(size_t i = 0; i < v.size(); i++)
{
sum += v[i];
}
}
std::cout << "Done: sum = " << sum << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我无法想出如何报告进度.毕竟,OMP正在为我处理团队线程之间的所有协调,而我没有一个全局状态.
我可能会使用常规std::thread并从那里观察一些共享变量,但是没有更多的"omp-ish"方法来实现这一目标吗?
我大约一年半以来一直在运行MATLAB.而且我一直在努力让matlabpool准备好在将近三个月内完成一次.在我完全放弃之前,我决定寻求帮助.:)
我的问题始于matlabpool命令.每当我输入matlabpool命令时,我都会得到:
One or more output arguments not assigned during call to "system_dependent".
Error in matlabpool>iIsOnClient (line 73)
onclient = ~system_dependent('isdmlworker');
Error in matlabpool>iVerifyJava (line 64)
if iIsOnClient()
Error in matlabpool (line 10)
iVerifyJava();
Run Code Online (Sandbox Code Playgroud)
经过一些研究和不眠之夜,我发现必须使用"Cluster Profile Manager"解决问题.但我从来没有机会看到它的运作.以下是从Parallel面板中单击Cluster Profile Manager后得到的内容:
com.mathworks.jmi.MatlabException: Feature isdmlworker not found
at com.mathworks.jmi.NativeMatlab.SendMatlabMessage(Native Method)
at com.mathworks.jmi.NativeMatlab.sendMatlabMessage(NativeMatlab.java:266)
at com.mathworks.jmi.MatlabLooper.sendMatlabMessage(MatlabLooper.java:120)
at com.mathworks.jmi.Matlab.mtFeval(Matlab.java:1710)
at com.mathworks.jmi.MatlabWorker.feval(MatlabWorker.java:197)
at com.mathworks.toolbox.distcomp.ui.profile.model.MatlabProfileManager$1.runOnMatlabThread(MatlabProfileManager.java:80)
at com.mathworks.jmi.MatlabWorker$2.run(MatlabWorker.java:79)
at com.mathworks.jmi.NativeMatlab.dispatchMTRequests(NativeMatlab.java:475)
Attempt to reference field of non-structure array. …Run Code Online (Sandbox Code Playgroud) 调用sequential()和parallel()更改Java 8流管道的执行方式是否放置?
例如,假设我有这样的代码:
new ArrayList().stream().parallel().filter(...).count();
Run Code Online (Sandbox Code Playgroud)
在这个例子中,很明显filter()将并行运行.但是,如果我有这个代码怎么办:
new ArrayList().stream().filter(...).parallel().count();
Run Code Online (Sandbox Code Playgroud)
是否filter()在并行运行仍然还是它按顺序运行?之所以不清楚是因为中间操作filter()是懒惰的,即它们不会在调用终端操作之前运行count().因此,在count()调用时,我们有一个并行流管道但是filter()顺序执行,因为它在调用之前到来了parallel()?