Загрузка кода на графический процессор (Intel Sandy Bridge) - PullRequest
6 голосов
/ 09 ноября 2011

Мой вопрос не о ГПГПУ. Я понимаю GPGPU довольно прилично, и это не то, что я ищу. Предполагается, что Intel Sand Bridge обладает некоторыми функциями, которые позволяют напрямую выполнять вычисления на графическом процессоре.

Это правда?

Код, который я планирую написать, будет находиться во встроенной сборке (в C). Существуют ли инструкции по сборке, которые вместо выполнения на ЦП выталкивают вещи в ГП?

Некоторая связанная с этим документация:

В PDF есть набор инструкций.

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Я не верю, что набор инструкций, подробно описанный в PDF-файле, который вы указали, можно напрямую использовать из "пространства пользователя". Это то, что драйвер GPU в вашей ОС может * использовать для реализации интерфейсов более высокого уровня, таких как OpenGL и DirectX.

Несмотря на это, графический процессор Sandy Bridge довольно слабый. Он не поддерживает OpenCL **, которая является стандартной библиотекой GPGPU, поддерживаемой ATI / nVidia. Я бы порекомендовал вам программировать эту библиотеку (на оборудовании, которое ее поддерживает), поскольку она гораздо более переносима (и более проста в использовании!), Чем пытаться программировать на голый металлический интерфейс, на который вы смотрите.


*: Возможно, хотя и маловероятно, что интерфейс отличается от описанного в этом PDF-документе, который используется в драйверах Intel с закрытым исходным кодом.

**: Не то же самое, что OpenGL, хотя он был разработан той же группой.

2 голосов
/ 09 ноября 2011

Отвечая на ваш первый вопрос: Нет, это не так.

Позвольте мне процитировать ресурсы, которые вы связали:

Блок обработки графики управляется ЦП черезпрямой интерфейс регистров ввода-вывода, отображаемых в память, и косвенно путем анализа команд, которые ЦП поместил в память.(Глава 2.2 из руководства по SB GPU)

Так что прямого выполнения кода GPU в контексте процессора нет.

Для вашего второго вопроса: «Передача данных в GPU»сделано с инструкцией mov.Target - это мемо-регистр ввода-вывода, источник которого вы хотите написать.Возможно, вам понадобится вставить некоторые "sfence" или аналогичные инструкции, чтобы избежать переупорядочения памяти.

...