WebCL
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
WebCL은 웹 브라우저에서 병렬 컴퓨팅을 가능하게 하는 API 표준이다. 현재 WebCL을 기본적으로 지원하는 브라우저는 없지만, 노키아, 모질라, 모토로라, 삼성 등에서 WebCL을 구현한 애드온이 개발되었다. WebCL은 OpenCL 코드를 HTML 내에 포함하여 사용하며, 커널을 사용하여 병렬 처리를 수행한다. WebCL 애플리케이션은 장치 접근, 커널 전송 및 실행, 결과 검색, 데이터 사용 단계를 거쳐 실행된다. WebCL은 예외 처리를 통해 오류를 관리하며, 보안 취약점을 해결하기 위해 메모리 접근, 초기화, 서비스 거부 공격 방지 등의 기능을 제공한다. Sushi는 WebCL을 사용한 자바스크립트 라이브러리이다.
더 읽어볼만한 페이지
- 웹 개발 - Ajax
Ajax는 웹 페이지 전체를 새로고침하지 않고 비동기적으로 서버와 통신하여 웹 애플리케이션의 일부를 업데이트하는 웹 개발 기술로, XMLHttpRequest 객체의 등장으로 가능해졌으며 HTML, CSS, DOM, JavaScript, JSON 등의 기술을 통합하여 동적인 사용자 인터페이스를 구현한다. - 웹 개발 - WebXR
WebXR은 웹 브라우저에서 가상 현실 및 증강 현실 콘텐츠를 구현하기 위한 API로, 다양한 장치 및 플랫폼에서 몰입형 웹 경험을 제공하며, 구글, 메타, 모질라 등 여러 기업과 단체가 개발에 참여하여 지속적인 업데이트를 통해 기능 향상을 목표로 한다. - API - Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. - API - ASIO
ASIO는 독일 스타인버그에서 개발한 오디오 입출력 API 규격으로, 낮은 지연 시간과 멀티 채널 I/O를 지원하며 윈도우 운영체제에서 주로 사용된다. - 크로스 플랫폼 소프트웨어 - MSN
MSN은 1995년 마이크로소프트가 윈도우 95와 함께 출시한 웹 포털이자 관련 서비스 모음으로, 뉴스, 엔터테인먼트, 스포츠, 금융 등 다양한 콘텐츠를 제공하며 주요 온라인 서비스를 통합하는 허브 역할을 수행한다. - 크로스 플랫폼 소프트웨어 - 구글 포토
구글 포토는 사진 및 동영상 저장, 공유, 관리 기능을 제공하는 구글의 클라우드 기반 서비스로, 자동 분류, 얼굴 인식, 검색 기능을 제공하지만 2021년부터 무료 무제한 저장 용량 제공 정책이 변경되었고, 2024년에는 기술의 군사적 이용에 대한 윤리적 논란이 있었다.
WebCL - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
![]() | |
개발자 | WebCL 워킹 그룹 |
최신 릴리스 버전 | 1.0 |
최신 릴리스 날짜 | 2014년 3월 19일 |
운영 체제 | 크로스 플랫폼 |
장르 | API |
웹사이트 | WebCL 공식 웹사이트 |
2. 구현
WebCL은 새롭게 만들어진 표준이기 때문에, 현재 WebCL을 기본적으로 지원하는 브라우저는 없다. 그러나 WebCL을 구현한 네이티브가 아닌 애드온들이 존재한다. 노키아는 WebCL 확장을 개발하였다.[14] 모질라는 OpenGL ES 3.1 Compute Shader를 더 선호하여 WebCL을 개발할 계획이 없다.[15]
2. 1. 현재 표준을 반영한 WebCL 확장
현재 WebCL을 기본적으로 지원하는 브라우저는 없다. 그러나 WebCL을 구현한 네이티브가 아닌 애드온들은 존재한다. 예를 들어 노키아는 WebCL 확장을 개발하였다.[14] 모질라는 OpenGL ES 3.1 Compute Shader를 더 선호하여 WebCL을 개발할 계획이 없다.[15]회사 | 브라우저 | 링크 |
---|---|---|
노키아 | Firefox | [https://web.archive.org/web/20120510173953/http://webcl.nokiaresearch.com/ 노키아 WebCL 확장] |
모질라 | Firefox | [https://web.archive.org/web/20160303191941/http://hg.mozilla.org/projects/webcl/ 모질라 WebCL 프로젝트] |
삼성 | WebKit | [https://web.archive.org/web/20150218105743/https://github.com/SRA-SiliconValley/webkit-webcl 삼성 WebKit WebCL] |
노키아 | Firefox | [https://github.com/toaarnio/webcl-firefox 노키아 WebCL Firefox 확장] |
인텔 | Crosswalk | [http://www.crosswalk-project.org/ 인텔 Crosswalk 프로젝트] |
노키아 샘플 코드에서는 `<script type="x-opencl">`를, 삼성 샘플 코드에서는 `<script type="x-kernel">`라는 형태로 HTML 내에 OpenCL 코드를 기재하여 사용한다.
2. 2. 과거 WebCL 구현 (현재 지원 중단)
WebCL은 새롭게 만들어진 표준이기 때문에, 현재 WebCL을 기본적으로 지원하는 브라우저는 없다. 그러나 WebCL을 구현한 네이티브가 아닌 애드온들은 존재한다. 예를 들어 노키아는 WebCL의 확장을 개발하였다.[14] 모질라는 OpenGL ES 3.1 Compute Shader를 더 선호하여 WebCL을 개발할 계획이 없다고 밝혔다.[15]노키아는 WebCL 확장 기능을 개발했고,[3] 모질라는 WebGL 컴퓨트 셰이더(Compute kernel)를 선호하여 WebCL을 구현할 계획이 없으며, 이는 다시 WebGPU를 선호하여 폐기되었다.
WebCL을 이용하기 위한 애드온은 다음과 같다:
- 모토로라 (Node.js) - https://github.com/Motorola-Mobility/node-webcl
- 노키아 (Firefox) - https://web.archive.org/web/20120510173953/http://webcl.nokiaresearch.com/
- 모질라 (Firefox) - https://web.archive.org/web/20160303191941/http://hg.mozilla.org/projects/webcl/
- 삼성 (웹키트) - https://github.com/SRA-SiliconValley/webkit-webcl (사용 불가)
- 노키아 (파이어폭스) - https://github.com/toaarnio/webcl-firefox (2014년 11월 이후 중단, FF 34의 마지막 버전)
- 인텔 (크로스워크) - http://www.crosswalk-project.org/[4]
노키아의 샘플 코드에서는 `<script type="x-opencl">`, 삼성의 샘플 코드에서는 `<script type="x-kernel">`라는 형태로 HTML 내에 OpenCL 코드를 기재하여 사용하고 있다.
3. 예제 코드
병렬 프로그램의 기본 단위는 커널이다. 커널은 특정 작업을 수행하는 데 사용되는 모든 병렬화 가능한 작업으로, 주로 함수 형태로 구현된다. 프로그램은 하나 이상의 커널로 구성될 수 있으며, 커널을 구현하려면 작업이 병렬화 가능해야 한다. 데이터 종속성과 실행 순서는 효율적인 병렬화 알고리즘을 생성하는 데 중요한 역할을 한다. C 컴파일러에서 수행되는 루프 언롤링과 같은 간단한 예시는 하위 섹션에서 자세히 다루고 있으므로, 해당 내용을 참고하면 된다.[5]
3. 1. C 코드 예제
병렬 프로그램의 기본 단위는 커널이다. 커널은 특정 작업을 수행하는 데 사용되는 모든 병렬화 가능한 작업이다. 함수는 커널로 실현될 수 있다. 프로그램은 하나 이상의 커널로 구성될 수 있다. 커널을 실현하려면 작업이 병렬화 가능해야 한다. 데이터 종속성과 실행 순서는 효율적인 병렬화 알고리즘을 생성하는 데 중요한 역할을 한다. 간단한 예로 C 컴파일러에서 수행되는 루프 언롤링을 생각할 수 있다. 다음은 그 예시이다.```c
for (i = 0; i< 3 ; i++)
c[i] = a[i] + b[i];
```
위 코드는 다음과 같이 언롤링될 수 있다.
```c
c[0] = a[0] + b[0];
c[1] = a[1] + b[1];
c[2] = a[2] + b[2];
```
위의 문장은 병렬화되어 동시에 실행될 수 있다. 커널은 i번째 반복의 스냅샷만 커널 내부에 캡처하는 유사한 접근 방식을 따른다.
커널을 사용하여 위의 코드를 다시 작성하면 다음과 같다.
```c
__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];
}
```
WebCL 애플리케이션 실행 단계는 다음과 같다.
1. 장치에 대한 접근을 허용하고 컨텍스트를 제공한다.
2. 커널을 장치로 넘겨준다.
3. 장치가 커널을 실행하게 한다.
4. 장치에서 결과를 검색한다.
5. JavaScript 내에서 데이터를 사용한다.
이에 대한 자세한 내용은[5]에서 찾을 수 있다.
4. 예외 목록
WebCL은 자바스크립트 기반 구현이므로 오류가 발생해도 오류 코드를 반환하지 않는다. 대신 `OUT_OF_RESOURCES`, `OUT_OF_HOST_MEMORY` 또는 WebCL 고유의 `WEBCL_IMPLEMENTATION_FAILURE`와 같은 예외를 발생시킨다.[6] 예외 객체는 기계가 읽을 수 있는 이름과 오류를 설명하는 사람이 읽을 수 있는 메시지를 설명한다.
예외 객체의 구문은 다음과 같다.
```
exception WebCLException : DOMException {
DOMString name; // 숫자로 된 오류 코드의 문자열 표현, 예: "INVALID_VALUE"
DOMString? message; // 예외를 발생시킨 원인에 대한 구현 특정 설명
};
```
위 코드에서 message 필드는 NULL 값이 될 수 있다.
다른 예외는 다음과 같다.
- `INVALID_OPERATION` – 이 함수의 블로킹 형식이 `WebCLCallback`에서 호출된 경우
- `INVALID_VALUE` – `eventWaitList`가 비어 있는 경우
- `INVALID_CONTEXT` – `eventWaitList`에 지정된 이벤트가 동일한 컨텍스트에 속하지 않는 경우
- `INVALID_DEVICE_TYPE` – `deviceType`이 주어졌지만 유효한 열거 값 중 하나가 아닌 경우
- `DEVICE_NOT_FOUND` – 주어진 `deviceType`과 일치하는 `WebCLDevice`가 없는 경우
예외에 대한 자세한 내용은 사양 문서를 참조할 수 있다.[6]
'해제'된 객체를 호출하려고 할 때 발생하는 또 다른 예외가 있다. release 메서드를 사용하면 객체가 영구적으로 삭제되지 않고 해당 객체와 관련된 리소스를 해제한다. 이 예외를 피하기 위해 `releaseAll` 메서드를 사용할 수 있으며, 이 메서드는 리소스를 해제할 뿐만 아니라 생성된 모든 관련 객체도 삭제한다.
5. 보안
WebCL은 웹 애플리케이션용으로 개발된 개방형 소프트웨어이므로 설계 및 개발 분야에서도 많은 취약성이 존재할 수 있다. 이러한 이유로 WebCL 개발자들은 보안을 최우선으로 고려해야 했다. 해결된 몇 가지 문제는 다음과 같다.
- '''범위 밖 메모리 접근:''' 할당된 공간 밖의 메모리 위치에 접근하여 발생하는 문제이다. 공격자는 해당 메모리 위치에 저장된 중요한 데이터를 다시 쓰거나 지울 수 있다. 이러한 경우, 컴파일 시점에 오류가 발생해야 하며, 런타임에는 0을 반환하여 프로그램이 메모리를 덮어쓰지 못하도록 해야 한다. 이 취약점을 처리하기 위해 개발자 그룹인 크로노스 그룹(Khronos Group)은 WebCL 검증기(WebCL Validator) 프로젝트를 시작했다.[7]
- '''메모리 초기화:''' 이는 이전 애플리케이션의 메모리 위치에 애플리케이션이 접근하는 것을 방지하기 위해 수행된다. WebCL은 현재 애플리케이션을 실행하기 전에 사용되는 모든 버퍼와 변수를 0으로 초기화하여 이를 방지한다. OpenCL 1.2에는 이를 가능하게 하는 'cl_khr_initialize_memory' 확장 기능이 있다.[6]
- '''서비스 거부:''' 웹 애플리케이션에 대한 가장 일반적인 공격은 WebCL 또는 브라우저로 완전히 제거할 수 없다. OpenCL은 WebCL에서 너무 오래 걸리거나 많은 리소스를 소비하는 컨텍스트를 감지하고 종료하는 데 사용할 수 있는 감시 타이머와 선점형 멀티태스킹을 제공할 수 있다. 이전과 마찬가지로 서비스 거부 공격을 일으킬 수 있는 프로세스를 종료할 수 있는 OpenCL 1.2의 확장 기능 'cl_khr_terminate_context'가 있다.[6]
6. 애플리케이션
Sushi JavaScript library|스시 자바스크립트 라이브러리영어는 파이어폭스, 크로미움-WebCL, Node.js에서 사용할 수 있는 WebCL 기반 고속 행렬 계산 라이브러리이다.[1]
https://github.com/mil-tokyo/sushi
7. 관련 브라우저 버그
참조
[1]
웹사이트
Khronos Releases WebCL 1.0 Specification
https://www.khronos.[...]
2014-03-19
[2]
웹사이트
Khronos Releases WebCL 1.0 Specification
https://www.khronos.[...]
Khronos Group
2014-03-19
[3]
웹사이트
WebCL
http://webcl.nokiare[...]
Nokia Research
2012-05-06
[4]
웹사이트
Crosswalk - WebCL Overview
https://crosswalk-pr[...]
2017-02-01
[5]
웹사이트
Accelerating web applications with OpenCL
http://www.ibm.com/d[...]
[6]
웹사이트
WebCL Specification
https://www.khronos.[...]
2016-09-14
[7]
웹사이트
KhronosGroup/webcl-validator
https://github.com/K[...]
2016-09-14
[8]
웹사이트
WebCLでWebデベロッパもGPUやCPUのマルチコアをブラウザ内で有効利用(==並列処理)できるようになる
http://jp.techcrunch[...]
TechCrunch Japan
2016-09-01
[9]
문서
WebCL Overview and Roadmap
http://www.khronos.o[...]
[10]
웹사이트
WebCL Overview - The Khronos Group Inc
https://www.khronos.[...]
Khronos Group
2024-06-28
[11]
웹사이트
WebCLでWebデベロッパもGPUやCPUのマルチコアをブラウザ内で有効利用(==並列処理)できるようになる
http://jp.techcrunch[...]
TechCrunch Japan
2016-09-01
[12]
문서
WebCL Specification - §Differences between WebCL and OpenCL 1.1
https://www.khronos.[...]
[13]
웹인용
Khronos Releases WebCL 1.0 Specification
https://www.khronos.[...]
[14]
웹사이트
WebCL
http://webcl.nokiare[...]
2012-05-10
[15]
문서
Mozilla WebCL Comment
https://bugzilla.moz[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com