WebCL

WebCL
WebCL
WebCL Logo.svg
개발자WebCL 작업 그룹
안정적 해제
1.0 / 2014년 3월 19일; 8년(2014-03-19)[1]
운영 체제크로스 플랫폼
유형API
웹사이트www.khronos.org/webcl/

WebCL(Web Computing Language)은 2011년 3월에 처음 발표된 플러그인의 사용 없이 호환 가능한 웹 브라우저 내에서 이기종 병렬 컴퓨팅을 위해 OpenCL에 바인딩된 자바스크립트다.오픈CL과 유사한 근거로 개발되어 후자의 브라우저 버전으로 간주되고 있다.주로 WebCL은 웹 애플리케이션이 멀티 코어 CPU와 GPU로 속도를 실현할 수 있도록 한다.영상편집, 증강현실 애플리케이션, 정교한 게임 등 병렬 처리가 필요한 애플리케이션의 인기가 높아지면서 연산 속도 향상이 더욱 중요해졌다.이러한 배경의 이유로 비영리 크로노스 그룹은[2] 다양한 기기에 걸쳐 웹 브라우저에서 병렬 컴퓨팅이 가능하도록 휴대용 커널 프로그래밍으로 OpenCL에 Javascript 바인딩된 WebCL을 설계하고 개발했다.간단히 말해서 WebCL은 두 부분으로 구성되어 있는데 하나는 프로세서(장치)에서 실행되는 커널 프로그래밍이고 다른 하나는 웹 애플리케이션을 OpenCL에 바인딩하는 자바스크립트다.WebCL 1.0에 대한 완료 및 비준된 규격은 2014년 3월 19일에 발표되었다.[2]

실행

현재 WebCL을 기본적으로 지원하는 브라우저는 없다.그러나 WebCL을 구현하기 위해 비원천적 추가물이 사용된다.예를 들어, 노키아는 WebCL 확장을 개발했다.[3]모질라WebGPU에 유리하게 폐기된 WebGL Compute Shaders를 위해 WebCL을 구현할 계획이 없다.

WebCL 작업 초안

예제 C 코드

병렬 프로그램의 기본 단위는 커널이다.커널은 특정 작업을 수행하는 데 사용되는 병렬 가능한 태스크다.더 자주 함수는 커널로서 실현될 수 있다.프로그램은 하나 이상의 커널로 구성될 수 있다.커널을 실현하기 위해서는 작업이 병행될 수 있어야 한다.데이터 의존성과 실행 순서는 효율적인 병렬 알고리즘을 생성하는 데 중요한 역할을 한다.간단한 예는 다음과 같은 문장이 C 컴파일러에 의해 수행되는 루프 언롤링의 경우를 생각할 수 있다.

을 위해 (i = 0; i< 3 ; i++)  c[i] = a[i] + b[i]; 

다음 항목으로 압축 해제할 수 있음:

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

위 문장은 병렬로 실행할 수 있으며 동시에 실행되도록 할 수 있다.커널은 i 반복의th 스냅샷만 커널 내부에 캡처되는 유사한 접근방식을 따른다.커널을 사용하여 위의 코드를 다시 씁시다.

__커널 덧셈을(__글로벌 둥둥 뜨다* a, __글로벌 둥둥 뜨다* b, __글로벌 둥둥 뜨다*c) {  인트로 i = get_global_id(0);   만일 (i<3)   c[i] = a[i] + b[i]; } 

WebCL 응용프로그램을 실행하려면 다음 단계를 수행하십시오.

  1. 장치에 대한 액세스 허용 및 컨텍스트 제공
  2. 커널을 장치에 전달
  3. 디바이스가 커널을 실행하도록 함
  4. 장치에서 결과 검색
  5. JavaScript 내의 데이터 사용

동일한 항목에 대한 자세한 내용은 다음에서[5] 확인할 수 있다.

예외 목록

자바스크립트 기반 구현인 WebCL은 오류가 발생할 때 오류 코드를 반환하지 않는다.대신 다음과 같은 예외를 던진다.OUT_OF_RESOURCES,OUT_OF_HOST_MEMORY또는 WebCL별WEBCL_IMPLEMENTATION_FAILURE예외 객체는 기계 판독 가능 이름과 오류를 설명하는 사람이 읽을 수 있는 메시지를 설명한다.[6]구문은 다음과 같다.

