sync (sm5 - asm)

Sinkronisasi grup utas atau pembatas memori.

sync[_uglobal|_ugroup][_g][_t]

 

Keterangan

Sinkronisasi memiliki opsi _uglobal, _ugroup, _g, dan _t.

Di shader piksel, hanya sync_uglobal yang diizinkan.

Dalam shader komputasi, (_uglobal atau _ugroup*) dan/atau _g harus ditentukan. _t bersifat opsional sebagai tambahan.

_uglobal

Pagar memori u# (UAV) global.

Semua pembacaan/penulisan memori u# sebelumnya oleh utas ini dalam urutan program dibuat terlihat oleh semua utas pada seluruh GPU sebelum memori u# berikutnya diakses oleh utas ini. Seluruh bagian GPU dari definisi digantikan oleh cakupan kurang dari global dalam satu kasus, dijelaskan di bawah ini.

Ini berlaku untuk semua memori UAV yang terikat pada tahap shader saat ini.

_uglobal tersedia di shader komputasi atau shader piksel.

Untuk UAV terikat apa pun yang belum dinyatakan oleh shader sebagai Globally Coherent, pagar memori _uglobal u# hanya memiliki visibilitas dalam grup utas shader komputasi saat ini untuk UAV tersebut, seolah-olah _ugroup alih-alih _uglobal. Masalah ini hanya berlaku untuk shader komputasi, karena shader piksel harus mendeklarasikan semua UAV sebagai Globally Coherent.

_ugroup

Pagar memori u# (UAV) cakupan grup u# (UAV).

Semua pembacaan atau penulisan memori u# sebelumnya oleh utas ini dalam urutan program dibuat terlihat oleh semua utas dalam grup utas sebelum memori u# berikutnya diakses oleh utas ini.

Ini berlaku untuk semua memori UAV yang terikat pada tahap shader saat ini.

_ugroup hanya tersedia di shader komputasi.

Jika _ugroup terekspos, untuk beberapa implementasi. Keuntungan menentukan _ugroup alih-alih _uglobal adalah bahwa operasi sinkronisasi dapat selesai lebih cepat.

Implementasi lain tidak membedakan _ugroup dari _uglobal, sehingga kedua operasi tersebut setara dan berperilaku seperti _uglobal. Aplikasi dapat menentukan niatnya dengan meminta cakupan sinkronisasi tersempit yang diperlukan.

Bahkan jika UAV tertentu dinyatakan sebagai Globally Coherent, operasi sinkronisasi _ugroup akan berfungsi lebih efisien pada UAV tersebut jika hambatan global tidak diperlukan.

_g

g# (grup utas berbagi memori) pagar.

Semua pembacaan atau penulisan memori g# sebelumnya oleh utas ini dalam urutan program dibuat terlihat oleh semua utas dalam grup utas sebelum memori g# berikutnya diakses oleh utas ini.

Ini berlaku untuk semua memori bersama g# grup utas saat ini.

_g hanya tersedia di shader komputasi.

_t

Sinkronisasi grup utas. Semua utas dalam satu grup utas (yang dapat berbagi akses ke sekumpulan ruang register bersama yang umum) akan dijalankan hingga titik di mana mereka mencapai instruksi ini sebelum utas apa pun dapat dilanjutkan.

_t tidak dapat ditempatkan dalam kontrol aliran dinamis, (cabang yang dapat bervariasi dalam grup utas), tetapi dapat hadir dalam kontrol alur yang seragam, di mana semua utas dalam grup memilih jalur yang sama.

_t hanya tersedia di shader komputasi.

Berikut ini adalah daftar varian 'sinkronisasi' shader komputasi.

  • sync_g
  • sync_ugroup*
  • sync_uglobal
  • sync_g_t
  • sync_ugroup_t*
  • sync_uglobal_t
  • sync_ugroup_g*
  • sync_uglobal_g
  • sync_ugroup_g_t*
  • sync_uglobal_g_t

*Varian dengan _ugroup mungkin tidak ditargetkan oleh pengkompilasi HLSL, sesuai diskusi sebelumnya di bagian _ugroup di atas.

Daftar varian sinkronisasi shader piksel hanya menyertakan sync_uglobal.

Pagar memori mencegah instruksi yang terpengaruh diurutkan ulang oleh kompilator atau perangkat keras di seluruh pagar.

Beberapa bacaan dari alamat yang sama dengan pemanggilan shader yang tidak dipisahkan oleh penghalang memori atau menulis ke alamat dapat diciutkan bersama-sama. Hal yang sama berlaku untuk penulisan. Akses yang dipisahkan oleh pembatas tidak dapat digabungkan atau dipindahkan melintasi penghubung.

Pagar memori tidak diperlukan untuk operasi atom ke alamat tertentu oleh utas yang berbeda agar berfungsi dengan benar. Pagar diperlukan ketika operasi atomik dan/atau beban/toko perlu disinkronkan sehubungan satu sama lain saat muncul di utas individual dari sudut pandang utas lain.

Di shader piksel, buang instruksi menyiratkan pagar sync_uglobal, dalam instruksi tersebut tidak dapat diurutkan ulang di seluruh pembuangan. sync_uglobal dalam piksel pembantu (yang hanya berjalan untuk mendukung turunan) atau piksel yang dibuang mungkin atau mungkin tidak memiliki pengaruh apa pun. Tidak diperbolehkan bagi pembantu atau piksel yang dibuang untuk menulis ke UAV jika, dalam kasus membuang, tulisan dikeluarkan setelah dibuang. Nilai yang dikembalikan dari UAV tidak diizinkan untuk berkontribusi pada perhitungan turunan. Oleh karena itu apakah sync_u dihormati atau tidak untuk piksel pembantu atau ketika dikeluarkan setelah buang moot.

cs_4_0 dan cs_4_1 mendukung instruksi ini.

Instruksi ini berlaku untuk tahap shader berikut:

Puncak Hull Domain Geometri Pixel Compute
X X

 

Karena UAV tersedia di semua tahap shader untuk Direct3D 11.1, varian sync_uglobal dari instruksi ini berlaku untuk semua tahap shader untuk runtime Direct3D 11.1, yang tersedia dimulai dengan Windows 8.

Puncak Hull Domain Geometri Pixel Compute
X X X X X X

 

Minimum Shader Model

Instruksi ini didukung dalam model shader berikut:

Shader Model Didukung
Model Shader 5 ya
Model Shader 4.1 tidak
Model Shader 4 tidak
Shader Model 3 (DirectX HLSL) tidak
Shader Model 2 (DirectX HLSL) tidak
Shader Model 1 (DirectX HLSL) tidak

 

Shader Model 5 Assembly (DirectX HLSL)