Когда у меня есть буфер памяти в OpenCL, я знаю, что мне нужно выровнять данные в нем с 16-байтовой границей.
Но что мне делать, если все мои данные (а не структура данных, фактический сбор данных), например, составляют всего 15 байт?
Должен ли я помещать его в 16-байтовый большой буфер или 15-байтовый?
Есть разница в производительности?Заполнение буфера OpenCL
ответ
Если вы собираетесь использовать многие из 15-байтовой структуры данных, и вы планируете использовать локальную память, я предлагаю сохранить 15-байтовую структуру и загрузить кратное 16 из них за раз. Я думаю, что «многие» будут иметь как минимум несколько килобайт данных в вашей рабочей группе. Причина этого в том, что, когда вы жертвуете дополнительным байтом на каждые 15, вы добавляете на 6% больше накладных расходов на передачу. Если оставить размер как 15, это также поможет избежать конфликтов в банках при записи данных в память (как в локальной, так и в глобальной памяти).
Массив 15-байтных структур, вероятно, не будет выровнен и будет иметь дорогостоящее время доступа. Я рекомендую хранить его на 16 (особенно, поскольку естественное выравнивание большинства устройств, включая GPU, составляет 16 байтов). Конечно, это компромисс производительности/памяти. Я также не понимаю, как размер структуры имеет какое-либо отношение к банковским конфликтам, если что-то делает их хуже из-за неустановленной загрузки/хранения. – Thomas
Прошу пояснить: в моем примере нет 15-байтовых структур данных (я никогда ничего не говорил о структурах). Данные WHOLE составляют 15 байт. Это не обязательно должно быть всего 15 байт. Это может быть любое число, которое не кратно 16. – Tara
- 1. Объект буфера OpenCL
- 2. Очистка буфера OpenCL clEnqueueMapBuffer
- 3. Как обновить данные общего буфера OpenCL-OpenGL в ядре OpenCL?
- 4. заполнение буфера буфером ненужным
- 5. Заполнение буфера пустой пустотой
- 6. opencl вектор буфера изображения/огромное количество данных для буфера изображения
- 7. Объект буфера и объекта буфера изображения в OpenCL
- 8. Заполнение буфера Float в металле
- 9. Отправка командного буфера DX против OpenCL
- 10. Оптимизация размещения и сопоставления буфера OpenCL
- 11. Почему не document.execCommand вызывает заполнение буфера обмена?
- 12. Заполнение буфера со случайными значениями C++
- 13. Заполнение строкового буфера при использовании Ocilib
- 14. OpenCL чтения переменного буфера результата размера от GPU
- 15. Передача ядра глобального буфера локальной функции в OpenCL
- 16. Нарушение доступа OpenCL при записи буфера на устройство
- 17. clReleaseMemObject в OpenCL
- 18. Заполнение Windows Share Charm с данными буфера обмена
- 19. IRC, использующий NetworkStream - заполнение буфера и линия попадают в ловушку
- 20. Заполнение моего собственного веб-аудио буфера не работает
- 21. Заполнение дополнительных байтов указателем буфера плоского буфера, который должен быть отправлен по сети
- 22. Возможно ли заполнение буфера глубины и цветового буфера в контексте MRT с использованием OpenGL и GLSL?
- 23. форматирование строк в OpenCL?
- 24. Указатели между буферами OpenCL
- 25. memcpy in opencl 1.1
- 26. Intel OpenCL Vs. Khronos OpenCL
- 27. аргументы ядра OpenCL
- 28. Неквадратическое умножение матрицы в Opencl
- 29. Постоянное кэширование памяти OpenCL
- 30. Избегайте выравнивания данных в OpenCL
Итак, вы запускаете ядро с вводом всего 15 байт? Это плохой пример. Если вы используете байты X * 16 + Y, которые не кратно 16, то это более правдоподобно. – DarkZeros
Да, данные больше 15 байт. Но не кратно 16. – Tara