스크립트: OpenCL 테스트 - 페이지 2 1234 새 코멘트 Mykola Demko 2012.03.06 13:35 #11 Svetosha: 그리고 유용하지 않다면 이러한 기회는 무슨 소용이 있을까요)))))) 라이트 형제는 20 미터 만 비행했으며 (시범 비행이라고 말하자면) 그들의 발명품의 사용은 대륙 간 비행입니다 (그들이 차이를 느낀다고 말했듯이). Sceptic Philozoff 2012.03.08 06:45 #12 Zeleniy: 임신 전 난자. 나는 여전히 그것을 내놓는 이유를 이해하지 못합니다. 유용하고 확정되지 않은 것을하는 것이 더 나을 것입니다.스베토샤: 그리고 유용하지 않은 경우 이러한 기회를 사용하는 것))))))혁신은 냄새가 나지 않는 코의 관점에서 보편적 인 문제에 대해 판단하는 그러한 "설교 야즈 니 실무자"에 의해 총검에서 매우 자주 만납니다. 그런 다음 모든 사람이 혜택을 볼 수 있으면 공격을 안전하게 잊어 버립니다. Alexey Volchanskiy 2012.03.18 13:46 #13 Mathemat:혁신은 냄새가 나지 않는 코의 관점에서 보편적 인 문제를 판단하는 "회색 실무자"에 의해 반대편에서 매우 자주 만납니다. 그런 다음 모든 사람이 이점을 보게 되면 공격을 안전하게 잊어버립니다. 네, OpenCL은 정말 멋집니다. 솔직히 말해서 저는 오랫동안 5의 상황을 추적하지 않았습니다. 주문의 상호 흡수가 여전히 존재하나요? --- 2012.03.18 14:25 #14 VDev: 주문 흡수가 여전히 존재하나요?여전히 존재하는 것은 아닙니다. 다른 방법이 있을 수 없습니다. Renat Fatkhullin 2012.03.19 16:07 #15 다음 빌드부터는 ResourceCreate() 함수를 사용하여 그래픽 리소스를 즉시 생성할 수 있는 새로운 기능을 사용할 수 있습니다.다음은 이미지를 디스크에 덤프하지 않고도 디스크에서 리소스 액세스 충돌 없이 더 빠르게 작동하는 재작성 및 단순화된 스크립트입니다://+------------------------------------------------------------------+ //|OpenCLTest.mq5 | //| 저작권 2011, MetaQuotes Software Corp. //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2011, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //--- #define SIZE_X 512 #define SIZE_Y 512 //+------------------------------------------------------------------+ //| OpenCL 함수 코드| //+------------------------------------------------------------------+ const string cl_src= "__kernel void MFractal( \r\n" " float x0, \r\n" " float y0, \r\n" " float x1, \r\n" " float y1, \r\n" " uint max, \r\n" " __global uint *out) \r\n" " { \r\n" " size_t w = get_global_size(0); \r\n" " size_t h = get_global_size(1); \r\n" " size_t gx = get_global_id(0); \r\n" " size_t gy = get_global_id(1); \r\n" " float dx = x0 + gx * (x1-x0) / (float) w; \r\n" " float dy = y0 + gy * (y1-y0) / (float)h; \r\n" " float x = 0; \r\n" " float y = 0; \r\n" " float xx = 0; \r\n" " float yy = 0; \r\n" " float xy = 0; \r\n" " uint i = 0; \r\n" " while ((xx+yy)<4 && i<max) \r\n" " { \r\n" " xx = x*x; \r\n" " yy = y*y; \r\n" " xy = x*y; \r\n" " y = xy+xy+dy; \r\n" " x = xx-yy+dx; \r\n" " i++; \r\n" " } \r\n" " if(i==max) \r\n" " out[w*gy+gx] = 0; \r\n" " else \r\n" " out[w*gy+gx] = (uint)((float)0xFFFFFF/(float)max)*i; \r\n" " } \r\n"; //+------------------------------------------------------------------+ //| 스크립트 프로그램 시작 기능| //+------------------------------------------------------------------+ void OnStart() { int cl_ctx; int cl_prg; int cl_krn; int cl_mem; //--- OpenCL 객체 초기화 if((cl_ctx=CLContextCreate())==INVALID_HANDLE) { Print("OpenCL not found"); return; } if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE) { CLContextFree(cl_ctx); Print("OpenCL program create failed"); return; } if((cl_krn=CLKernelCreate(cl_prg,"MFractal"))==INVALID_HANDLE) { CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL kernel create failed"); return; } if((cl_mem=CLBufferCreate(cl_ctx,SIZE_X*SIZE_Y*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE) { CLKernelFree(cl_krn); CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL buffer create failed"); return; } //--- 실행 준비 float x0 =-2; float y0 =-0.5; float x1 =-1; float y1 = 0.5; uint max = 20000; uint offset[2]={0,0}; uint work [2]={SIZE_X,SIZE_Y}; string objname ="OpenCL_"+IntegerToString(ChartID()); string resname ="Mandelbrot_"+IntegerToString(ChartID()); //--- 변경할 수 없는 OpenCL 함수 매개 변수 설정 CLSetKernelArg(cl_krn,4,max); CLSetKernelArgMem(cl_krn,5,cl_mem); //--- 그래픽 표시용 객체 만들기 ObjectCreate(0,objname,OBJ_BITMAP_LABEL,0,0,0); ObjectSetInteger(0,objname,OBJPROP_XDISTANCE,4); ObjectSetInteger(0,objname,OBJPROP_YDISTANCE,26); //--- 초기 빈 그림 만들기 uint buf[]; ArrayResize(buf,SIZE_X*SIZE_Y); ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ObjectSetString(0,objname,OBJPROP_BMPFILE,"::"+resname); //--- 렌더링, 외부에서 멈추지 않을 때까지 while(!IsStopped()) { uint x=GetTickCount(); //--- 부동 매개변수 설정 CLSetKernelArg(cl_krn,0,x0); CLSetKernelArg(cl_krn,1,y0); CLSetKernelArg(cl_krn,2,x1); CLSetKernelArg(cl_krn,3,y1); //--- 프레임 렌더링 CLExecute(cl_krn,2,offset,work); //--- 프레임 데이터 가져오기 CLBufferRead(cl_mem,buf); //--- 렌더링 시간 출력 Comment(IntegerToString(GetTickCount()-x)+" msec per frame"); //--- 프레임을 메모리에 저장하고 그리기 ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ChartRedraw(); //--- 다음 프레임을 위한 작은 일시정지 및 매개변수 업데이트 Sleep(10); x0+=0.001 f; x1-=0.001 f; y0+=0.001 f; y1-=0.001 f; } //--- OpenCL 개체 제거 CLBufferFree(cl_mem); CLKernelFree(cl_krn); CLProgramFree(cl_prg); CLContextFree(cl_ctx); //--- 개체 제거 ObjectDelete(0,objname); } //+------------------------------------------------------------------+ 따라서 세부 렌더링을 위해 알파 채널이 있는 동적 32비트 이미지를 생성할 수 있습니다.동적으로 생성된 리소스는 리소스 관리자로 이동하여 터미널의 모든 MQL5 프로그램에서 사용할 수 있습니다. Igor Makanu 2012.03.19 17:06 #16 Renat ResourceCreate() 함수를 사용하여 그래픽 리소스를 즉석에서 생성할 수 있는 새로운 가능성이 열릴 예정입니다. ResourceCreate() 함수만 발표될까요, 아니면 그래픽 객체/프리미티브 작업을 위한 클래스도 준비될까요? Renat Fatkhullin 2012.03.19 17:17 #17 IgorM: ResourceCreate() 함수만 발표될 예정인가요, 아니면 그래픽 객체/프리미티브 작업을 위한 클래스가 준비될 예정인가요?이 함수는 이미 사용할 수 있습니다.이 기능을 사용하면 이미 자체 버퍼에 그리기 위한 자체 라이브러리를 만든 다음 객체에 바인딩할 수 있습니다. 따라서 외부 BMP 파일에서 외부 드로잉 라이브러리를 완전히 제거할 수 있습니다.다음은 작은 예입니다. buf 버퍼에 직접 그린 다음 이를 기반으로 리소스를 만들어 오브젝트에 할당할 수 있습니다. uint buf[]; ArrayResize(buf,SIZE_X*SIZE_Y); ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ObjectSetString(0,objname,OBJPROP_BMPFILE,"::"+resname); 조금 후에 기본 2D 가속 기능을 사용하여 동일한 버퍼에 그리기 위한 프리미티브 라이브러리를 만들 것입니다. 이렇게 하면 훨씬 빠르게 그릴 수 있습니다. --- 2012.03.19 17:25 #18 Renat:이 기능은 이미 사용할 수 있습니다.이 기능을 사용하면 이미 자체 버퍼에 그리기 위한 자체 라이브러리를 만든 다음 개체에 바인딩할 수 있습니다. 따라서 외부 BMP 파일에서 외부 드로잉 라이브러리를 완전히 제거할 수 있습니다.이 기능은 OpenCL 작업뿐만 아니라 모든 MQL에서 사용할 수 있나요? 그리고 생성된 BMP 리소스에서 알파 채널의 상황은 어떻게 되나요? Igor Makanu 2012.03.19 17:30 #19 조금 후에 기본 2D 가속 기능을 사용하여 동일한 버퍼에서 그리기위한 프리미티브 라이브러리를 만들 것입니다.나는 알지만 개발자가 그래픽 작업을위한 새로운 기능과 기본 클래스를 한 번에 발표하는 것이 더 낫습니다. 그렇지 않으면 다시 mql5 프로그래밍의 어려움에 대해 "홀에서 소리 치기"시작할 것입니다.ZY: "답글" 링크가 작동하지 않는 것은 저만인가요? 게시물을 인용하는 대신 "새 댓글" 창이 나타납니다. михаил потапыч 2012.03.19 17:33 #20 sergeev 2012.03.19 17:25 #. 그리고 생성 된 BMP 리소스에서 알파 채널의 상황은 어떻습니까? 그래서 그것은 작동하는 것 같습니다 1234 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
그리고 유용하지 않다면 이러한 기회는 무슨 소용이 있을까요))))))
혁신은 냄새가 나지 않는 코의 관점에서 보편적 인 문제에 대해 판단하는 그러한 "설교 야즈 니 실무자"에 의해 총검에서 매우 자주 만납니다.
그런 다음 모든 사람이 혜택을 볼 수 있으면 공격을 안전하게 잊어 버립니다.
혁신은 냄새가 나지 않는 코의 관점에서 보편적 인 문제를 판단하는 "회색 실무자"에 의해 반대편에서 매우 자주 만납니다.
그런 다음 모든 사람이 이점을 보게 되면 공격을 안전하게 잊어버립니다.
주문 흡수가 여전히 존재하나요?
여전히 존재하는 것은 아닙니다.
다른 방법이 있을 수 없습니다.
다음 빌드부터는 ResourceCreate() 함수를 사용하여 그래픽 리소스를 즉시 생성할 수 있는 새로운 기능을 사용할 수 있습니다.
다음은 이미지를 디스크에 덤프하지 않고도 디스크에서 리소스 액세스 충돌 없이 더 빠르게 작동하는 재작성 및 단순화된 스크립트입니다:
따라서 세부 렌더링을 위해 알파 채널이 있는 동적 32비트 이미지를 생성할 수 있습니다.
동적으로 생성된 리소스는 리소스 관리자로 이동하여 터미널의 모든 MQL5 프로그램에서 사용할 수 있습니다.
ResourceCreate() 함수만 발표될 예정인가요, 아니면 그래픽 객체/프리미티브 작업을 위한 클래스가 준비될 예정인가요?
이 함수는 이미 사용할 수 있습니다.
이 기능을 사용하면 이미 자체 버퍼에 그리기 위한 자체 라이브러리를 만든 다음 객체에 바인딩할 수 있습니다. 따라서 외부 BMP 파일에서 외부 드로잉 라이브러리를 완전히 제거할 수 있습니다.
다음은 작은 예입니다. buf 버퍼에 직접 그린 다음 이를 기반으로 리소스를 만들어 오브젝트에 할당할 수 있습니다.
조금 후에 기본 2D 가속 기능을 사용하여 동일한 버퍼에 그리기 위한 프리미티브 라이브러리를 만들 것입니다. 이렇게 하면 훨씬 빠르게 그릴 수 있습니다.
이 기능은 이미 사용할 수 있습니다.
이 기능을 사용하면 이미 자체 버퍼에 그리기 위한 자체 라이브러리를 만든 다음 개체에 바인딩할 수 있습니다. 따라서 외부 BMP 파일에서 외부 드로잉 라이브러리를 완전히 제거할 수 있습니다.
이 기능은 OpenCL 작업뿐만 아니라 모든 MQL에서 사용할 수 있나요?
그리고 생성된 BMP 리소스에서 알파 채널의 상황은 어떻게 되나요?
나는 알지만 개발자가 그래픽 작업을위한 새로운 기능과 기본 클래스를 한 번에 발표하는 것이 더 낫습니다. 그렇지 않으면 다시 mql5 프로그래밍의 어려움에 대해 "홀에서 소리 치기"시작할 것입니다.
ZY: "답글" 링크가 작동하지 않는 것은 저만인가요? 게시물을 인용하는 대신 "새 댓글" 창이 나타납니다.
sergeev 2012.03.19 17:25 #.
그리고 생성 된 BMP 리소스에서 알파 채널의 상황은 어떻습니까?