GCC和JVM自动平行批次

GCC and JVM auto parallel batch

本文关键字:JVM GCC      更新时间:2023-10-16

考虑以下代码段。

//C
int arr[1024];
void fill_array(){
  int len=sizeof(arr)/4;
  int res;
  for(int i=o;i<len;i++){
  res;//=some big operation
  arr[i]=res;
  }
}
//J
private int[] arr=new int[1024];
void fill_array(){
  int len=arr.length;
  int res;
  for(int i=o;i<len;i++){
  res;//=some big operation
  arr[i]=res;
  }
}

假设每个循环只能初始化一个arr的一个索引,并且对任何其他索引没有任何依赖性。就像arr[i]=i*2一样。
我知道它应该由GPU或至少平行。
问题:
GCC编译器或JVM是否会平行处理(循环)并隐式处理?
如果是,是否有任何编译标志或可以关闭此功能的内容?

那里至少有一个实验性JVM,它正在处理GPU(graal)上的此类循环。我本人还没有尝试过,但是我听说几个月前它适用于简单循环 - 无论如何,对于此阶段的任何生产代码肯定是不可行的。

在事物的C侧,我知道ICC实际上确实进行了自动并行化,但仅适用于CPU。此外,这是非常善变的,由于次要代码或编译器版本的更改,它将"断开",因此,如果有效,它会更加好,但您确实不应该依靠它(或者如果您这样做,请确保相当一段时间以确保它仍然可以与每一个更改一起使用,如果没有代码)