Бірнеше буферлеу - Multiple buffering

Жинақтар 1, 2 және 3 сәйкесінше бір, екі және үш рет буферлеудің жұмысын білдіреді тік синхрондау (vsync) қосылды. Әр графикте уақыт солдан оңға қарай жүреді. Ескертіп қой 3 көрсетеді своп тізбегі үш буфермен; үш буферлеудің бастапқы анықтамасы D кадры аяқталған бойда C кадрын лақтырып тастайды және Е рамасын 1 буферге кідіртпей сала бастайды. Орнатыңыз 4 жақтауды (B, бұл жағдайда) салу әдеттегіден көп уақытты талап еткенде не болатынын көрсетеді. Бұл жағдайда кадрдың жаңартылуы жіберіліп алынды. Бейнені ойнату сияқты уақытқа сезімтал бағдарламаларда барлық кадрлар алынып тасталуы мүмкін. Жинақта үш буферлі своп тізбегі бар 5, В жақтауын салу А кадрының бейне жадына көшірілуін күтпестен басталуы мүмкін, бұл кешіктірілген кадрдың вертикалды қайталануын жоғалту мүмкіндігін азайтады.

Жылы Информатика, бірнеше буферлеу бірнеше қолдану болып табылады буфер деректер блогын ұстап тұру үшін, «оқырман» деректердің толық емес (мүмкін ескі болса да) нұсқасын көруі үшін, оның көмегімен жасалған мәліметтердің ішінара жаңартылған нұсқасын емес «жазушы». Ол сондай-ақ пайдалану қажеттілігін болдырмау үшін қолданылады қосарланған жедел жады (DPRAM) оқырмандар мен жазушылар әртүрлі құрылғылар болған кезде.

Сипаттама

Бірнеше буфердің қалай жұмыс істейтінін түсіндірудің қарапайым әдісі - бұл нақты мысал. Жақсы шуақты күн және сіз есу пулын шығаруды шештіңіз, тек сіз өз бақшаңыздағы шлангты таба алмайсыз. Бассейнді шелектермен толтыруыңыз керек. Сонымен, сіз бір шелекті (немесе буферді) ағыннан толтырасыз, кранды өшіресіз, бассейнге барасыз, су құйыңыз, жаттығуды қайталау үшін кранға қайтыңыз. Бұл бір буферлікке ұқсас. Шелектегі суды «өңдегенде» кранды жабу керек.

Енді сізде екі шелек болса, оны қалай жасайтыныңызды қарастырыңыз. Сіз бірінші шелекті толтырып, содан кейін екіншісін ағын су астында ауыстыратын едіңіз. Сонда сіз екінші шелекті толтыра отырып, біріншісін жаяу бассейнге жіберу үшін ұзақ уақытты аласыз. Қайтып келген кезде сіз жай ғана шелектерді ауыстыра аласыз, сонда біріншісі қайтадан толтырылады, сол кезде сіз екіншісін бассейнге босата аласыз. Бассейн толғанға дейін мұны қайталауға болады. Бұл техниканың бассейнді тезірек толтыратындығын түсінуге болады, өйткені шелектер толтырылғанша ешнәрсе жасамай, күтуге көп уақыт кетпейді. Бұл екі буферлеуге ұқсас. Кран әрдайым болуы мүмкін және өңдеу аяқталғанша күтудің қажеті жоқ.

Егер сіз шелекті бассейнге бассейнге апару үшін біреуін толтырған кезде, ал екіншісін босатқан кезде басқа адамды қолдансаңыз, онда бұл үш буферлікке ұқсас болар еді. Егер бұл қадам жеткілікті уақытты алса, онда сіз одан да көп шелектерді пайдалана аласыз, осылайша краннан толтырып тұрған шелектер үздіксіз жұмыс істейді.

Информатикада сөндіруге болмайтын немесе өшірілмейтін ағынды судың болуы жиі кездеседі (мысалы, аудио ағыны сияқты). Сондай-ақ, компьютерлер әдетте ағынмен емес, мәліметтермен жұмыс істегенді жөн көреді. Мұндай жағдайларда қосарланған буферлеу жиі қолданылады.

Екі буферлі Петри торы

Екі буферлі Petri Net

The Петри торы суретте қос буферлеудің қалай жұмыс істейтіні көрсетілген. W1 және W2 ауысулары сәйкесінше 1 және 2 буферге жазуды, ал R1 және R2 буферден 1 және 2 буферден оқуды білдіреді, басында тек W1 ауысуы қосылады. W1 өрттерінен кейін R1 және W2 қосылады және қатар жүре алады. Аяқтағаннан кейін R2 және W1 қатар жүреді және т.б.

