OpenCL: MQL5의 내부 구현 테스트 - 페이지 44

 
joo :

예처럼 보입니다.

나는 까다로운 구성(눈으로 보기 힘든)을 사용하지 않으려고 노력하기 때문에 확실하지 않지만, 코드 속도를 높일 수 있기 때문에 아마도 헛된 것입니다.

루프의 각 반복에서 변수 b가 다시 선언되기 때문에 코드가 더 느려질 것입니다.

내 코드는 여전히 더 짧고 빠릅니다. 속도와 동등성을 모두 확인할 수 있습니다.
 "__kernel void MFractal(                                    \r\n"
"                       __global int *out                   \r\n"
"                      )                                    \r\n"
"  {                                                        \r\n"
"   int i = get_global_id(0);                               \r\n"
"   out[i]= i;                                              \r\n"
"  }                                                        \r\n" ; //;-))
;-)
 
MetaDriver : 내 코드는 여전히 더 짧고 빠릅니다. 속도와 동등성을 모두 확인할 수 있습니다 ;-)
아니, 그건 공평하지 않아. Andrey의 코드를 처리하고 속도를 높일 수 있습니다.
 
Mathemat :
아니, 그건 공평하지 않아. Andrey의 코드를 처리하고 속도를 높일 수 있습니다.

내가 뭘 한거지?

옵티마이저에서 필요한 것은 무엇입니까? 결과의 동등성을 유지하면서 오버헤드를 줄입니다! 확인하십시오. 모든 것이 페니로 수렴됩니다.

:)

// 그런데 !! 이 코드는 #define BUF_SIZE 1024*1024*4 를 사용해도 내 드라이버를 충돌시키지 않습니다 !!!

// 이것은 획기적인 것입니다!

;))))

 
MetaDriver :

내가 뭘 한거지?

옵티마이저에서 필요한 것은 무엇입니까? 결과의 동등성을 유지하면서 오버헤드를 줄입니다! 확인하십시오. 모든 것이 페니로 수렴됩니다.

:)

수렴합니까? 어떻게 확인 했습니까? :영형
 
joo :
수렴합니까? 어떻게 확인 했습니까? :영형
어떻게! 계산기에! 8개를 병렬로 발사하여 확인했습니다.
 
MetaDriver :
어떻게! 계산기에! 8개를 병렬로 발사하여 확인했습니다.

귀하의 교육자는 거짓말을 하고 있습니다. :)

루프는 0+1+2+3+...+99999999를 더합니다. 그리고 10,000걸음마다 값은 0입니다.

뭐 했어? - 파리의 번호를 할당하고 그게 다야. 내 결과와 당신의 결과가 어떻게 일치합니까?

 

나는 여기서 담배를 조금 피웠고 이런 의심이 들었다.

 "__kernel void MFractal(                                    \r\n"
"                       __global int *out                   \r\n"
"                      )                                    \r\n"
"  {                                                        \r\n"
"   out[get_global_id(0)]= get_global_id(0);                \r\n"
"  }                                                        \r\n" ;

더 빠르게 실행됩니다. 사실 get_global_id()는 함수가 아니라 초고속 레지스터 연산일 가능성이 큽니다.

프로파일러 없이는 확인할 수 없습니다. 누군가 정말로 그것을 필요로하고 원한다면 스튜디오에서 스튜디오로 결과를보고하십시오. 편리합니다.
 
MetaDriver :

옵티마이저에서 필요한 것은 무엇입니까? 결과의 동등성을 유지하면서 오버헤드를 줄입니다! 확인하십시오. 모든 것이 페니로 수렴됩니다.

// 그런데 !! 이 코드는 #define BUF_SIZE 1024*1024*4 를 사용해도 내 드라이버를 충돌시키지 않습니다 !!!

담배를 더 피우고 짜증을 냈다. 반면에 드라이버가 떨어지지 않기 때문에 결과의 동등성은 이미 불완전 합니다.

젠장.. 정말 짜증나네요. :(

 
MetaDriver : . 반면에 드라이버가 떨어지지 않기 때문에 결과의 동등성은 이미 불완전 합니다.

아니, 담배를 심하게 피웠다.

1^3 + 2^3 + 3^3 + ... + 1000000000^3 = 1000000000^2 * (1000000000 + 1)^2 / 4

왼쪽과 오른쪽 - 같은 것, 완전한 동등함.

왼쪽 식으로 만 돌을 꽤 오랫동안 가열하고 오른쪽 식으로 거의 즉시 프로세서가 눈치 채지 못하고 차갑게 유지합니다.

PS OpenCL 1.2로 업그레이드되었습니다(베타 버전). 버전 번호 - sse2 뒤에 작은 추가 사항에 주의하십시오.

 2012.03 . 22 07 : 43 : 28      Terminal        CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80 GHz with OpenCL 1.2 ( 2 units, 2793 MHz, 7912 Mb, version 2.0 (sse2))

과감하다고는 할 수 없지만 일부 테스트에서는 가속화되었습니다. Tast_Mand_에서 (음, 당신은 변태입니다, Andryukha ) - 5-10 퍼센트. 조금, 하지만 좋은.

 
joo :

귀하의 교육자는 거짓말을 하고 있습니다. :)

루프는 0+1+2+3+...+99999999를 더합니다. 그리고 10,000걸음마다 값은 0입니다.

뭐 했어? - 파리의 번호를 할당하고 그게 다야. 내 결과와 당신의 결과가 어떻게 일치합니까?

나는 당신에게 다시 확인을 생각할 시간을 거의 하루를 주었다. 당신은 여전히 주장하고 있습니까? :)

구경하자:

 // Это твой код (оригинал)
"  {                                \r\n"
"   int i = get_global_id(0);       \r\n"
"   for(int u=0;u<100000000;u++)   \r\n"
"   {                           \r\n"
"    out[i]+=u;              \r\n"   
"    if(out[i]>10000)     \r\n"
"      out[i]=0;         \r\n" // после десятитысячного шага итерации этот оператор начнёт выполняться в каждом цикле.
"   }                    \r\n" // т.е. на выходе из цикла по любому будем иметь out[i] = 0;
"   out[i]+= i;          \r\n" // ecли к нулю прибавить номер мухи то получится... сам посчитай..... на калькуляторе... :)
"  }                     \r\n" ;// есть ещё вариант, надёжнее - распечатай результаты и сравни.  ;-)))