API grafik moden. Apple Metal API: apakah muslihatnya?

Satu kejutan menanti kita semua di WWDC 2014: pengumuman API grafik 3D baharu yang dipanggil Metal. Tetapi kali ini kami tidak berurusan dengan API peringkat tinggi baharu di atas OpenGL ES (seperti yang berlaku dengan Scene Kit), tetapi dengan API peringkat rendah baharu untuk pemaparan dan pengkomputeran yang boleh berfungsi sebagai pengganti OpenGL dalam permainan. Oleh menurut Apple Logam boleh sehingga 10 kali lebih pantas daripada OpenGL ES (lebih tepat - ia boleh menjana panggilan cabutan [ lukis panggilan; pemindahan data ke GPU] adalah 10 kali lebih pantas) dan hanya tersedia pada peranti iOS dengan pemproses generasi terkini A7.

Pengumuman ini mencetuskan gelombang perbincangan dan kontroversi baharu tentang keperluan untuk API grafik baharu, yang sepatutnya (atau tidak - siapa tahu) menggantikan OpenGL. Siaran yang kami bawa kepada perhatian anda tidak berniat untuk mengambil bahagian dalam perbincangan ini - tujuannya adalah untuk menerangkan bagaimana Metal berbeza daripada OpenGL ES, yang menggantikannya. Untuk memahami apa yang istimewa (atau, sebaliknya, tiada yang istimewa) tentang API Logam, kita perlu melihat sedikit di bawah tudung API grafik dan GPU.

Cara GPU dan API Grafik Berfungsi
Pembaca naif mungkin menganggap bahawa panggilan API secara langsung melakukan sesuatu pada GPU atau membenarkan sesuatu berlaku di dalam GPU. Pembaca yang lebih naif akan menganggap bahawa GPU selesai memproses panggilan ini apabila API mengembalikan hasil. Kedua-dua kenyataan ini jauh dari realiti. Jika pemandu melaksanakan perintah rendering sebaik sahaja ia dikeluarkan dan menunggu proses rendering selesai sebelum mengembalikan keputusan kepada panggilan API, maka CPU mahupun GPU tidak boleh berfungsi dengan cekap kerana salah satu pemproses akan sentiasa disekat dalam nikmat kepada yang lain.

Untuk penambahbaikan mudah dalam Operasi GPU proses ini harus dijalankan secara tidak segerak; maka GPU tidak akan menyekat CPU dan panggilan API akan mengembalikan hasil hampir serta-merta. Dalam kes ini, GPU mungkin tidak digunakan pada 100%, kerana ia mungkin perlu menunggu panggilan pemaparan baharu (= permulaan bingkai) daripada CPU, manakala panggilan kepada perintah lain akan menunggu untuk yang sebelumnya selesai. Ini menjadi sebab mengapa kebanyakan pemacu grafik mengumpul segala-galanya lukis panggilan(dan tugas lain yang perlu dilakukan pada GPU - seperti menukar keadaan) untuk memaparkan keseluruhan bingkai sebelum menghantarnya ke GPU. Arahan penimbal ini kemudiannya akan dihantar semula selepas arahan untuk melukis bingkai seterusnya diterima, memastikan GPU digunakan secekap mungkin. Sudah tentu, ini akan menambah satu bingkai kelewatan: semasa CPU membuat kerja untuk bingkai semasa, bingkai sebelumnya akan dipaparkan pada GPU. Malah, adalah mungkin untuk menimbal lebih daripada satu bingkai dan dengan itu mencapai kadar bingkai yang lebih tinggi - dengan kos kependaman yang lebih besar.

Satu lagi kesilapan dalam andaian naif kami ialah andaian tentang apa yang dilakukan oleh panggilan perubahan keadaan.

Jadi kami telah mempelajari sekurang-kurangnya dua perkara penting tentang perkara yang berlaku di sebalik tabir. kerjasama OpenGL dengan GPU moden: menukar keadaan boleh menjadi rumit jika diperlukan gabungan baru keadaan dan semua operasi pada GPU akan ditangguhkan untuk jangka masa tertentu.

Dalam aplikasi, satu aliran arahan sebenar untuk satu bingkai yang perlu dilaksanakan pada GPU dijana dan dihantar ke GPU secara serentak (sebenarnya, semuanya lebih rumit sedikit, tetapi mari kita tidak pergi lebih mendalam lagi).

Anda boleh membaca lebih lanjut tentang cara saluran paip grafik komputer moden berfungsi dalam satu siri artikel oleh Fabian Giesens - "A trip down the Graphics Pipeline."

Kenapa yang lain model program mungkin ada kelebihan
Seperti yang telah anda lihat, sejumlah besar kerumitan dan helah licik tersembunyi daripada pengaturcara (mungkin terdapat lebih banyak daripada yang saya nyatakan), yang menyembunyikan apa yang berlaku secara langsung. Sesetengah daripada mereka menjadikan kehidupan pembangun mudah lebih mudah, yang lain memaksanya mencari cara untuk mengecoh pemandu atau "menggali" ke tepi kesan sampingan Panggilan API berfungsi.

Sesetengah API grafik hari ini cuba untuk mengalih keluar kebanyakan helah ini, mendedahkan "kerumitan" yang mereka sembunyikan - dan dalam beberapa kes menyerahkannya kepada program untuk memikirkan semuanya. masalah berkaitan. API grafik PS3 pergi ke arah ini, AMD juga akan menyertainya dengan Mantle, dan DirectX 12 dan Apple Metal yang akan datang juga akan pergi ke sana.

Apa yang telah berubah?
Penampan arahan kini dibuka dan aplikasi mesti mengisi penimbal ini dan menghantarnya ke baris gilir arahan, yang akan melaksanakan penimbal ini dalam susunan yang diberikan pada GPI - dengan cara ini aplikasi akan mempunyai kawalan penuh atas tugas yang dihantar kepada GPU dan tentukan bilangan bingkai kependaman untuk ditambah (menambah kependaman tetapi meningkatkan penggunaan GPU). Perintah penimbal pada GPU dan menghantarnya secara tak segerak ke bingkai seterusnya mesti dilaksanakan oleh aplikasi itu sendiri.

Memandangkan adalah jelas bahawa penimbal ini tidak akan dilaksanakan dengan serta-merta (iaitu, pada masa penciptaan) dan berbilang penimbal boleh dibuat dan beratur untuk pelaksanaan dalam susunan tertentu, aplikasi mampu membinanya merentas berbilang benang secara selari. Ia juga menjadi lebih jelas kepada pengaturcara yang keputusan pengiraan sudah tersedia dan yang tidak.

Perubahan keadaan kini disusun ke dalam objek keadaan yang boleh ditogol, sementara mencipta objek ini akan menjadi lebih mahal. Contohnya, MTLRenderPipelineState mengandungi shader dan semua keadaan yang dilaksanakan oleh tampalannya.

Satu lagi kelebihan API baharu ialah ia tidak perlu memikul beban keserasian dengannya versi sebelumnya dan oleh itu tidak akan begitu konservatif.

Terdapat juga nuansa dalam mengasah untuk A7 - terima kasih kepadanya, Metal disesuaikan untuk bekerja pada sistem dengan ingatan bersama, iaitu CPU dan GPU boleh terus mengakses data yang sama tanpa perlu memindahkannya bas PCI. Metal memberikan program akses terus kepada penimbal daripada CPU, dan tanggungjawab untuk memastikan bahawa data ini tidak digunakan secara serentak oleh GPU terletak pada bahu pengaturcara. Ciri berguna ini membolehkan anda mencampurkan produk pengiraan GPU dan CPU.

Dan bagaimana ia 10 kali lebih cepat?
Setiap panggilan cabutan memerlukan sedikit masa pada CPU dan sedikit masa pada GPU. API Logam mengurangkan masa CPU dengan memudahkan pemantauan keadaan dan dengan itu mengurangkan bilangan semakan ralat daripada pemacu untuk memastikan gabungan keadaan adalah betul. Keadaan pra-pengiraan juga membantu: anda bukan sahaja boleh menyemak ralat semasa binaan, tetapi menukar keadaan itu sendiri akan memerlukan lebih sedikit panggilan API. Keupayaan untuk membina penimbal arahan secara selari meningkatkan lagi bilangan panggilan cabutan apabila aplikasi terikat kepada CPU.

Tetapi rendering GPU sebaliknya tidak menjadi lebih pantas, aplikasi yang membuat panggilan seri sangat sedikit untuk jerat besar ( mesh- sebahagian daripada model yang terdiri daripada bucu objek] tidak akan menerima apa-apa faedah daripada bertukar kepada Logam.

Bolehkah perkara yang sama dilakukan pada OpenGL?
Di GDC 14 terdapat persembahan yang sangat baik tentang "Mendekati Overhed Pemandu Sifar" oleh Cass Everitt, John McDonald, Graham Sellers dan Tim Foley. Idea utama adalah untuk mengurangkan kerja pemandu dalam OpenGL dengan meningkatkan jumlah kerja yang dilakukan dalam panggilan cabutan dan menggunakan objek GL baharu dan lebih sedikit panggilan GL untuk meningkatkan kecekapan.

Idea ini dan idea lain akan memerlukan pengembangan lanjut OpenGL dan versi baharu API ini, tetapi sebahagian besar daripada ini boleh dipindahkan ke OpenGL ES. Apa yang kita akan hilang ialah keupayaan untuk mengurus penimbal arahan secara langsung, dengan semua kebaikan dan keburukannya.

Apakah kemungkinan untuk melihat perkara ini pada masa hadapan? Kerana sokongan keserasian ke belakang, kita hanya boleh berharap untuk penampilan set fungsi tertentu yang boleh dipanggil " kernel moden", tetapi kemungkinan besar ia perlu dibuat serasi dengan segala-galanya hingga ke fungsi glBegin() asal. Had ini akan kekal berkuat kuasa sepanjang potensi masa depan OpenGL dan akan mengehadkan evolusinya, menjadikan alternatif seperti API Logam semakin diutamakan...

Tag:

  • API Logam
  • epal
  • opengl
Tambah tag

API mentakrifkan kefungsian yang disediakan oleh program (modul, pustaka), manakala API membolehkan anda membuat abstrak daripada cara sebenar fungsi ini dilaksanakan.

Jika program (modul, perpustakaan) dianggap sebagai kotak hitam, maka API ialah satu set "pemegang" yang tersedia kepada pengguna daripada kotak ini, yang dia boleh pusing dan tarik.

Komponen perisian berinteraksi antara satu sama lain melalui API. Dalam kes ini, komponen biasanya membentuk hierarki - komponen peringkat tinggi menggunakan API komponen peringkat rendah, dan mereka, seterusnya, menggunakan API komponen peringkat rendah.

Protokol pemindahan data dibina berdasarkan prinsip ini. Protokol Internet standard (model rangkaian OSI) mengandungi 7 lapisan (daripada tahap fizikal menghantar paket bit ke protokol aplikasi seperti HTTP dan IMAP). Setiap lapisan menggunakan kefungsian lapisan pemindahan data sebelumnya dan, seterusnya, menyediakan kefungsian yang diperlukan kepada lapisan seterusnya.

