GCC и JVM автоматическая параллельная партия

0

Рассмотрение следующих фрагментов кода.

//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 понять его (цикл) будет обрабатываться параллельно и делать это неявно?
Если да, есть ли какой-либо флаг компиляции или что-то, чтобы отключить или отключить эту функцию?

  • 0
    Ответ: нет, не в стандартных компиляторах.
Теги:
multithreading
gcc

1 ответ

1
Лучший ответ

Существует, по крайней мере, один экспериментальный JVM, который работает над распараллеливанием таких петель на графическом процессоре (гранатомет). Не пробовал это сам, но я слышал, что это работает для простых циклов несколько месяцев назад - во всяком случае, конечно же, это невозможно для любого производственного кода на данном этапе.

На стороне C вещей я знаю, что icc действительно делает автоматическую распараллеливание, но только для CPU. Также он довольно изменчив и будет "ломаться" из-за незначительных изменений кода или компилятора, так что это больше приятный бонус, если он работает, но вы действительно не должны полагаться на него (или если вы это сделаете, зарезервируйте достаточно времени, чтобы убедиться, что это все еще работает с каждым изменением и возится с кодом, если это не так)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню