java - GCC 和 JVM 自动并行批处理

标签 java c++ c multithreading gcc

考虑以下代码片段。

//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。此外,它非常善变,并且会由于较小的代码或编译器版本更改而“中断”,因此如果它有效但你真的不应该依赖它是一个很好的奖励(或者如果你这样做,请预留一段时间以确保它仍然适用于所有更改,如果不适用,则修改代码)

关于java - GCC 和 JVM 自动并行批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22237511/

相关文章:

java - 无法使用 Runtime.Exec 传递远程命令 (ssh)

php - Eclipse for PHP 开发人员需要 JRE

c++ - 采用所需属性的比较器

c - 是否可以将调用包装到静态链接的第 3 方库?

c - 保留全局变量或在 c 中重新创建局部变量?

java - 将值与整数 sqlite 进行比较

java - Ant Build 无法识别 JAVA_HOME

c++ - VS2008 : Can I build a project with 2 CPP files of the same name in different folders?

c++ - 了解系统级读写函数

c - udp 套接字 - 绑定(bind)和连接成功,但发送不起作用