Имеется набор kernel-ов, которые надо запустить одновременно. Есть буффер, который передаётся всем kernel-ам, каждый kernel обращается (на чтение/запись) к разным участкам этого буффера (участки не пересекаются). Есть вариант разбить этот буффер на большое количество более мелких, но этих мелких буфферов в такой ситуации будет много. Какой вариант эффективнее?
Тогда в чем проблема. Пускай обращаются. Зачем разбивать? Раздайте всем по собственному указателю на свой участок и пускай сидят в одном буфере. Их же в таком случае даже синхронизировать не надо. Достаточно предусмотреть зазоры между буферами и заполнить их контрольными значениями для определения переполнения
Я просто подозревал, что там могут быть проблемы с производительностью, раз их нет, то так и сделаю, спасибо за ответ.
Если и будут проблемы с производительностью, то это уже не из-за буфера(ов). Избыточная сихронизация (куча мест, в которых простаивают вычислители), слишком много потоков (недостаточно вычислителей), недостаточно пропускной способности (скорости работы памяти/шины передачи данных) итд итп. В любом случае разделением это не решится.