Intel OpenCL 1.5: AVX, отладчик, но плохая производительность

Пощупал вышедший вчера Intel OpenCL SDK 1.5.

Заявленные новые фишки:

  • Поддержка AVX-векторизации (т.е. векторов в 256 бит)
  • Отладчик
Имею сказать:
Отладчик
Отладчик - работает. Пошаговая отладка, просмотр значений переменных, все отлично. С каким конкретно потоком работать - задается до запуска программы.

Несколько неудобно то, что путь до файла с исходными текстами передается в флагах компиляции. Казалось бы, компилятор все видит в момент компиляции, однако ж.

AVX и 256 бит
Генерируемый 256-битный код, на мой вкус, безумно странен. Да, 256-битные регистры (YMM) используются, но как-то очень редко.
Для тестирования производительности я взял 6 примеров из AMD APP SDK и запустил их c Intel OpenCL 1.1, а потом с 1.5. Результат меня огорчил:
  • BitonicSort, EigenValue, Nbody: исполнение под OpenCL 1.5 в 2.5-3 раза медленнее.
  • RadixSort: новая версия в 1.5 раза медленнее.
  • SimpleConvolution: время исполнения не изменилось.
  • Histogram: стало на 15% быстрее.
При этом Historgam новый OpenCL отказывается векторизовать (на старый - не посмотрел), а все остальные - векторизуются и от того стало хуже.

Помимо проблем с производительностью, у меня еще не запускается GUI к 64-битному Offline Compiler (комманд-лайн версия работает без проблем), с диагностикой "не найден файл" (а какой файл - не скажу). Проблема с ioclgui64 решается как написано в README: нужно явно прописать путь к Java Runtime, иначе или 32-битная версия ioclgui не находит 64-битную яву, или, наоборот, 64-битный gui страдает без явы 32-битной.

Мораль: хотите отладчика - ставьте новую версию. Для всех других использований рекомендовать ее трудно. Надеемся на скорый выход фиксов.

Tags: 

Comments

Я тоже заметил, что стал

Я тоже заметил, что стал меньше векторизовать, но примерно на 5-10% быстрее работать

то есть они всё таки

то есть они всё таки научились компилировать треды в SIMD-лейны? Раньше вроде надо было явно 4-векторами пользоваться чтобы в SSE скомпилировалось. Меня в этом отношении ISPC больше радует - там изначально векторизация тредов заложена, как в CUDA.

Ну они научились этому еще в

Ну они научились этому еще в 1.1, а в 1.5 что-то стало получше, что-то - похуже.

ISPC мне тоже *очень* нравится.