WebCL에서 생활 게임을 해요.
스킬 세트에 HTML5를 넣으면 당연히 Web Audio나 Web CL 같은 걸 사용할 수 있지???-자연계(@mizchi)December 3, 2014
이런 선동을 봤기 때문에 웹씨엘을 만져봤어요
http://webcl.nokiaresearch.com/
따라서 Firefox35가 위에 설치되어 있습니다.Firefox37 Nightly 안돼.
이런 게 있어요.
차리다
어쨌든 먼저 WebCL Tutorial 이 강좌의 코드를 베껴서 분위기를 잡아라.
전날릭스 씨가 WebCL 프로그래밍 시작라고 쓰여 있어서 해설이 생략되었습니다.
OpenCLC 언어OpenCL 1.1 Reference Pages에 대해서 보면서 썼어요.
또한 OpenCL과 GPU는 처음이기 때문에 로컬 작업 사이즈와 글로벌 작업 사이즈에 대해 작업 시스템·작업팀·차원수에 관하여 보도를 봤습니다.
이렇게 하는 게 이거예요.
'WebCL 생명 게임'http://t.co/Ik2lypzlHV#altjsdoit-초기치 민감성(@duxca)pic.twitter.com/Nge5t7zXMT
이 실현 중에
globalWS = [width, height]
cmdQueue.enqueueNDRangeKernel(kernel, globalWS.length, null, globalWS)
위에서 말한 바와 같이 전 세계 업무 항목만 사용하고 현지 업무 항목을 사용하지 않는 차원 2를 실현했다.그러나 이렇게 해서 2000×2000의 생명 게임이 100보를 이동하려 하였는데, 결과적으로 CPU를 사용하는 것이 GPU보다 빠르다
WebCL의 2000×2000 라이프 게임에서 HD Graphics 4000은 16722ms, Intel(R) Core(TM) i5-3427U [email protected]는 3778msDecember 4, 2014-초기치 민감성(@duxca)http://t.co/XKRyAvrMVA
원인은 내부 핵에서 전 세계 메모리로의 접근인 것 같다.
#altjsdoit 어젯밤에 알츠도트에 넣은 소스인가요?각 작업 항목마다 8차례에 걸쳐 글로벌 메모리를 읽습니다.로컬 메모리는 작업 그룹이 공유하기 때문에 로컬 메모리를 읽고 동기화하며 자신의 위치를 계산하고 쓰는 것이 좋습니다.Yosuke ONOUE (@_likr) December 4, 2014
kernel void cell(global char* vectorIn1,
global char* vectorOut,
uint vectorWidth){
int x = get_global_id(0);
int y = get_global_id(1);
int width = get_global_size(0);
int height = get_global_size(1);
int index = width * y + x;
int xplus = (x+1 <= width-1 ? x+1 : 0);
int yplus = (y+1 <= height-1 ? y+1 : 0);
int xminus = (0 <= x-1 ? x-1 : width-1);
int yminus = (0 <= y-1 ? y-1 : height-1);
int mylife = vectorIn1[width * y + x] > 0;
//グローバルメモリに9回アクセスしている
int nears[8] = {
vectorIn1[width * yplus + xminus],
vectorIn1[width * yplus + x ],
vectorIn1[width * yplus + xplus ],
vectorIn1[width * y + xminus],
// vectorIn1[width * y + x ],
vectorIn1[width * y + xplus ],
vectorIn1[width * yminus + xminus],
vectorIn1[width * yminus + x ],
vectorIn1[width * yminus + xplus ]
};
int lives = 0;
for(int i=0; i<8; i++){
if(nears[i]) lives++;
}
if(mylife){
if(lives == 0 || lives == 1){
vectorOut[index] = 0;
}else if(lives == 2 || lives == 3){
vectorOut[index] = 1;
}else{
vectorOut[index] = 0;
}
}else{
if(lives == 3){
vectorOut[index] = 1;
}else{
vectorOut[index] = 0;
}
}
}
OpenCL의 메모리 등급화는 방문의 빠른 순서에 따라 다음과 같다.나는 거기에 로컬 메모리를 이용한 프로그램을 쓰고 싶다
로컬 메모리에서 읽기, 동기화, 계산하고 자신의 위치를 쓰기 위해barrier를 사용하면 됩니다......몰 근처에서 가져왔기 때문에 로컬 메모리의 크기는 작업 그룹 내 항목의 수량과 같지 않습니다. 초기값 민감성(@duxca)@duxca
GPU 기기에 부착된 코드가 되려는 시도-초기값 민감성(@duxca)December 4, 2014
21세기 프로그래머가 쓴 프로그램이 아닙니다. 초기값 민감성 (@duxca) December 5, 2014
이처럼 평소 브라우저에서 부자 프로그래밍을 하는 저로서는 힘든 분야이기 때문에 이번엔 여기까지입니다.
다음에 로컬 메모리를 사용하여 실현하는 것에 도전합니다
Advent Calendar의 다음 책임자는 December 5, 2014입니다.
Reference
이 문제에 관하여(WebCL에서 생활 게임을 해요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/legokichi/items/7981702e84d2d2f0d3be텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)