Сонымен, W1-де тұтанатын алғашқы өтпелі кезеңнен кейін бұл жүйе периодты болып табылады және ауысулар қосылады - әрқашан жұптасады (сәйкесінше R1 W2 және R2 W1).

Компьютерлік графикада қосарланған буферлеу

Жылы компьютерлік графика, қос буферлеу бұл кекештіктің жоқ (немесе одан аз) көрсететін графика салуға арналған әдіс, жырту, және басқа жәдігерлер.

Бағдарлама үшін пикселдер бірнеше рет өзгермеуі үшін дисплей салу қиын. Мысалы, мәтін парағын жаңарту кезінде ескі әріптерде қолданылатын, бірақ жаңа әріптермен емес пикселдерді өшіруден гөрі бүкіл парақты тазарту, содан кейін әріптерді сызу әлдеқайда оңай. Алайда, бұл аралық кескінді пайдаланушы келесі түрде көреді жыпылықтайды. Одан басқа, компьютер мониторлары көрінетін бейне парақты үнемі өзгертіп отырыңыз (дәстүр бойынша секундына 60 рет), сондықтан тіпті жаңару «жаңа» кескін мен қайта салынбаған «ескі» кескін арасындағы көлденең бөлгіш ретінде көрінеді, белгілі жырту.

Бағдарламалық жасақтама қос буферлеу

Қосарланған буферлеуді бағдарламалық қамтамасыз ету барлық сызу операциялары нәтижелерін жүйенің кейбір аймақтарында сақтайды Жедел Жадтау Құрылғысы; кез келген осындай аймақ жиі «артқы буфер» деп аталады. Барлық сызу операциялары аяқталған деп саналғанда, бүкіл аймақ (немесе тек өзгертілген бөлігі) көшіріледі бейне жедел жады («алдыңғы буфер»); бұл көшіру әдетте монитормен синхрондалады растр жыртып алмау үшін сәуле. Қосарланған буферлеудің бағдарламалық қамтамасыздандыруы артқы буферге бөлінген жүйелік жадқа, көшіру операциясының уақыты мен синхрондауды күткен уақытқа байланысты бір буферден гөрі көп жады мен процессор уақытын қажет етеді.

Терезе менеджерлерін құрау көбінесе «көшіру» әрекетін «композициялық «терезелерді орналастыру, оларды масштабты немесе бұрмаланғыш эффекттермен түрлендіру және бөліктерді мөлдір ету үшін қолданылады. Сонымен» алдыңғы буфер «тек экранда көрінетін құрама кескінді қамтуы мүмкін, ал әр терезеде әр түрлі» артқы буфер «болады. терезенің барлық мазмұнын құрама кескін.

Бетті аудару

Парақты аудару әдісінде деректерді көшірудің орнына екі буфер де көрсетілуі мүмкін (екеуі де бар Бейне жедел жады ). Кез келген уақытта монитор бір буферді белсенді түрде көрсетеді, ал екіншісі - фондық буфер сызылады. Фондық буфер аяқталғаннан кейін, екеуінің рөлдері ауысады. Парақты аудару әдетте a өзгерту арқылы жүзеге асырылады аппараттық тіркелім ішінде бейне дисплей контроллері - көрсеткіштің мәні бейне жадындағы дисплей деректерінің басына.

Парақты аудару деректерді көшіруден гөрі жылдамырақ және монитор парақтары ауысқан кезде жыртылмайтындығына кепілдік бере алады. тік дайындама аралығы - бейне деректері алынбайтын бос кезең. Ағымдағы белсенді және көрінетін буфер деп аталады алдыңғы буфер, ал фондық бет деп аталады артқы буфер.

Үш рет буферлеу

Жылы компьютерлік графика, үш рет буферлеу қосарланған буферлеуге ұқсас, бірақ жақсартылған өнімділікті қамтамасыз ете алады. Қосарланған буферлеу кезінде бағдарлама келесі сызбаны бастамас бұрын дайын сызба көшірілгенше немесе ауыстырылғанша күтуі керек. Бұл күту мерзімі бірнеше болуы мүмкін миллисекундтар буферге қол тигізуге болмайды.

