Пощупал вышедший вчера Intel OpenCL SDK 1.5.
Заявленные новые фишки:
- Поддержка AVX-векторизации (т.е. векторов в 256 бит)
- Отладчик
- Отладчик
-
Отладчик - работает. Пошаговая отладка, просмотр значений переменных, все отлично. С каким конкретно потоком работать - задается до запуска программы.
Несколько неудобно то, что путь до файла с исходными текстами передается в флагах компиляции. Казалось бы, компилятор все видит в момент компиляции, однако ж.
- AVX и 256 бит
- Генерируемый 256-битный код, на мой вкус, безумно странен. Да, 256-битные регистры (YMM) используются, но как-то очень редко.
- BitonicSort, EigenValue, Nbody: исполнение под OpenCL 1.5 в 2.5-3 раза медленнее.
- RadixSort: новая версия в 1.5 раза медленнее.
- SimpleConvolution: время исполнения не изменилось.
- Histogram: стало на 15% быстрее.
Помимо проблем с производительностью, у меня еще не запускается GUI к 64-битному Offline Compiler (комманд-лайн версия работает без проблем), с диагностикой "не найден файл" (а какой файл - не скажу). Проблема с ioclgui64 решается как написано в README: нужно явно прописать путь к Java Runtime, иначе или 32-битная версия ioclgui не находит 64-битную яву, или, наоборот, 64-битный gui страдает без явы 32-битной.
Мораль: хотите отладчика - ставьте новую версию. Для всех других использований рекомендовать ее трудно. Надеемся на скорый выход фиксов.
Comments
то есть они всё таки научились компилировать треды в SIMD-лейны? Раньше вроде надо было явно 4-векторами пользоваться чтобы в SSE скомпилировалось. Меня в этом отношении ISPC больше радует - там изначально векторизация тредов заложена, как в CUDA.
Ну они научились этому еще в 1.1, а в 1.5 что-то стало получше, что-то - похуже.
ISPC мне тоже *очень* нравится.
Я тоже заметил, что стал меньше векторизовать, но примерно на 5-10% быстрее работать