Adalah penting untuk ambil perhatian bahawa konsep protokol mempunyai makna yang hampir dengan konsep API. Kedua-duanya adalah abstraksi fungsi, hanya dalam kes pertama kita bercakap tentang pemindahan data, dan dalam kedua kita bercakap tentang membina aplikasi komputer.

API pustaka fungsi dan kelas termasuk penerangan tandatangan Dan semantik fungsi.

Antara Muka Pengaturcaraan Aplikasi (API) antara muka perisian interaksi antara sistem, membolehkan:

  • Dapatkan akses kepada perkhidmatan perniagaan perusahaan
  • Bertukar maklumat antara sistem dan aplikasi
  • Permudahkan interaksi antara syarikat, rakan kongsi, pembangun dan pelanggan

Strategi API terbuka

Strategi API termasuk:

  • Pembangunan produk perniagaan berdasarkan API sedia ada
  • Menyediakan perkhidmatan dalaman kepada pemaju
  • Model pengewangan API untuk membina interaksi berbilang saluran dan meningkatkan keuntungan

Pelaksanaan konsep Open API membantu mengubah perniagaan, mengintegrasikannya ke dalam ekosistem projek fleksibel pemain pasaran, mewujudkan keadaan untuk penjanaan idea baharu yang berterusan dan penciptaan nilai tambahan apabila mengurus tatasusunan data korporat.

Pasaran untuk penyelesaian penyepaduan sedang berkembang dalam konteks evolusi API - daripada EDI dan SOAP kepada Web 2.0, yang memulakan era API awam. Bilangan antara muka sedemikian dalam 3 tahun akan datang mungkin meningkat lebih daripada 50 kali ganda dan mencapai 1 juta. Ini disebabkan saluran omnic: saluran interaksi dengan pelanggan mesti berubah bersama-sama dengan mereka. Pertumbuhan berterusan dalam bilangan pengguna dan jumlah data telah membawa kepada kemunculan ekonomi API, yang membantu mencipta model perniagaan yang inovatif untuk menggunakan aset dan perkhidmatan perusahaan berdasarkan antara muka terbuka.

Tandatangan fungsi

Tandatangan fungsi- sebahagian daripada pengisytiharan fungsi umum yang membolehkan penyiar mengenal pasti fungsi antara lain. Bahasa pengaturcaraan yang berbeza mempunyai idea yang berbeza tentang tandatangan fungsi, yang juga berkait rapat dengan keupayaan kelebihan beban dalam bahasa ini.

Kadang-kadang mereka membezakan tandatangan panggilan Dan tandatangan pelaksanaan fungsi. Tandatangan panggilan biasanya disusun daripada struktur sintaksis panggilan fungsi, dengan mengambil kira tandatangan skop fungsi yang diberikan, nama fungsi, urutan jenis argumen sebenar dalam panggilan, dan jenis hasil. Tandatangan pelaksanaan biasanya termasuk beberapa elemen daripada struktur sintaksis pengisytiharan fungsi: penentu skop fungsi, namanya dan urutan jenis hujah formal.

Contohnya, dalam bahasa pengaturcaraan C++ fungsi mudah dikenali secara unik oleh pengkompil dengan namanya dan urutan jenis hujahnya, yang membentuk tandatangan fungsi dalam bahasa ini. Jika fungsi ialah kaedah kelas tertentu, maka nama kelas juga akan disertakan dalam tandatangan.

Ia juga harus diperhatikan bahawa pengaturcara selalunya mempunyai beberapa API yang berbeza untuk digunakan untuk mencapai hasil yang sama. Selain itu, setiap API biasanya dilaksanakan dengan menggunakan API komponen perisian tahap abstraksi yang lebih rendah.

Contohnya: untuk melihat baris “Hello, world!” dalam penyemak imbas. anda hanya perlu mencipta dokumen HTML dengan tajuk yang minimum dan kandungan ringkas yang mengandungi baris ini. Apakah yang berlaku apabila penyemak imbas membuka dokumen ini? Program penyemak imbas akan menghantar nama fail (atau deskriptor fail yang sudah terbuka) kepada pustaka yang memproses dokumen HTML, yang seterusnya, menggunakan API sistem operasi membaca fail ini, dan memahami strukturnya, memanggil, melalui API perpustakaan primitif grafik standard, operasi seperti "kosongkan tetingkap", "tulis dalam fon yang dipilih Hello, dunia!", dengan operasi ini perpustakaan grafik primitif akan menghubungi pustaka antara muka tetingkap dengan permintaan yang sepadan, sudah pun pustaka ini akan menghubungi API sistem pengendalian dengan permintaan seperti "letakkan ini dalam penimbal kad video saya."

Lebih-lebih lagi, pada hampir setiap peringkat sebenarnya terdapat beberapa kemungkinan API alternatif. Sebagai contoh: kita boleh menulis dokumen sumber bukan dalam HTML, tetapi dalam LaTeX, dan kita boleh menggunakan mana-mana pelayar untuk paparan. Pelbagai pelayar, secara amnya, menggunakan perpustakaan HTML yang berbeza, dan, tambahan pula, keseluruhannya boleh (secara amnya) disusun menggunakan perpustakaan primitif yang berbeza dan pada sistem pengendalian yang berbeza.

