Я знаю, что для Intel векторные регистры оптимизированы, например. микроархитектура SandyBridge (SSE + AVX), но как насчет графического процессора NVIDIA?OpenCL: векторные регистры NVIDIA (float4, float8, ..) VS векторные регистры Intel
Некоторые источники, которые я где-то читал (я забыл, где) заявил, что использование векторных регистров бесполезно для графического процессора NVIDIA. Однако у меня был тестовый запуск программы с векторными регистрами на графическом процессоре и по сравнению с ними , они дали мне пример. 1.7x ускорение.
FYI CPU Intel дает только 1,25x ускорение для той же программы.
Так что если NVIDIA действительно оптимизирует эти векторные регистры, может кто-то, пожалуйста, дать мне объяснение или источник для чтения? Мне нужно это для документации. Благодарю.
Вероятным источником улучшения производительности на графическом процессоре NVIDIA будет пропускная способность памяти. Аппаратное обеспечение может хранить магазины и нагрузки для 64 и 128-битных типов в одной транзакции на каждом мультипроцессоре, что уменьшает общую задержку и увеличивает эффективную пропускную способность. – talonmies
Спасибо за ответ. Вы имеете в виду 16 единиц загрузки/хранения? Может ли каждая единица загружать/хранить 128-битные типы для каждой деформации? (следовательно, делает его 16x128). Если нет, я думаю, что это не так. Потому что использование неявного векторного регистра (convert_floatn, vloadn и т. Д.) Действительно имеет значение. Это дает лучшее ускорение. – ardiyu07
Да. Аппаратное обеспечение может обрабатывать размеры транзакций размером 256 и 512 байтов для каждой основы. Это может привести к увеличению использования полосы пропускания на любом заданном уровне занятости. Посмотрите на слайд 35 из этих слайдов (http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf) (примечание pdf) для примера ядра memcpy в CUDA, который иллюстрирует эффект. – talonmies