WebCL - WebCL

WebCL
WebCL Logo.svg
Utvikler (r) WebCL arbeidsgruppe
Stabil utgivelse
1.0 / 19. mars 2014 ; 6 år siden  ( 2014-03-19 )
Operativsystem Kryssplattform
Type API
Nettsted www .khronos .org / webcl /

WebCL ( Web Computing Language ) er en JavaScript- binding til OpenCL for heterogen parallell databehandling i en hvilken som helst kompatibel nettleser uten bruk av plugin-moduler , først kunngjort i mars 2011. Den er utviklet av lignende grunnlag som OpenCL og regnes som en nettleserversjon. av sistnevnte. Først og fremst tillater WebCL webapplikasjoner å aktualisere hastighet med flerkjernede CPUer og GPUer . Med den økende populariteten til applikasjoner som trenger parallell behandling, for eksempel bilderedigering, utvidet virkelighet applikasjoner og sofistikert spill, har det blitt viktigere å forbedre beregningshastigheten. Med disse bakgrunnsårsakene designet og utviklet en nonprofit Khronos Group WebCL, som er en Javascript-binding til OpenCL med en bærbar kjerneprogrammering, som muliggjør parallell databehandling i nettlesere, over et bredt spekter av enheter. Kort sagt består WebCL av to deler, den ene er Kernel-programmering, som kjører på prosessorer (enheter) og den andre er JavaScript, som binder webapplikasjonen til OpenCL. Den fullførte og ratifiserte spesifikasjonen for WebCL 1.0 ble utgitt 19. mars 2014.

Gjennomføring

Foreløpig støtter ingen nettlesere WebCL. Imidlertid brukes ikke-native tillegg til å implementere WebCL. For eksempel utviklet Nokia en WebCL-utvidelse. Mozilla planlegger ikke å implementere WebCL til fordel for OpenGL ES 3.1 Compute Shaders .

WebCL arbeidsutkast

Eksempel cCode

Den grunnleggende enheten til et parallelt program er kjernen . En kjerne er en hvilken som helst parallelliserbar oppgave som brukes til å utføre en bestemt jobb. Oftere kan funksjoner realiseres som kjerner. Et program kan bestå av en eller flere kjerner. For å realisere en kjerne er det viktig at en oppgave kan parallelliseres. Datavhengighet og rekkefølge for utførelse spiller en viktig rolle i å produsere effektive parallelliserte algoritmer. Et enkelt eksempel kan tenkes på tilfelle løkkeutrulling utført av C-kompilatorer, der en uttalelse som:

for (i = 0; i< 3 ; i++)
	c[i] = a[i] + b[i];

kan rulles inn i:

c[0] = a[0] + b[0];
c[1] = a[1] + b[1];
c[2] = a[2] + b[2];

Ovennevnte utsagn kan parallelliseres og kan fås til å løpe samtidig. En kjerne følger en lignende tilnærming der bare øyeblikksbildet av den første iterasjonen blir tatt inne i kjernen. La oss omskrive koden ovenfor ved hjelp av en kjerne:

__kernel add(__global float* a, __global float* b, __global float*c)
{
	int i = get_global_id(0);

	if (i<3)
		c[i] = a[i] + b[i];
}

Å kjøre et WebCL-program innebærer følgende trinn:

  1. Gi tilgang til enheter og gi sammenheng
  2. Overlever kjernen til en enhet
  3. Få enheten til å kjøre kjernen
  4. Hent resultater fra enheten
  5. Bruk dataene i JavaScript

Ytterligere detaljer om det samme finner du på

Unntaksliste

WebCL, som er en JavaScript-basert implementering, returnerer ikke en feilkode når det oppstår feil. I stedet kaster det et unntak som OUT_OF_RESOURCES, OUT_OF_HOST_MEMORY eller det WebCL-spesifikke WEBCL_IMPLEMENTATION_FAILURE. Unntaksobjektet beskriver det maskinlesbare navnet og den menneskelesbare meldingen som beskriver feilen. Syntaksen er som følger:

exception WebCLException : DOMException {
  DOMString name;              // A string representation of the numeric error code, e.g. "INVALID_VALUE"
  DOMString? message;          // An implementation-specific description of what caused the exception
};

Fra koden ovenfor kan det observeres at meldingsfeltet kan være en NULL-verdi.

Liste over få andre unntak:

  1. INVALID_OPERATION - hvis blokkeringsformen for denne funksjonen kalles fra en WebCLCallback
  2. INVALID_VALUE - hvis eventWaitList er tom
  3. INVALID_CONTEXT - hvis hendelser spesifisert i eventWaitList ikke hører til samme kontekst
  4. INVALID_DEVICE_TYPE - hvis deviceType er gitt, men ikke er en av de gyldige opptalte verdiene
  5. DEVICE_NOT_FOUND - hvis det ikke er noe WebCLDevice tilgjengelig som samsvarer med den gitte enhetstypen

Mer informasjon om unntak finner du i spesifikasjonsdokumentet.

Det er et annet unntak som blir reist når du prøver å kalle et objekt som er 'frigitt'. Når du bruker utgivelsesmetoden, blir ikke objektet slettet permanent, men det frigjør ressursene som er knyttet til det objektet. For å unngå dette unntaket kan 'releaseAll' -metoden brukes, som ikke bare frigjør ressursene, men også sletter alle tilknyttede objekter som er opprettet.

Sikkerhet

WebCL er en åpen programvare utviklet for webapplikasjoner, og det er også mye rom for sårbarheter innen design og utvikling. Dette tvang utviklerne som jobbet med WebCL til å gi sikkerhet ytterste betydning. Få bekymringer som ble løst er:

  1. Tilgang utenfor minnet: Dette skjer ved å få tilgang til minneplasseringene utenfor den tildelte plassen. En angriper kan omskrive eller slette alle viktige data som er lagret på disse minnestedene. Hver gang det oppstår et slikt tilfelle, må det genereres en feil på kompileringstidspunktet, og null må returneres ved kjøretid, uten at programmet overstyrer minnet. Et prosjekt WebCL Validator, ble initiert av Khronos Group (utviklere) om håndtering av dette sikkerhetsproblemet.
  2. Minneinitialisering: Dette gjøres for å forhindre at applikasjonene får tilgang til minneplasseringene til tidligere applikasjoner. WebCL sørger for at dette ikke skjer ved å initialisere alle bufferne, variablene som brukes til null før den kjører den gjeldende applikasjonen. OpenCL 1.2 har en utvidelse 'cl_khr_initialize_memory', som muliggjør dette.
  3. Denial of Service: Det vanligste angrepet på webapplikasjoner kan ikke elimineres helt av WebCL eller nettleseren. OpenCL kan utstyres med vakthundtimere og forebyggende multitasking, som kan brukes av WebCL for å oppdage og avslutte sammenhenger som tar for lang tid eller bruker mye ressurser. Det er en utvidelse av OpenCL 1.2 'cl_khr_terminate_context' som for den forrige, som gjør det mulig å avslutte prosessen som kan forårsake et denial of service-angrep.

Relaterte nettleserfeil

  • Feil 664147 - [WebCL] legg til openCL i gecko , Mozilla
  • Feil 115457: [Meta] WebCL-støtte for WebKit , WebKit Bugzilla

Se også

Referanser

Eksterne linker