Reply to comment

использование общей памяти

Tagged:  

Работаю над data-bounded программкой, в каждом потоке которой создается и используется много раз матрица double размером 16 * 16.
Изначально эту матрицу я клал в локальную память - самый простой способ. Но из за того что каждое обращение к ней стоит 400-600 тиков, решил попробовать общую память. Так как таких матриц в общую влезает всего 7, и часть матрицы используется более интенсивно чем другая, то засунул более интенсивно используемую часть матрицы в общую память, хватило места на 16 потоков. Плюс одна строка матрицы читается из константной памяти так как в нее ничего не пишется в процессе. В итоге сократил использование локальной памяти в разы. Но такая программа показала значительное замедление по сравнению с той что использует локальную память, даже несмотря на то что я исключил возможность bank conflicts, о чем свидетельствуют показания профайлера.

Результаты:
с локальной памятью решает 2048 элементов в 16 потоков за 4 секунды (оптимальнее 64 потока, я для сравнения привожу).
с общей памятью решает 128 элементов в 16 потоков за 4 секунды.

Может кто нибудь может подсказать с чем это может быть связано? Неужели такое замедление может быть вызвано дополнительными операциями по подсчету индексов и разложению double??? (Что кстати не принесло ни ускорения ни замедления, то есть что без разложения и с 22 миллионами bank conflicts, что с разложением и 0 bank conflicts - одно время решения.)

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