예외적인 WebCLException : 돔시셉션 {   DOMString 이름을 붙이다;     // 숫자 오류 코드의 문자열 표현(예: "INVALID_VALUE")   DOMString? 메세지; // 예외를 초래한 이유에 대한 구현별 설명 }; 

위의 코드에서 메시지 필드는 NULL 값이 될 수 있음을 알 수 있다.기타 예외는 다음과 같다.

  1. INVALID_OPERATION– 이 기능의 차단 형태가 a에서 호출되는 경우WebCLCallback
  2. INVALID_VALUE– ifeventWaitList비어 있다
  3. INVALID_CONTEXT– 이벤트가 지정된 경우eventWaitList같은 맥락에 속하지 않다
  4. INVALID_DEVICE_TYPE– ifdeviceType지정된 값이지만 유효한 열거된 값 중 하나가 아님
  5. DEVICE_NOT_FOUND– 없는 경우WebCLDevice주어진 것과 일치하는 사용 가능한deviceType

예외에 대한 자세한 내용은 사양 문서에서 확인할 수 있다.[6]

'해제된' 물체를 부르려고 할 때 제기되는 또 다른 예외가 있다.릴리스 방법을 사용하면 개체가 영구적으로 삭제되지 않고 해당 개체와 연결된 리소스를 확보한다.이런 예외를 피하기 위해releaseAll자원을 자유롭게 할 뿐만 아니라 생성된 모든 관련 객체를 삭제하는 방법을 사용할 수 있다.

보안

WebCL은 웹 애플리케이션을 위해 개발된 오픈 엔드 소프트웨어로서, 설계 및 개발 분야에서도 취약성의 범위가 많다.이로 인해 WebCL에 종사하는 개발자들은 보안을 가장 중요시해야 했다.다루어진 우려사항은 다음과 같다.

  1. Out of Bounds 메모리 액세스:이는 할당된 공간 밖에서 메모리 위치에 액세스함으로써 발생한다.공격자는 그러한 메모리 위치에 저장된 모든 중요한 데이터를 다시 쓰거나 지울 수 있다.이러한 경우가 발생할 때마다 컴파일 시간에 오류가 발생해야 하며, 프로그램이 메모리를 오버라이드하지 않도록 런타임에 0을 반환해야 한다.이 취약성 처리에 대해 Khronos 그룹([7]개발자)에 의해 시작된 프로젝트 WebCL Validator.
  2. 메모리 초기화:이는 애플리케이션이 이전 애플리케이션의 메모리 위치에 액세스하지 못하도록 하기 위해 수행된다.WebCL은 현재 애플리케이션을 실행하기 전에 0에 사용된 변수인 모든 버퍼를 초기화하여 이러한 현상이 발생하지 않도록 한다.OpenCL 1.2에는 이를 가능하게 하는 'cl_khr_initialize_memory' 확장자가 있다.[6]
  3. 서비스 거부:웹 응용 프로그램에 대한 가장 일반적인 공격은 WebCL이나 브라우저에 의해 완전히 제거될 수 없다.OpenCL은 감시 타이머와 사전 예방적 멀티태스킹이 제공될 수 있는데, WebCL이 너무 오래 걸리거나 많은 자원을 소비하는 컨텍스트를 감지하고 종료하기 위해 사용할 수 있다.이전과 마찬가지로 OpenCL 1.2 'cl_khr_terminal_context'의 연장이 있어 서비스 거부 공격을 일으킬 수 있는 프로세스를 종료할 수 있다.[6]

관련 브라우저 버그

  • Bug 664147 - [WebCL] add openCL in gecko, Mozilla
  • Bug 115457: [Meta] WebCL support for WebKit, WebKit Bugzilla

참고 항목

참조

  1. ^ "Khronos Releases WebCL 1.0 Specification".
  2. ^ a b "Khronos Releases WebCL 1.0 Specification". Khronos Group. Retrieved March 19, 2014.
  3. ^ "WebCL". Nokia Research. Retrieved May 6, 2012.
  4. ^ "Crosswalk - WebCL Overview".
  5. ^ "Accelerating web applications with OpenCL".
  6. ^ a b c d "WebCL Specification". www.khronos.org. Retrieved 2016-09-14.
  7. ^ "KhronosGroup/webcl-validator". GitHub. Retrieved 2016-09-14.

외부 링크