我使用以下方法创建了并行工作程序(所有工作程序都在同一台计算机上运行):
MyCluster = makeCluster(8)
Run Code Online (Sandbox Code Playgroud)
如何使这8个节点中的每一个源都成为我编写的R文件?我试过了:
clusterCall(MyCluster, source, "myFile.R")
clusterCall(MyCluster, 'source("myFile.R")')
Run Code Online (Sandbox Code Playgroud)
和几个类似的版本。但是没有一个有效。您能帮我发现错误吗?
非常感谢你!
我无法弄清楚omp_nest_lock_t和omp_lock_t lck之间的区别; 这段代码完美地同步了longtask(),但在执行时无法弄清楚它们之间的区别;
omp_nest_lock_t lck_n; //omp_lock_t lck;
int t_id;
omp_init_nest_lock(&lck_n); //omp_init_lock(&lck);
omp_set_num_threads(6);
#pragma omp parallel private(t_id) shared(lck_n)
{
t_id = omp_get_thread_num();
omp_set_nest_lock(&lck_n); //omp_set_lock(&lck);
printf("\nhi by %d\n",t_id);
long_task();
printf("My thread id is %d.\n", id);
omp_unset_nest_lock(&lck_n); //omp_unset_lock(&lck);
}
omp_destroy_nest_lock(&lck_n); //omp_destroy_lock(&lck);
Run Code Online (Sandbox Code Playgroud) 目标构造将代码区域从主机卸载到目标设备。变量p,v1,v2,明确地映射到使用在地图子句目标设备。目标数据也一样,
那么,这意味着:
关于“目标数据”结构,
我的意思是这些代码之间的卸载机制有什么区别:
void vec_mult1(float *p, float *v1, float *v2, int N)
{
int i;
init(v1, v2, N);
#pragma omp target map(to: v1[0:N], v2[:N]) map(from: p[0:N])
#pragma omp parallel for
for (i=0; i<N; i++)
p[i] = v1[i] * v2[i];
output(p, N);
}
void vec_mult2(float *p, float *v1, float *v2, int N)
{
int i;
init(v1, v2, N);
#pragma omp target device(mic0) data map(to: v1[0:N], v2[:N]) map(from: p[0:N])
{
//this code runs …Run Code Online (Sandbox Code Playgroud) 我想在我的两台计算机上使用GNU parallel.我成功地在一台计算机上运行并行,但我无法在远程计算机上并行运行.
版本:本地:parallel-20140222,Remote:parallel-20130522.我已经启用了密码少ssh登录.
parallel -j+0 --eta 'muscle -in {} -out {.}.aln -quiet' < list
但当我尝试使用以下命令"并行"在远程计算机上运行时,
1)时间并行-j + 0 --eta -Svaramesh@10.117.173.5,: - 转移, - 返回{.}.aln --cleanup'muscle -in {} -out {.}.aln -quiet'<名单
2)时间并行-j + 0 - eta -S10.117.173.5,: - 转移, - 返回{.}.aln --cleanup'muscle -in {} -out {.}.aln -quiet'<名单
3)时间并行-j + 0 - eta -S:,10.117.10.5 -transfer, - return {.}.aln --cleanup'muscle -in {} -out {.}.aln -quiet'<list
所有这些都给出了以下错误
parallel: Error: Cannot open input file `nsfer,': No such file or directory.
Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,其中我有多个接口和两个实现类,需要实现这两个接口.
假设我的第一个接口是 -
public Interface interfaceA {
public String abc() throws Exception;
}
Run Code Online (Sandbox Code Playgroud)
它的实施是 -
public class TestA implements interfaceA {
// abc method
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼它 -
TestA testA = new TestA();
testA.abc();
Run Code Online (Sandbox Code Playgroud)
现在我的第二个界面是 -
public Interface interfaceB {
public String xyz() throws Exception;
}
Run Code Online (Sandbox Code Playgroud)
它的实施是 -
public class TestB implements interfaceB {
// xyz method
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼它 -
TestB testB = new TestB();
testB.xyz();
Run Code Online (Sandbox Code Playgroud)
问题陈述:-
现在我的问题是 - 有什么办法,我可以并行执行这两个实现类吗?我不想按顺序运行它.
意思是,我想并行运行TestA和TestB实现?这可能吗?
java parallel-processing multithreading callable executorservice
当我在Java 8中使用流应用并行排序时,我得到一个无效的结果:
List<String> list = new ArrayList<>();
list.add("A");
list.add("C");
list.add("B");
list.stream().sorted().forEach(System.out::println);
System.out.println("-");
list.stream().parallel().sorted().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
结果:
A
B
C
-
B <----- Invalid order
C
A
Run Code Online (Sandbox Code Playgroud)
为什么并行排序会返回未排序的结果?
我想在大型数据集上运行随机森林:100k*400.当我使用随机森林时需要花费很多时间.我可以使用插入包中的parRF方法来减少运行时间吗?什么是正确的语法?这是一个示例数据帧:
dat <- read.table(text = " TargetVar Var1 Var2 Var3
0 0 0 7
0 0 1 1
0 1 0 3
0 1 1 7
1 0 0 5
1 0 1 1
1 1 0 0
1 1 1 6
0 0 0 8
0 0 1 5
1 1 1 4
0 0 1 2
1 0 0 9
1 1 1 2 ", header = TRUE)
Run Code Online (Sandbox Code Playgroud)
我试过了:
library('caret')
m<-randomForest(TargetVar ~ Var1 + Var2 + Var3, data …Run Code Online (Sandbox Code Playgroud) 什么是最接近的Swift等效的以下C&OpenMP代码(假设这n是巨大的,f很简单):
#openmp parallel for
for (int i = 0; i < n; ++i) {
a[i] = f(b[i]);
}
Run Code Online (Sandbox Code Playgroud)
并行化一个for循环,dispatch_apply对于这样的例行任务来说似乎很多工作.有没有聪明的捷径?
我有一个任务,该任务本质上循环遍历一个集合,并成对地对它们进行操作(对于int i = 0; i <limit; i + = 2等),因此,我在线程循环上看到的大多数建议都使用某种foreach机制。但这对我来说似乎有点棘手,因为我是如何使用这种成对操作的方法的。
所以我想做的基本上是替换:
DoOperation(list.Take(numberToProcess));
Run Code Online (Sandbox Code Playgroud)
与
Thread lowerHalf = new Thread(() => => DoOperation(list.Take(numberToProcess/2)));
Thread lowerHalf = new Thread(() => => DoOperation(list.getRange(numberToProcess/2, numberToProcess));
lowerHalf.Start();
upperHalf.Start();
Run Code Online (Sandbox Code Playgroud)
这似乎可以完成工作,但是非常慢。每次迭代都比上一次慢,并且在我调试时,“线程”视图显示越来越多的“线程”列表。
但是我给人的印象是线程在完成时就终止了?是的,线程确实完成了。DoOperation()方法几乎只是一个for循环。
那我在这里不明白什么呢?
我试图再次使用parLapply(现在在此上下文中成功使用它)但这次并行化的函数包含mc2d包中的一些函数(即.deeprt,ppert).我在代码的并行部分之前安装并加载了包.
我使用群集导出成功将变量导出到群集,
clusterExport(C1, "variable")
...
Run Code Online (Sandbox Code Playgroud)
但是我尝试使用dpert和ppert导出函数
clusterEvalQ(C1,dpert)
Run Code Online (Sandbox Code Playgroud)
我得到了错误
object C1 not found
Run Code Online (Sandbox Code Playgroud)
怎么没找到C1?是否有另一种方法将R-packages函数导出到集群以进行并行处理?