WebCL
WebCL![]() | |
개발자 | WebCL 작업 그룹 |
---|---|
안정적 해제 | 1.0 / 2014년 3월 19일;[1] 전 |
운영 체제 | 크로스 플랫폼 |
유형 | API |
웹사이트 | www |
HTML |
---|
비교 |
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을 구현할 계획이 없다.
- Mozilla (Firefox) - hg.mozilla.org/projects/webcl/
WebCL 작업 초안
- Samsung (웹킷) - github.com/SRA-SiliconValley/webkit-webcl
(github.com/SRA-SiliconValley/webkit-webcl) - Nokia (Firefox) - github.com/toaarnio/webcl-firefox
(2014년 11월 이후 다운, FF 34용 마지막 버전) - 인텔(크로스워크) - www.crosswalk-project.org
[4]
예제 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 응용프로그램을 실행하려면 다음 단계를 수행하십시오.
- 장치에 대한 액세스 허용 및 컨텍스트 제공
- 커널을 장치에 전달
- 디바이스가 커널을 실행하도록 함
- 장치에서 결과 검색
- JavaScript 내의 데이터 사용
동일한 항목에 대한 자세한 내용은 다음에서[5] 확인할 수 있다.
예외 목록
자바스크립트 기반 구현인 WebCL은 오류가 발생할 때 오류 코드를 반환하지 않는다.대신 다음과 같은 예외를 던진다.OUT_OF_RESOURCES
,OUT_OF_HOST_MEMORY
또는 WebCL별WEBCL_IMPLEMENTATION_FAILURE
예외 객체는 기계 판독 가능 이름과 오류를 설명하는 사람이 읽을 수 있는 메시지를 설명한다.[6]구문은 다음과 같다.
예외적인 WebCLException : 돔시셉션 { DOMString 이름을 붙이다; // 숫자 오류 코드의 문자열 표현(예: "INVALID_VALUE") DOMString? 메세지; // 예외를 초래한 이유에 대한 구현별 설명 };
위의 코드에서 메시지 필드는 NULL 값이 될 수 있음을 알 수 있다.기타 예외는 다음과 같다.
INVALID_OPERATION
– 이 기능의 차단 형태가 a에서 호출되는 경우WebCLCallback
INVALID_VALUE
– ifeventWaitList
비어 있다INVALID_CONTEXT
– 이벤트가 지정된 경우eventWaitList
같은 맥락에 속하지 않다INVALID_DEVICE_TYPE
– ifdeviceType
지정된 값이지만 유효한 열거된 값 중 하나가 아님DEVICE_NOT_FOUND
– 없는 경우WebCLDevice
주어진 것과 일치하는 사용 가능한deviceType
예외에 대한 자세한 내용은 사양 문서에서 확인할 수 있다.[6]
'해제된' 물체를 부르려고 할 때 제기되는 또 다른 예외가 있다.릴리스 방법을 사용하면 개체가 영구적으로 삭제되지 않고 해당 개체와 연결된 리소스를 확보한다.이런 예외를 피하기 위해releaseAll
자원을 자유롭게 할 뿐만 아니라 생성된 모든 관련 객체를 삭제하는 방법을 사용할 수 있다.
보안
WebCL은 웹 애플리케이션을 위해 개발된 오픈 엔드 소프트웨어로서, 설계 및 개발 분야에서도 취약성의 범위가 많다.이로 인해 WebCL에 종사하는 개발자들은 보안을 가장 중요시해야 했다.다루어진 우려사항은 다음과 같다.
- Out of Bounds 메모리 액세스:이는 할당된 공간 밖에서 메모리 위치에 액세스함으로써 발생한다.공격자는 그러한 메모리 위치에 저장된 모든 중요한 데이터를 다시 쓰거나 지울 수 있다.이러한 경우가 발생할 때마다 컴파일 시간에 오류가 발생해야 하며, 프로그램이 메모리를 오버라이드하지 않도록 런타임에 0을 반환해야 한다.이 취약성 처리에 대해 Khronos 그룹([7]개발자)에 의해 시작된 프로젝트 WebCL Validator.
- 메모리 초기화:이는 애플리케이션이 이전 애플리케이션의 메모리 위치에 액세스하지 못하도록 하기 위해 수행된다.WebCL은 현재 애플리케이션을 실행하기 전에 0에 사용된 변수인 모든 버퍼를 초기화하여 이러한 현상이 발생하지 않도록 한다.OpenCL 1.2에는 이를 가능하게 하는 'cl_khr_initialize_memory' 확장자가 있다.[6]
- 서비스 거부:웹 응용 프로그램에 대한 가장 일반적인 공격은 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
참고 항목
참조
- ^ "Khronos Releases WebCL 1.0 Specification".
- ^ a b "Khronos Releases WebCL 1.0 Specification". Khronos Group. Retrieved March 19, 2014.
- ^ "WebCL". Nokia Research. Retrieved May 6, 2012.
- ^ "Crosswalk - WebCL Overview".
- ^ "Accelerating web applications with OpenCL".
- ^ a b c d "WebCL Specification". www.khronos.org. Retrieved 2016-09-14.
- ^ "KhronosGroup/webcl-validator". GitHub. Retrieved 2016-09-14.