Здесь, видимо, произошла некоторая путаница в терминологии. В Direct3D у вас есть нити и группы потоков. «Рабочий элемент» и «рабочая группа» обычно встречаются в терминологии OpenCL, где «рабочий элемент» — это то, что нить находится в Direct3D, а «рабочая группа» соответствует Direct3D. группа потоков. groupshared
memory is memory accessible to all threads that are part of the same thread group.
Непонятно, что именно вы подразумеваете под «непосредственным манипулированием кешем L1». Кэш — это аппаратный компонент, который используется для прозрачной оптимизации доступа к памяти. Слово «прозрачный» здесь имеет решающее значение. Хотя на аппаратном уровне кэши обязательно содержат некоторую форму памяти, они, как правило, не являются явно «доступными» как область хранения. У вас не может быть указателя, указывающего на кеш. У вас может быть указатель, указывающий на память. Доступ к памяти обычно осуществляется через кеш, т. е. любой запрос к памяти будет передан в следующий кеш, который затем может проверить, может ли он обслужить запрос напрямую или должен идти дальше по иерархии памяти. Кэш – это нечто большее, чем просто память, которую он использует для кэширования данных. Кэш также содержит дополнительную логику для управления кэшем поверх самого хранилища. Кэши являются неявными по своей природе. Когда вы манипулируете памятью, вы, как правило, также заставляете некоторые кэши манипулировать своей памятью. Но, как правило, вы не можете «манипулировать» кешем напрямую в смысле явного определения того, что и где хранить в кеше. Как только вы можете явно указать на него и читать/записывать в него/из него, он перестает быть кешем и становится просто своего рода хранилищем.
При этом, groupshared
memory is generally located in fast on-chip storage just like caches are. The whole point of groupshared
Память заключается в том, чтобы воспользоваться знанием о том, что определенные потоки находятся в одной и той же части чипа, чтобы позволить им взаимодействовать быстрее. А на некотором оборудовании (например, на большинстве последних архитектур NVIDIA) groupshared
memory and the L1 cache will actually use the same physical memory. However, that just means that one part of that memory is used as "normal" memory, accessed directly via addressing through some load-store-unit, while another part is used by the L1 cache to cache stuff…