我有一个很长的双重嵌套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);
}
});
错误:
(该错误信息无法翻译为具体内容,请提供更多上下文以获取准确翻译)
someFunc
的签名,直接接受数组项而不是其在数组中的位置。 - Sva.Mu