Будут ли потоки быстрее, если каждый получит свою собственную копию массива только для чтения - PullRequest
0 голосов
/ 01 января 2019

Если у меня есть несколько потоков, каждый из которых выполняет некоторые вычисления на основе объединенного массива только для чтения, будет ли быстрее, если я предоставлю каждому массиву отдельную копию этого массива.Например, предположим, что X - это массив с номерами от 0 до 1, а поток n вычисляет sin(nX) (для входа).Должен ли я создавать глубокие копии X для каждого потока?

Конечно, я мог бы просто попробовать это, но сначала мне нужно научиться реализовывать потоки.Я хочу сделать это в C ++, на случай, если это имеет значение

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Прежде всего, я хотел бы отметить, что это может быть хорошей задачей для CUDA.

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

Наконец, и это, пожалуй, самая важная, но тонкая часть: если у вас есть один блок памяти, тогда ЦПУ может скопировать его в свой кеш, что значительно повысит производительность.

0 голосов
/ 01 января 2019

Вообще говоря, нет никакого преимущества делать для каждого потока копии данных только для чтения.Каждый ЦП уже будет хранить свою собственную копию недавно использованной памяти в своем кеше, и если данные доступны только для чтения, кэш-память никогда не будет аннулирована операциями записи с других ЦП.

Историяможет немного отличаться, если доступ к предполагаемым данным только для чтения на самом деле включает скрытые операции записи, такие как обновление счетчиков ссылок, если вы используете shared_ptr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...