LINUX.ORG.RU

[OpenCL][Cuda] + компилятор

 ,


0

1

Возможно ли сделать так, чтоб компилятор компилировал не только на проце, но и на видеокарте?
Многие скажут, что видеокарта плохо справляется с if-ами, циклами, но ведь на видеокарте не два- четыре ядра, а больше, поэтому даже если уменьшение скорости будет в 5 раз то выигрываем через количество потоков сборки.

★★★★

Типичное заблуждение. Видеокарты не умеют запускать на разных процессорах разные инструкции (как это умеют CPU). Они исполняют одну инструкцию над массивом данных параллельно. Это если очень грубо и приблизительно. Для чего либо кроме обработки массивов данных они бесполезны.

KblCb ★★★★★
()

Надеюсь что скоро появится. x86 же умеет компилировать код для MIPS.

ZenitharChampion ★★★★★
()

http://en.wikipedia.org/wiki/Graphics_processing_unit#Stream_Processing_and_G...

В конце абзаца есть пару слов на тему параллельного запуска разных комманд (не знаю, насколко это реально и полезно).

А к компиляции такие штуки вообще не применить. Можно собрать большой кластер distcc из слабых машин, но выигрыш в скорости даже близко не подойдет к количеству компьютеров.

note173 ★★★★★
()

проще на это ответить так

видяхи рассчитаны на перелопачивание больших обьемов математики над float(4 байта) данными
а компиляторы весьма узкая область программ - в которых float-ов нет ваще принципиально

да и плюс с тому вычисления на gpu весьма и весьма «молоды»

а если есть задача типа пересобрать дистрибутив немелкий - обьемом как дебиан - то проще поставить в паралель несколько компов - выйгрыщ будет соответствующий

ae1234 ★★
()

Теоретически сделать подобное возможно.
В результате заметного ускорения сборки не получится в силу некоторых особенностей GPU. Рекомендую почитать мануал по CUDA, там эта проблема четко описана.

P.S. Если у тебя выполняется 100 потоков на видеокарте, но в них должны выполнится различные ветки if (пусть 50/50), в этом случае останавливаются 50 false-потоков и выполняются только 50 true-потоков, потом наоборот. При этом возможен вложенный if, в итоге останутся выполняться всего 25 потоков, потом 12, потом 6, потом 3, потом потоки будут выполнятся по одному. Не забудь о том, что часть процессорного времени будет уходить на переключение между группами потоков и прочую ерунду.

trex6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.