Kesukaran utama pelbagai peringkat sedia ada sistem API, oleh itu, adalah:

  • Kesukaran dalam porting kod program dari satu sistem API ke sistem lain (contohnya, apabila menukar OS);
  • Kehilangan kefungsian apabila bergerak dari tahap yang lebih rendah ke tahap yang lebih tinggi. Secara kasarnya, setiap "lapisan" API dicipta untuk memudahkan pelaksanaan beberapa set standard operasi. Tetapi pada masa yang sama, ia menjadi sangat sukar atau menjadi pada asasnya mustahil untuk melaksanakan beberapa operasi lain yang disediakan oleh tahap API yang lebih rendah.

Jenis API asas

API Dalaman

  • Akses API terhad kepada pembangun dalaman sahaja
  • Aplikasi ditujukan kepada pekerja perusahaan

Pemacu Perniagaan:

  • Konsistensi pembangunan
  • Pengurangan kos
  • Peningkatan kecekapan pembangunan

API rakan kongsi

  • API hanya tersedia kepada kumpulan rakan kongsi perniagaan yang terhad
  • Aplikasi bertujuan untuk pengguna akhir dan pengguna perniagaan

Pemacu Perniagaan:

  • Automasi proses pembangunan
  • Pembangunan perkongsian
  • Mengoptimumkan proses interaksi dengan rakan kongsi

API Awam

Akses diberikan kepada mana-mana pembangun luaran Aplikasi ditujukan kepada pengguna akhir

Pemacu Perniagaan:

  • Pembangunan perkhidmatan baharu
  • Pembangunan Ekosistem
  • Interaksi saluran omni

API yang paling terkenal

API sistem pengendalian

API GUI

  • Direct3D (sebahagian daripada DirectX)
  • DirectDraw (sebahagian daripada DirectX)

lebih lagi darjat tinggi pemampatan daripada imej dengan kandungan rendah unsur tersebut (contohnya, graf, rajah, tekstur mudah). Imej resolusi tinggi boleh dimampatkan pada nisbah mampatan tinggi tanpa menjejaskan kualitinya. Untuk mengekalkan kualiti tinggi untuk imej resolusi rendah, nisbah mampatan yang terhasil mestilah jauh lebih rendah. Imej dengan kedalaman warna yang tinggi (seperti imej Truecolor 24-bit) dimampatkan dengan lebih cekap daripada imej dengan bit yang lebih sedikit bagi setiap piksel (seperti skala kelabu 8-bit).

Kebanyakan kaedah mampatan lossy lain adalah bersifat simetri. Ini bermakna bahawa ia adalah berdasarkan penggunaan urutan tertentu operasi, yang dilakukan dalam susunan terbalik semasa membongkar. Memampatkan dan menyahmampat data mengambil masa yang lebih kurang sama. Pemampatan fraktal ialah proses yang tidak simetri; pemampatan mengambil masa lebih lama daripada penyahmampatan. Ia berikutan bahawa data mampat fraktal berguna dalam kes di mana fail imej sering dinyahmampat tetapi tidak pernah dimampatkan, contohnya, apabila menyimpan imej dalam pangkalan data grafik pada CD-ROM.

Beberapa bentuk yang paling biasa dibincangkan secara ringkas di bawah:

API GUI moden

Pembangunan kompleks moden program grafik, terutamanya aplikasi 3D, berkait rapat dengan penggunaan API

(Antara Muka Pengaturcaraan Aplikasi).

API ialah satu set perpustakaan yang mewakili antara muka sedia untuk program berfungsi dengan pemecut 3D. Pada masa ini, serupa di-

Terdapat banyak antara muka, tetapi semuanya boleh dibahagikan kepada dua kelas: universal dan khusus.

API Universal adalah biasa kepada semua pemecut 3D dan sokongan pecutan perkakasan kerana API ini adalah tanggungjawab pemecut itu sendiri. Pertama sekali, kita harus menyerlahkan Microsoft DirectX dan OpenGL. Kedua-duanya digunakan terutamanya dalam program animasi komputer.

API khusus direka bentuk untuk berfungsi dengan pemecut grafik yang dibina pada set cip 3D tertentu; yang paling terkenal di kalangan mereka ialah Glide API - antara muka untuk bekerja dengan cip VooDoo®; Metal - untuk cip Savage3D, dsb. Program yang ditulis menggunakan API khusus berfungsi hanya pada pemecut yang API ini dicipta. Kebanyakan API khusus hanya menyediakan antara muka pengaturcaraan peringkat rendah, tetapi baru-baru ini, baharu Versi DirectX termasuk antara muka sokongan peringkat tinggi seperti DirectX untuk VisualBasic, yang menyediakan sokongan bahasa untuk aplikasi multimedia yang ditulis dalam persekitaran VisualBasic Pengaturcaraan visual asas.

API Microsoft DirectX

Microsoft DirectX API ialah satu set antara muka pengaturcaraan yang digunakan untuk menyelesaikannya pelbagai tugas: daripada kawalan perisian perkakasan komputer kepada pembangunan aplikasi multimedia menggunakan pelbagai jenis maklumat, dan mencipta dunia maya.

Matlamat utama yang dikejar oleh Microsoft semasa mencipta antara muka DirectX adalah untuk menghidupkan komputer yang beroperasi sistem Windows, V platform universal untuk aplikasi yang kaya dengan elemen multimedia: grafik berwarna penuh, serpihan video

tami, animasi 3D dan bunyi stereo. Dibina terus ke dalam kernel OS Antara muka Windows DirectX ialah perkhidmatan bersepadu

Windows 98 dan Windows 2000, serta Internet Microsoft Penjelajah. Komponen

