Как создать большой битовый массив в cuda?

Мне нужно отслеживать около 10000 элементов массива в моем алгоритме. Поэтому для этого мне нужно логическое значение для каждой записи. Если бы я использовал массив символов для отслеживания 10000 массивов (как 0/1), это заняло бы много Память.

Итак, могу ли я создать битовый массив из 10000 бит в Cuda, где каждый бит представляет соответствующую запись массива?


person uci_grad    schedule 14.06.2012    source источник


Ответы (1)


Как сказал Роджер, да, CUDA обеспечивает те же побитовые операции (т. е. >>, << и &), что и обычный C, поэтому вы можете реализовать свой битовый массив практически нормально (почти, см. вопросы синхронизации потоков ниже).


Однако для вашей ситуации это почти наверняка не очень хорошая идея.

Есть проблемы с синхронизацией потоков. Представьте, что два потока вашего графического процессора инвертируют два бита одной записи вашего массива. Каждый поток будет считывать одно и то же значение из памяти и применять к нему свою операцию, но поток, который записывает свое значение обратно в память последним, перезапишет результат другого потока. (Примечание: если ваш битовый массив не модифицируется кодом графического процессора, это не проблема.)

И, если это явно не требуется, вы не должны оптимизировать использование памяти, массив с 10 КБ элементов вообще не занимает много памяти: даже если вы храните каждое логическое значение в 64-битном целом числе это всего 80 КБ. И, очевидно, вы можете хранить их в меньшем типе данных. (Вы должны начать беспокоиться о максимально возможном сжатии массива только тогда, когда вы получаете десятки миллионов или даже сотни миллионов элементов.)

Кроме того, способ работы графических процессоров означает, что вы можете получить лучшую производительность, используя достаточно большой тип данных для каждого логического значения (скорее всего, 32-битного), чтобы, например, объединение памяти работало лучше. (Я не проверял это утверждение, вам нужно будет запустить несколько тестов, чтобы проверить его.)

person huon    schedule 15.06.2012
comment
На самом деле, основное решение при принятии решения о том, как хранить логические значения, должно основываться на том, связана ли задача с вычислительными ресурсами или памятью. Если это связано с памятью, может быть огромное преимущество в хранении одного бита на бит, по крайней мере, для чтения. Хотя писать сложно, как вы упомянули. По крайней мере, на Fermi нет смысла хранить более одного байта на бит для массива чтения/записи — для этого просто требуется больше транзакций памяти. Для массива только для чтения я бы сохранил один бит на бит. - person Roger Dahl; 15.06.2012