Үш рет буферлеу кезінде бағдарламаның екі артқы буфері болады және бірден осындай көшіруге қатыспайтын суретте бастайды. Үшінші буфер, алдыңғы буфер графикалық карта арқылы кескінді мониторға шығару үшін оқылады. Кескін мониторға жіберілгеннен кейін, алдыңғы буфер артқы буфермен аударылады (немесе көшіріледі), ең соңғы толық кескін бар. Артқы буфердің біреуі әрқашан толық болғандықтан, графикалық карта бағдарламалық жасақтаманың аяқталуын ешқашан күтуге мәжбүр болмайды. Демек, бағдарламалық жасақтама мен графикалық карта мүлдем тәуелсіз және өз қарқынымен жұмыс істей алады. Соңында, көрсетілген сурет синхрондауды күтпей, ең аз кідіріспен басталды.[1]

Бағдарламалық жасақтама арқасында алгоритм Монитордың жаңартылатын оқиғалары үшін графикалық жабдықты сұрастырмай, алгоритм қосымша кадрлар жасай алатын жылдамдықты қосымша кадрларды үздіксіз тарта алады. Жаңарту арасындағы интервалға қарағанда әлдеқайда жылдам аяқталған кадрлар үшін артқы буфер кадрларын көшіру алдында бірнеше рет жаңа итерациямен ауыстыруға болады. Бұл дегеніміз, артқы буферге кадрлар жазылуы мүмкін, олар кез-келген кадрлармен жазылмай тұрып, ешқашан пайдаланылмайды. Nvidia бұл әдісті «Жылдам синхрондау» деген атпен енгізді.[2]

Кейде үш буферлеу деп аталатын балама әдіс - бұл своп тізбегі ұзындығы үш буфер. Бағдарлама екі артқы буферді де салғаннан кейін, ол басқа артқы буферді шығармас бұрын экранда біріншісі орналастырылғанша күтеді (яғни бұл 3-ұзындық) бірінші, бірінші кезек). Windows ойындарының көпшілігі үш рет буферлеуді қосу кезінде осы әдіске жүгінетін сияқты.[дәйексөз қажет ]

Төрт буферлеу

Термин төрт буферлеу ішіндегі сол және оң көз кескіндерінің әрқайсысы үшін екі буферлеуді қолдануды білдіреді стереоскопиялық іске асырулар, осылайша барлығы төрт буфер (егер үш буфер қолданылған болса, болар еді) алты буфер). Буферді ауыстыру немесе көшіру командасы әдетте екі жұпқа бірдей қолданылады, сондықтан ешқашан бір көз екінші көзге қарағанда ескі суретті көрмейді.

Төрт буферлік графикалық карта драйверлерінде ерекше қолдауды қажет етеді, ол көптеген тұтынушылар карталарында өшіріледі. AMD-дің Radeon HD 6000 сериясы және одан кейінгі нұсқасы оны қолдайды [1].

Сияқты 3D стандарттары OpenGL[3] және Direct3D төрт буферлеуді қолдау.

DMA үшін қос буферлеу

Термин қос буферлеу үшін екі буфер арасындағы деректерді көшіру үшін қолданылады жадқа тікелей қол жеткізу (DMA) аударымдар, емес өнімділікті жақсарту үшін, бірақ құрылғының нақты адрестік талаптарын қанағаттандыру үшін (мысалы, 32-биттік құрылғылар кеңейтілген мекен-жайы бар жүйелердегі Физикалық мекенжайды кеңейту ).[4] DOS және Windows құрылғы драйверлері «қос буферлеу» термині қолданылуы мүмкін орын. Linux және BSD бастапқы коды бұл «серпінді буфер» деп атайды.[5]

Кейбір бағдарламашылар мұндай қосарланған буферден аулақ болуға тырысады нөлдік көшірме техникасы.

Басқа мақсаттар

Қос буферлеу жеңілдету әдісі ретінде де қолданылады аралық немесе өшіру бейне сигналдары.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ «Үш буферлік: біз оны неге жақсы көреміз». AnandTech. 26 маусым 2009 ж. Алынған 2009-07-16.
  2. ^ Смит, Райан. «NVIDIA GeForce GTX 1080 & GTX 1070 құрылтайшыларының шығарылымына шолу: FinFET буынын бастау». Алынған 2017-08-01.
  3. ^ OpenGL 3.0 спецификациясы, 4 тарау
  4. ^ «Физикалық адрес кеңейтімі - PAE жады және Windows». Microsoft Windows Hardware Development Central. 2005 ж. Алынған 2008-04-07.
  5. ^ Горман, Мел. «Linux виртуалды жад менеджерін түсіну, 10.4 секіру буферлері».

Сыртқы сілтемелер