DirectX juga boleh dimuat turun secara automatik ke komputer anda apabila memasang permainan moden dan aplikasi multimedia yang dibangunkan untuk Windows 95. Untuk pembangun, DirectX menyediakan satu set antara muka perisian, penggunaannya membolehkan anda menyelesaikan dua masalah utama.

Pertama, DirectX menukar aplikasi yang dibangunkan dengannya menjadi program yang serasi dengan mana-mana versi Windows dan berjalan pada mana-mana komputer di mana sistem pengendalian ini dipasang, tanpa mengira jenis yang digunakan perisian. Di mana aplikasi yang serupa memanfaatkan sepenuhnya keupayaan teknikal komputer, memberikan prestasi tertinggi. Ini dicapai melalui perkhidmatan yang disediakan oleh dua utama komponen DirectX: antara muka peringkat rendah termasuk dalam Komposisi DirectX Asas, dan antara muka peringkat tinggi yang membentuk DirectX Media.

Kedua, DirectX memberi pembangun peluang untuk mengabstrak daripada jenis penyesuai paparan, kad bunyi atau pemecut 3D tertentu dan menumpukan pada logik program itu sendiri.

Yayasan DirectX menyediakan pembangun dengan satu set antara muka pengaturcaraan peringkat rendah yang menyediakan capaian yang cekap kepada semua keupayaan komputer yang menjalankan OS Windows, dilaksanakan pada peringkat perkakasan– pemecut 3D, kad bunyi, peranti input maklumat. Sebelum kemunculan DirectX, pembangun yang mencipta aplikasi multimedia untuk platform Windows perlu mengkonfigurasi program mereka untuk berfungsi dengan pelbagai jenis peranti dan konfigurasi. Isu ini kini telah diselesaikan. DirectX Foundation mengandungi komponen yang dikenali sebagai Hardware Abstraction Layer (HAL), yang menggunakan perisian

pemacu untuk memastikan interaksi antara perisian dan perkakasan. Akibatnya, pembangun boleh mencipta versi tunggal aplikasi menggunakan antara muka DirectX tanpa perlu risau tentang memastikan ia berjalan pada konfigurasi perkakasan tertentu. DirectX secara automatik mengesan keupayaan teknikal komputer anda dan menetapkan parameter yang sesuai. DirectX juga membenarkan anda menjalankan aplikasi multimedia yang memerlukan sokongan perkakasan yang tidak tersedia komputer ini. Dalam kes ini, ia dicontohi dalam perisian oleh komponen yang dipanggil Hardware Emulation Layer (HEL) dan menyediakan pemacu perisian yang bertindak sebagai peranti yang hilang.

DirectX Media berada di atas Yayasan DirectX dan menyediakan perkhidmatan peringkat tinggi - sokongan animasi, output penstriman (keupayaan untuk menghantar dan melihat maklumat audio dan video semasa ia dimuat turun dari Internet) dan interaktiviti. Penyepaduan automatik perkhidmatan peringkat rendah yang disediakan oleh DirectX Foundation dan perkhidmatan peringkat tinggi yang disediakan oleh DirectX Media memudahkan proses mencipta dan memainkan elemen multimedia, membolehkan pembangun memasukkannya ke dalam aplikasi dan halaman Web mereka, dengan itu menyediakan kandungan multimedia interaktif yang tidak tersedia sebelum ini. Di samping itu, DirectX Media membantu menyelesaikan masalah menyelaraskan pelbagai jenis kesan multimedia, menjadikannya lebih mudah untuk menyegerakkan main semula mereka. Sebagai tambahan kepada dua komponen teras ini, Microsoft DirectX juga termasuk komponen peringkat tinggi yang menyediakan fungsi multimedia untuk aplikasi Web. Ini termasuk: NetMeeting - alat untuk mengatur perbincangan kumpulan dalam talian dan Windows Media Player - alat untuk menghantar kandungan multimedia melalui Internet. Mari kita pertimbangkan secara ringkas komponen utama

Komponen DirectX Foundation. Ini termasuk Microsoft DirectDraw, Direct3D(Mod Segera dan Kekal), DirectInput, DirectMusic, DirectSound,

DirectSound 3D dan DirectPlay. Antara muka pengaturcaraan peringkat sistem ini

menyediakan akses yang berkesan kepada pelbagai peranti komputer dan menyediakan kebebasan aplikasi perkakasan sebenar, menghapuskan masalah pemasangan pemacu dan ketidakserasian platform perkakasan dan perisian.

Microsoft Direct3D ialah antara muka untuk bekerja dengan kad video 3D. Seni bina Direct3D ditunjukkan dalam Rajah 1.5.

Aplikasi Win32

Direct3D menyokong dua mod pengendalian - Mod Segera dan Mod Tertahan. Dalam Mod Segera, Direct3D menyediakan pembangun dengan sokongan perkakasan untuk permainan dan aplikasi multimedia dalam persekitaran Microsoft Windows. Ia membolehkan anda mencapai kebebasan perkakasan, menyokong penimbalan Z boleh tukar dan seni bina pemproses Intel MMX. Dalam mod ini, primitif grafik asas dilaksanakan secara langsung, tanpa menggunakan penimbal pelaksanaan.

Mod Dikekalkan memudahkan untuk mencipta dan menghidupkan dunia 3D dengan menyokong dua ciri baharu: interpolator animasi dengan adunan warna, pergerakan objek licin dan berbilang pelbagai jenis transformasi, serta pengisian berurutan struktur mesh 3D

