Почему при меньшем размере блока потоков в группе, скорость такая же?
В принципе весь вопрос. Да нет, Зависит ли линейно скорость кода, от числа потоков в группе? Примеры неожиданно для меня сказали что не особо, и может как быстрее так и медленнее.
Например их максимально 1024 на видеокарте. Я думал что чем больше тем лучше.
Если запускать ядро с 512, то наверное я ожидаю(ожидал), снижение скорости до 2 раз, так как 512 потков простаивают на видеокарте, но этого не происходит? Они не простаивают получается?
И так и 256, размером группы. и 128, а вот дальше уже спад иногда идет, а иногда нет, в зависимости от кода. Например при размере группы 1, до 8 раз скорость падает. Но на 128, нет просадок. тогда что делают другие 900 потоков.
Ответ в принципе я догадываюсь какой, но лучше точно знать. Типа куча групп одновременно запускаются, но я не понимаю, тогда если каждая группа внтури должна выделить максимум разделямой памяти на группу, то как ее хватает на все группы. Например каждая группа, должна загрузить в разделяемую память тайл 64*64 пиксела 40кб информации, А если допустим размер группы, 128, то как тогда происходит. Ее получается намного в 20ки раз больше физически на кристале. и даже в характеристиках нигде найти не могу, что бы узнать сколько shared memory, кроме с пометкой на группу?
Я и так уже от степеней свободы сбился, что малейшее исправление кода, и в 10 раз разница, а тут еще одна.
Производительность кода на gpu сильно зависит от динамики обращения к оперативной памяти, достаточности кеша и аппаратных возможностей железа (сколько банков памяти).
Например последовательный доступ к данным значительно эффективнее случайного.
Если процессор не используется, то в худшем количество потоков должно быть не больше банков памяти (десятки).