Reply to comment

Ну, тут надо брать листочек бумаги и считать :)

Каждая строка Вашего блока нитей (16 нитей) объединяются в half-warp (в полном warp'е 32 нити), half-warp одновременно обращается к памяти. Шаред-память разбивается на 16 банков. 16 подрядидущих слов попадают в разные банки. Таким образом, если две нити из одной строки (при данном блоке нитей 16x16 это half-warp) обращаются к элементам, разложенным в памяти на расстоянии sizeof(float)*16, происходит конфликт и это обращение происходит не за один такт, а за два. Если больше нитей конфликтуют, то еще больше.

Но это все ерунда, конечно. Всё, что я писал, довольно вяло отзывалось на оптимизации, убирающие конфликты банков до 16 включительно. Вот устранение бранчингов приводит к фантастическим изменениям, да.

Reply

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <i> <table> <td> <tr> <th>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Images can be added to this post.

More information about formatting options

Copyright © 2008-2011 Alex Tutubalin