objek (jerat), membenarkan pemuatan beransur-ansur dari pelayan jauh. Ini membolehkan pembangun menggunakan grafik 3D dengan berkesan tanpa perlu memanipulasi struktur objek secara langsung pada tahap yang rendah.

Perlu diingatkan bahawa aplikasi Direct3D berkomunikasi dengan peranti grafik dengan cara yang sama, tanpa mengira mod. Mereka mungkin atau mungkin tidak menggunakan emulasi perisian sebelum mengakses HAL. Pada hakikatnya, Direct3D disepadukan rapat dengan komponen DirectDraw, jadi dalam Rajah 1.2 lapisan abstraksi perkakasan HAL ditetapkan DirectDraw/Direct3D HAL. Direct3D Z-penampan dan menjadikan permukaan, manakala DirectDraw memaparkannya secara langsung. Antara muka Direct3D COM ialah antara muka kepada DirectDraw.

DirectDraw ialah pengurus pengurusan memori yang menyediakan set teras ciri untuk aplikasi grafik dan multimedia yang sedang berjalan platform Windows. Tidak seperti grafik Windows tradisional, DirectDraw menggunakan akses terus untuk memaparkan memori dan peranti grafik, sambil menyediakan keserasian penuh dengan aplikasi Windows.

Rajah 1.6 menunjukkan interaksi antara DirectDraw, komponen kernel sistem pengendalian GDI (Antara Muka Peranti Grafik), Lapisan Abstraksi Perkakasan (HAL), dan lapisan emulasi perkakasan

(Lapisan Emulasi Perkakasan, HEL). Seperti yang anda lihat, DirectDraw wujud secara bebas

mo daripada GDI dan kedua-dua antara muka mempunyai keupayaan untuk mengakses terus peranti grafik melalui lapisan bebas perkakasan. Tidak seperti GDI, DirectDraw tidak menggunakan ciri perkakasan. Jika peranti tertentu tidak menyokong fungsi yang diperlukan, DirectDraw cuba menirunya menggunakan HEL. DirectDraw menyokong pelbagai jenis penyesuai paparan - daripada monitor mudah kepada kompleks peranti profesional. Bekerja pada tahap permukaan grafik, DirectDraw berfungsi

asas untuk peringkat tinggi fungsi grafik dan antara muka dan membolehkan anda menggunakan sama ada keupayaan perkakasan yang disediakan oleh peranti atau menirunya jika perlu.

Aplikasi Win32

Lapisan tion (HEL)

Lapisan Abstraksi

Kad video

Rajah 1.6 – Integrasi DirectDraw ke dalam sistem

DirectInput ialah antara muka untuk pelbagai peranti input maklumat - papan kekunci, tetikus, kayu bedik, serta peranti dengan maklum balas paksa. Berbanding dengan fungsi standard konvensional, antara muka ini menyokong bilangan yang lebih besar peranti dan memberikan respons yang lebih pantas kepada permintaan. Dengan bekerja secara langsung dengan pemacu peranti, DirectInput tidak menggunakan sistem pemesejan Microsoft Windows.

Ciri DirectInput baharu termasuk senarai peranti yang disokong, termasuk: pad permainan, pesawat

kuk penerbangan, topi keledar realiti maya(penutup kepala realiti maya)

Dan peranti dengan maklum balas, memberikan kesan seperti getaran, rintangan terhadap pergerakan, dsb., yang penggunaannya menjadikan permainan moden lebih realistik.

DirectMusic ialah komponen baharu keluarga teknologi DirectX, yang merupakan cangkang perisian untuk mencipta templat muzik dan arahan untuk bertindak balas terhadap tindakan pengguna. Ini membolehkan pembangun membuat muzik latar dalam masa nyata berdasarkan algoritma yang dinyatakan dalam halaman Web atau aplikasi multimedia. DirectMusic menyediakan pelaksanaan penuh standard Downloadable Sounds (DLS), membenarkan pembangun mencipta templat muzik yang boleh dimainkan pada hampir mana-mana platform perkakasan. DirectMusic termasuk DirectMusic Producer - editor bersepadu yang membolehkan anda bekerja dengan semua objek DirectMusic: gaya, templat, alat DLS, dsb.

DirectPlay ialah antara muka perisian peringkat tinggi antara program aplikasi dan perkhidmatan komunikasi yang memudahkan modem atau rangkaian tempatan. DirectPlay termasuk satu set utiliti yang membolehkan pemain mencari rakan kongsi dan tapak Web, menyokong aliran maklumat antara pelayan, dan set fungsi yang sama disokong untuk mana-mana pengguna aplikasi, tanpa mengira jenis perkhidmatan dalam talian atau protokol.

DALAM Selain antara muka Yayasan DirectX peringkat rendah, DirectX termasuk set antara muka pengaturcaraan peringkat lebih tinggi

dan komponen DirectX Media, yang menyediakan sokongan untuk aplikasi multimedia, animasi dan output maklumat penstriman. DirectX Media pada masa ini terdiri daripada antara muka pengaturcaraan utama berikut:

DirectShow (sebelum ini dipanggil ActiveMovieSDK); DirectAnimation (sebelum ini dipanggil Animasi ActiveX); Transformasi DirectX. Ambil perhatian bahawa perkhidmatan DirectX Media menggunakan perkhidmatan DirectX Foundation.

API (Antara Muka Pengaturcaraan Aplikasi) menyediakan pembangun perkakasan dan perisian dengan cara untuk mencipta pemacu dan program yang berjalan lebih pantas pada pelbagai jenis platform. Pemacu perisian direka bentuk untuk berinteraksi secara langsung dengan API, bukannya dengan sistem pengendalian dan perisian.

