Я не понимаю как упомянутые подходы к оптимизации преодолевают указанное ранее (этим же автором) ограничение. Как минимум, я думаю что считать моё утверждение «в корне не верным» всё же опроменчиво, тем более что оно упоминается многими авторами (в т.ч. в лекциях).
PS: Возможно Unified Memory позволяет обойти это ограничение, но это нужно отдельно исследовать
Я не думаю что в мои личные обязянности входит фильтрация пирацкого контента вместо google. Я случайно нашёл эту книгу по ключевым словам и прикрепил на неё ссылку взяв её прямо из поиска. Кроме того данная цитата доступна и в google books, но прямая ссылка мне показалась удобнее.
Если ваша религия требует от вас заниматься копирастом и превентивно обвинять всех в воровстве, я вас прощаю.
Возможно мы неверно понимаем друг друга, когда я утверждал, что «вычисления общего назначения на GPU имеют ряд ограничений ... они не могут напрямую ссылаться на данные в памяти компьютера», я имел ввиду тот факт, что kernel функции которые непосредсвенно выполняются на GPU не могут прямо ссылатся и использовать память компьютера, и я продолжаю находить подтверждение этому.
Вот цитата из книги Professional CUDA C Programming (2014 года):
The following restrictions apply for all kernels:
Позвольте, но те оптимизации о которых говорится в мануале:
As you can see in the figure, pinned memory is used as a staging area for transfers from the device to the host. We can avoid the cost of the transfer between pageable and pinned host arrays by directly allocating our host arrays in pinned memory.
И вот сопроводительная картинка
не отменяют того факта что вам нужно копировать данные из RAM в Video RAM, по этому, я думаю утверждение о том, что GPU не ссылается на RAM напрямую остаётся верным.
Вы ведь не можете отдать инструкцию именно GPU что бы оно пошло, посмотрело в RAM, и тем более, что бы оно туда записало что либо.
И вот тоже док с сайта nVidia , одно из указанных ограничений это: No CPU main memory access; no disk access .
Смотри, новое выражение, полученное в следствии преобразования (упрощения) исходного не обязано иметь более очевидный смысл чем исходное. Но в данном конкретном случае, я думаю можно считать, что 1 — это 100%, это исходная производительность, выраженная в процентах. В свою очередь t-TPL/t-ILGPU это новая производительность в процентах, соответственно их разница отображает на сколько процентов производительность изменилась
Спасибо за комментарий. Возможно вы правы, но тогда вам следует оставить ссылку в подтверждение сказанного. Моё же утверждение было основано на схеме которую я видел во многих источниках, а также на документации в Alea GPU: In a typical PC or compute cluster node, the memories of the CPU and GPU are physically distinct and connected by the PCI express bus. Data that is shared between the CPU and GPU must thus be allocated in both memories, and copied between them. Usually, this has to be done by the programmer, increasing the complexity of GPU programs.
Привет. Спасибо за комментарий.
Под производительностью я понимаю отношение проделанной работы ко времени затраченной на её выполнение.
Тогда производительность для TPL = 1 / t-TPL, а производительность для ILGPU = 1 / t-ILGPU.
Относительный выигрыш в производительности будет разностью начального и конечного значений производительности выраженная в процентах изначального значения:
100 * (1/t-ILGPU — 1/t-TPL) / (1/TPL) % = 100 * (1/0.41 — 1/0.74) / (1/0.74) % = 80%
Да, портмоне сработало.
Liqpay говорит что превишен лимит. В чём дело?
Шаг первый: „cuda kernels” „restrictions” „functions”
Шаг второй: видишь фразу „CUDA KERNELS ARE FUNCTIONS WITH RESTRICTIONS”
Шаг третий: ищешь эту фразу „CUDA KERNELS ARE FUNCTIONS WITH RESTRICTIONS”