gpt4 book ai didi

java - Java 中 for 循环的并行化

转载 作者:行者123 更新时间:2023-12-02 09:14:50 26 4
gpt4 key购买 nike

我有一个很长的双重嵌套 for 循环来进行多次试验。我想并行进行,因为这些试验是相互独立的。如何在 Java 中高效地实现这一点,类似于 C++ 中的 OpenMP?我将在具有 64 个处理器的节点上运行它,因此我希望每个核心执行一项测量。

相关代码:

//I want each measure to perform the doubly nested loop at the same time.

for (int i : measures) {

for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++) {
array[i*N*N + j*N + k] = someFunc(i,j,k);
}
}

}

编辑:仍有问题:

//sim is a 1D array of type double
//gM is an array of type SMconf
//gene[foo].annot is a LinkedHashSet of URIs.
//Javadoc http://www.semantic-measures-library.org/sml/docs/apidocs/

Arrays.parallelSetAll( sim, i -> {
try {
engine.compare( gM[i/(N*N)], gene[(i/N)%N].annot, gene[i % N].annot );
}
catch (SLIB_Ex_Critic ex) {
Logger.getLogger(Exp2.class.getName()).log(Level.SEVERE, null, ex);
}
});

错误:

enter image description here

最佳答案

    int N=5;
int array[]=new int[200];
int [] measures={1,2,3,4,5};

Arrays.stream(measures).parallel().forEach(i->{
IntStream.range(0, N).parallel().forEach(j->{
IntStream.range(0, N).parallel().forEach(k->{
array[i*N*N+j*N + k]= someFunc(i,j,k);
});
});
});


Arrays.stream(array).forEach(System.out::println);

考虑到 measures 是一个数组而不是 ArrayList。您可能想在写入array[]时加锁。我希望您没有使用 array 作为变量名。

关于java - Java 中 for 循环的并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32815231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com