Pada masa ini terdapat dua API grafik - OpenGL (SGI) dan Direct 3D (Microsoft).

Walaupun pengeluar penyesuai video menyokong standard OpenGL, Microsoft menyediakan sokongan Direct3D untuk API yang lebih komprehensif yang dipanggil DirectX.

DirectX 9 dan lebih tinggi ialah versi terkini antara muka perisian untuk mengembangkan sokongan Grafik 3D dan menyediakan keupayaan permainan yang lebih baik. Untuk maklumat lanjut tentang DirectX atau untuk memuat turun versi terkini, lawati tapak Web DirectX Microsoft: www.microsoft.com/directx.

CrossFire atau sli

Sebagai tindak balas kepada pembangunan dan promosi teknologi SLI lama-baru (MK No. 30(357) 2005) oleh NVIDIA, pesaing utama dalam pasaran pemecut video, ATI, membangun dan melaksanakan penyelesaiannya sendiri yang serupa - teknologi CrossFire. Sama seperti SLI NVIDIA, ia membolehkan anda menggabungkan sumber dua kad video dalam satu komputer antara satu sama lain, meningkatkan prestasi subsistem video. Teknologi CrossFire pada asasnya berbeza daripada SLI dan, oleh itu, mempunyai sedikit persamaan dengan pesaingnya. Memberi keutamaan kepada kelebihan tertentu dari satu teknologi atau yang lain, dalam masa terdekat pengguna akan memilih antara NVIDIA dan ATI bukan sahaja berdasarkan pendapat tentang jenama yang dibentuk selama ini, tetapi juga berdasarkan fakta tentang teknologi SLI atau CrossFire.

Asas teknikal

Dengan analogi dengan NVIDIA, untuk meletakkan dua kad video ATI dalam satu "abah-abah" anda memerlukan papan induk dengan set cip daripada pengeluar yang sama (set cip Intel i975X juga dirancang untuk menyokong CrossFire), dengan dua slot PCI Ekspres. Seperti SLI, CrossFire menuntut sumber sistem, yang memerlukan bekalan kuasa berkualiti tinggi. Mari kita lihat keperluan sistem dengan lebih terperinci.

Papan induk. Ibu mesti berasaskan chipset ATI Radeon Xpress 200 CrossFire. Papan ini tersedia untuk kedua-dua pemproses AMD Sempron/Athlon 64 dan Intel Pentium 4/Celeron. Jadi ATI kini akan membuat wang pada chipset, pengeluaran yang sebelum ini tidak mencapai skala besar.

Kad video. Untuk teknologi berfungsi, anda memerlukan kad induk CrossFire (lebih lanjut mengenai perkara ini di bawah) dan mana-mana kad video lain berdasarkan cip daripada keluarga yang sama dengan kad hos. Apa yang membezakan kad induk daripada yang lain ialah kehadiran penyambung DMS-59 (disambungkan ke DVI pada kad hamba), cip CrossFire, dan, sudah tentu, kos.

Unit kuasa. Untuk mengekalkan set yang serius, anda memerlukan bekalan kuasa dengan kuasa minimum 400–450 W, sebaik-baiknya yang lebih berkuasa.

Nah, itu pada asasnya yang anda perlukan untuk memasang sistem video CrossFire. Seperti yang anda perhatikan, ATI lebih fleksibel dengan pelanggannya, tidak mengikat mereka seperti tanah ke ladang kolektif kepada pembelian mandatori dua kad dengan cip yang sama daripada pengeluar yang sama. Pengikatan dilakukan hanya kepada keluarga cip video yang menjadi asas pemecut. Iaitu, anda boleh membeli pemecut video Radeon X800 terkemuka dan budak Radeon X800 XL. Master Radeon X800 akan serasi dengan kad daripada mana-mana pengeluar berdasarkan sebarang pengubahsuaian cip X800. Ini adalah kelebihan mutlak berbanding pesaing - jika anda menggunakan satu pemecut, dengan prospek pemodenan selanjutnya dengan memasang kad video lain, anda tidak perlu mencari kad daripada pengeluar tertentu berdasarkan cip tertentu. hidup masa ini Teknologi CrossFire disokong oleh kad video berdasarkan X800 dan X850, serta produk baharu berdasarkan X1xxx.

Beberapa tahun lalu, Apple memperkenalkan API grafik baharu - Metal. Perbezaannya daripada Kit Scene yang sama ialah ia bukan API peringkat tinggi yang berjalan di atas OpenGL ES (mudah alih Versi OpenGL), tetapi API peringkat rendah untuk rendering dan pengkomputeran yang boleh menggantikan OpenGL. Menurut Apple, Metal adalah susunan magnitud lebih pantas daripada OpenGL ES (namun, pada hakikatnya, hanya menarik panggilan dan pemindahan data ke GPU adalah 10 kali lebih pantas). API ini tersedia untuk semua peranti yang dijalankan pada pemproses A7 dan lebih baharu, serta Mac bermula dari 2012.

Cara API grafik berfungsi

Pertama sekali, apakah itu API? Ini bermaksud Antara Muka Pengaturcaraan Aplikasi, antara muka pengaturcaraan aplikasi. Dalam istilah mudah, ini adalah kod sedia, yang menjadikan hidup lebih mudah bagi seorang pengaturcara apabila menulis program. Sebenarnya, ini adalah sejenis produk separuh siap - berdasarkan kod ini, anda boleh menulis program anda sendiri dengan lebih pantas dan lebih mudah.

Sekarang mari kita lihat bagaimana GPU itu sendiri berfungsi dengan API. Adalah tidak betul untuk berfikir bahawa panggilan API beroperasi secara langsung pada GPU, dan lebih tidak betul untuk berfikir bahawa GPU selesai memproses panggilan apabila hasil API dikembalikan. Sebagai contoh, jika pemandu melaksanakan arahan rendering pada saat ia dicipta, ia akan melahu CPU sementara menunggu rendering selesai. Dan selepas pelaksanaan ia akan menjadi sebaliknya - GPU akan melahu, menunggu arahan baharu tiba daripada pemandu.

Dengan ini sebab CPU dan GPU berfungsi secara tak segerak: pemacu grafik mula-mula mengumpulkan semua panggilan cabutan untuk keseluruhan bingkai, dan hanya kemudian menghantarnya ke GPU. Selanjutnya, apabila arahan untuk melukis bingkai seterusnya tiba, bingkai ini akan diproses oleh GPU. Iaitu, kita mendapat kelewatan satu bingkai: semasa CPU menyediakan panggilan untuk bingkai semasa, yang terakhir diberikan pada GPU. Malah, anda boleh menimbal lebih daripada satu bingkai, dan dengan itu mendapat frekuensi yang lebih tinggi bingkai: semuanya bergantung hanya pada prestasi pemproses dan kad video.

Inovasi dalam Logam API

Apa yang salah dengan kaedah yang diterangkan di atas? Perkara buruk mengenainya ialah terdapat perantara antara GPU dan API - pemandu. Dan dialah yang mengawal kelewatan. Dalam Metal API, penimbal perintah dibuka dan aplikasi boleh mengisinya sendiri dan menghantarnya ke baris gilir perintah untuk dilaksanakan pada GPU. Dengan cara ini, aplikasi mempunyai kawalan penuh ke atas kerja dan boleh menguruskan kelewatan. Lebih-lebih lagi, kini adalah mungkin untuk menyelaraskan perintah dengan mudah dan meletakkannya dalam penimbal dalam susunan tertentu, kerana ia menjadi lebih jelas kepada pengaturcara yang hasilnya akan tersedia dalam susunan yang mana.

Satu lagi inovasi penting ialah perkakasan: on Pemproses Apple A7 dan Metal yang lebih tinggi direka untuk berfungsi dengan memori yang dikongsi, iaitu, CPU dan GPU boleh mengakses data yang sama tanpa perlu memindahkannya melalui bas PCI. Metal memberikan program akses terus kepada penampan CPU, dan pengaturcara boleh "mencampurkan" pengiraan pada GPU dan CPU, yang boleh mempercepatkan program dengan ketara.

Manfaat sebenar daripada API Metal

Seperti yang saya jelaskan di atas, setiap panggilan cabutan mengambil sedikit masa pada CPU dan GPU. Rendering pada GPU tidak boleh dibuat lebih pantas atas sebab yang jelas (ia hanya bergantung pada prestasi GPU itu sendiri), tetapi anda boleh menang dengan cara lain: pertama, anda boleh mengurangkan masa untuk pemindahan data (memandangkan Metal berfungsi dengan memori yang dikongsi) , dan kedua, anda boleh mengurangkan masa pemprosesan panggilan pada CPU. Masa pemprosesan panggilan pada CPU dikurangkan kerana ketiadaan pemacu perantara dan disebabkan pembinaan selari penimbal arahan.

Dan di sini timbul persoalan - apakah peningkatan sepuluh kali ganda dalam produktiviti yang dibincangkan oleh Apple? Ya, itulah masa panggilan pada CPU kini lebih singkat. Tetapi GPU hampir tidak terjejas di sini, jadi pada akhirnya, malangnya mustahil untuk memperbaiki grafik secara langsung menggunakan API Logam. Tetapi kerana pemproses itu percuma, ia boleh dimuatkan dengan fizik: mengira fizik zarah, interaksi banyak objek (adakah semua orang mengingati seratus monyet terbang pada pembentangan iPhone 7?), mengira kesan kain dan air, dan seterusnya. Dan kerana GPU pernah melakukan ini, kami membebaskannya, dan ternyata secara tidak langsung ia kini boleh mengeluarkannya gambar terbaik, perkara yang kita lihat dalam permainan (termasuk Asphalt 8) (beri perhatian kepada perincian batu turapan dan kesan):

Saling kendali antara OpenGL dan Metal

Seperti yang dapat dilihat dari atas, Metal benar-benar meningkatkan hayat pemproses. Oleh itu, jika sistem tidak menyokong Metal, tetapi mempunyai sangat pemproses yang berkuasa, maka tidak sukar untuk menulis semula permainan untuk OpenGL - dan inilah yang kita lihat dalam Vainglory untuk Android - untuk mendapatkan grafik maksimum (tahap Apple A9) pada OpenGL yang anda perlukan pemproses teratas tahap Snapdragon 820, yang dari segi prestasi mentah (dalam FLOPS) adalah dua kali lebih kuat daripada A9.

Logam Epal 2

Pada bulan Jun Persembahan Apple memperkenalkan versi baharu Metal. Penambahbaikan utama ialah sokongan VR, pembelajaran mesin dan GPU luaran, yang secara teori akan membenarkan porting ke Permainan Mac daripada PC tanpa sebarang kemerosotan dalam grafik (pada masa ini, port kebanyakan permainan pada asasnya melancarkan Wain, yang mengurangkan prestasi dengan ketara dan memberi kesan besar kepada GPU yang sudah agak lemah dalam Mac). Tetapi kita akan melihat bagaimana ini akan menjadi realiti hanya pada masa akan datang.