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

 
Mathemat :

그리고 OpenCL(두 번째 테스트)을 에뮬레이트한 석재의 결과는 내 것과 비교하여도 의심스러울 정도로 약한 것 같습니다("GPU"에서 약 10초 사용).

당신은 CPU-schnom GPU에 대해 생각했습니다 - 내 것보다 더 많은 코어. 그리고 4코어(장치 1)가 있는 깨끗한 CPU를 사용했습니다.
 
joo : 당신은 나보다 CPU 코어가 더 많았습니다. 그리고 4개의 코어가 있는 깨끗한 CPU를 사용했습니다.

아니야, 앤드류 . imho, 2개의 코어가 있는 깨끗한 CPU에서도 고려했습니다. "for"에는 3개의 인수가 있습니다. 첫 번째는 철근 콘크리트이고 두 번째와 세 번째는 그렇게 단단하지 않습니다.

1. 내 시스템에는 OpenCL 장치가 하나만 있습니다. 반면에 어떤 경우에도 이러한 장치 중 하나는 호스트여야 합니다. 베어 CPU. 그들은. GPU가 아니라 GPU Caps에서 테스트했습니다.

따라서 OpenCL을 에뮬레이트하는 CPU 장치는 SSE2 이상을 지원하는 모든 gem이 될 수 있다고 생각합니다. 내장 그래픽이 있든 없든 상관없습니다. 그건 그렇고, Intel Core i5-750을 포함합니다.

2. 내 CPU 그래픽은 Intel HD Graphics입니다. 6개의 파이프라인이 있지만 24개의 프로세서(스레드, 파리?)가 있습니다. 나는 당신과 내가 가지고있는 것과 가까운 그래픽 특성에 동그라미를 쳤습니다.

플라이 주파수가 스톤 주파수보다 훨씬 낮기 때문에 더 낮은 주파수에서 24개의 GPU 스레드가 순수한 CPU와 비교하여 실행 속도를 25배 이상(내가 가짐)으로 가속화할 것이라고 상상할 수 없습니다. 남은 것은 GPU가 아니라 OpenCL CPU 에뮬레이션입니다. 제 생각이 틀릴 수도 있지만 인텔 스톤의 그래픽 부분 아키텍처에 대한 자세한 데이터가 없습니다.

귀하의 통합 그래픽은 Intel HD Graphics 2000과 거의 동일하지만 무언가가 비뚤어졌습니다. Sandy Bridge 라인에서 거의 최고 수준의 Intel 석재의 이상하게 낮은 결과를 설명하는 방법을 모르겠습니다. 대략적인 추정에 따르면 가속도는 50 정도여야 합니다.

3. 공식적으로는 Ivy Bridge만이 Intel HD Graphics 2500 및 4000과 함께 통합 Intel 그래픽 에 대해 OpenCL을 지원 합니다(이미 64개의 Fast Fly가 있을 것이며 AMD 통합보다 훨씬 빠름). 그리고 지금은 정말 아닌 것 같습니다.

나는 내 i3가 계산 속도를 높이지 않는 이유를 아직 이해하지 못했습니다.

 
Mathemat :

...

나는 내 i3가 계산 속도를 높이지 않는 이유를 아직 이해하지 못했습니다.

만세! 벌었다!

2012.04.09 15:32:01 터미널 CPU: 정품 Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz(OpenCL 1.1 포함)(4개 장치, 3092MHz, 4008Mb, 버전 2.0)
2012.04.09 15:32:01 터미널 MetaTrader 5 x64 빌드 619 시작 (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) 1594 패스에서 CPU MaxResult==3.64642에 대한 결과
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU 시간 = 243409ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) 1594 패스에서 GPU MaxResult==3.64642에 대한 결과
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) GPU 시간 = 93460ms
2012.04.09 15:54:41 ParallelTester_00-02-316x7x3j (USDJPY,H1) OpenCL 초기화 OK!
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.573211516347179
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) 3357 패스에서 Cpu MaxResult==3.82222에 대한 결과
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU 시간 = 243907ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) 3357 패스에서 GPU MaxResult==3.82222에 대한 결과
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU 시간 = 94787ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL 초기화 OK!

 
Ashes :

만세! 벌었다!

2012.04.09 15:32:01 터미널 CPU: 정품 Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz(OpenCL 1.1 포함)(4개 장치, 3092MHz, 4008Mb, 버전 2.0)
2012.04.09 15:32:01 터미널 MetaTrader 5 x64 빌드 619 시작 (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU 시간 = 243409ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) 1594 패스에서 GPU MaxResult==3.64642에 대한 결과
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) GPU 시간 = 93460ms

글쎄, 이것은 이미 0.7보다 낫습니다. 적어도 약간의 가속도입니다. 그리고 너는 뭘 했다구?

비록 ... 그것은 매우 약합니다. 내 Pentium G840에서 다음과 같이:

2012.04.08 22:01:08 터미널 CPU: 정품 Intel(R) Pentium(R) CPU G840 @ 2.80GHz(OpenCL 1.2 포함)(2개 장치, 2793MHz, 8040Mb, 버전 2.0(sse2))

2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) CpuTime/GpuTime = 26.0524992748719
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) 1775 패스에서 Cpu MaxResult==4.04242에 대한 결과
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) 카운트 개시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) CPU 시간 = 269461ms
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) 1775 패스에서 GPU MaxResult==4.04242에 대한 결과
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) 카운트 표시기 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) GPU 시간 = 10343ms
2012.04.09 22:06:55 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) OpenCL 초기화 OK!

예산 스톤이 같은 회사의 더 강력한 회사를 거의 10배 이상 우회하는 것이 정상인지 아닌지 어떻게 생각하십니까? 그들의 아키텍처는 거의 동일하고 i3 명령어 세트는 적어도 나쁘지 않습니다...

 
Mathemat :

글쎄, 이것은 이미 0.7보다 낫습니다. 적어도 약간의 가속도입니다. 그리고 너는 뭘 했다구?

비록 ... 그것은 매우 약합니다. 내 Pentium G840에서 다음과 같이:

예산 스톤이 같은 회사의 더 강력한 회사를 거의 10배 이상 우회하는 것이 정상인지 아닌지 어떻게 생각하십니까? 그들의 아키텍처는 거의 동일하고 i3 명령어 세트는 적어도 나쁘지 않습니다...

HD 그래픽 드라이버를 업데이트하고 새로운 AMD OpenCL SDK를 영어로 설치했습니다.

성능 차이와 관련하여 다음과 같이 가정합니다. OCL 버전이 다릅니다. + 처음에는 주파수 측면에서 CPU보다 GPU가 유리합니다(GPU 부분이 동일하다고 가정).

 
Ashes : 성능 차이와 관련하여 다음과 같이 가정합니다. OCL 버전이 다릅니다. + 처음에는 주파수 측면에서 CPU보다 GPU가 유리합니다(GPU 부분이 동일하다고 가정).

GPU OpenCL 장치가 없습니다. 내 답변 joo 를 참조하세요. 그리고 당신은 그것을 가지고 있어서도 안됩니다(나는 통합 그래픽에 대해 이야기하고 있습니다). 모든 것이 CPU 코어에서 가장 순수한 에뮬레이션으로 진행됩니다. 예, 그리고 주파수 이점은 최대 2배이며 성능은 10배 정도 다릅니다. 문제.

둘째, 버전 차이는 여기에 게시된 모든 테스트의 성능에 절대적으로 영향을 미치지 않습니다. 그리고 1.1에서는 모든 것이 똑같이 빨랐습니다(내 G840에서).

 
Mathemat :

GPU OpenCL 장치가 없습니다. 내 답변 joo 를 참조하세요. 그리고 당신은 그것을 가지고 있어서도 안됩니다 (나는 통합 그래픽에 대해 이야기하고 있습니다). 모든 것이 CPU 코어에서 가장 순수한 에뮬레이션으로 진행됩니다. 예, 그리고 주파수 이점은 최대 2배이며 성능은 10배 정도 다릅니다. 문제.

둘째, 버전 차이는 여기에 게시된 모든 테스트의 성능에 절대적으로 영향을 미치지 않습니다. 그리고 1.1에서는 모든 것이 똑같이 빨랐습니다(내 G840에서).

당신이 맞는 것 같습니다. 나는 일찍 기뻐했다. 프로세서 부하를 보면 스크립트의 GPU 계산이 4개의 코어/스레드(CPU 부하가 100%)로 병렬화되고 CPU 부분이 실제로 하나의 코어(25~30%)에서 실행되고 있음을 알 수 있습니다.

따라서 4 * 0.7(오버헤드?) ~= 2.8 - GPU / CPU가 됩니다.

AMD SDK가 x64 버전의 "외부" 하드웨어에 대한 모든 기능을 사용하지 않는다는 점을 제외하고(내가 이해하는 한 x32가 있음) 그러한 차이가 귀하와 저의 경우에서 어디에서 오는지 명확하지 않습니다. HD 그래픽 드라이버 버전(Intel Corporation, 2012년 2월 14일, 8.15.10.2653).

G840 및 i3-2100과 intel.com의 비교:

추신. 죄송합니다. 8040Mb를 놓쳤습니다(예: x32/x64가 종료됨).

 
Mathemat :

둘째, 버전 차이는 여기에 게시된 모든 테스트의 성능에 절대적으로 영향을 미치지 않습니다. 그리고 1.1에서는 모든 것이 똑같이 빨랐습니다(내 G840에서).

OpenCL 1.2는 약 10%에서 1.1로 증가했습니다.

2012.04.10 09:41:19 터미널 MetaTrader 5 x64 빌드 619 시작 (MetaQuotes Software Corp.)
2012.04.10 09:41:19 터미널 CPU: 정품 Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz(OpenCL 1.1 포함)(4개 장치, 3092MHz, 4008Mb, 버전 2.0)

2012.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL 초기화 OK!
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU 시간 = 94365ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) 1914 패스에서 GPU MaxResult==3.52408에 대한 결과
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU 시간 = 244968ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) 1914 패스에서 Cpu MaxResult==3.52408에 대한 결과
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.595962486091242
2012.04.10 10:20:22 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL 초기화 OK!
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU 시간 = 93756ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) 1519 패스에서 GPU MaxResult==4.06735에 대한 결과
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU 시간 = 242426ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) 1519 패스에서 Cpu MaxResult==4.06735에 대한 결과
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.585711847775076


2012.04.10 11:33:50 터미널 MetaTrader 5 x64 빌드 619 시작 (MetaQuotes Software Corp.)
2012.04.10 11:33:50 터미널 CPU: 정품 Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz(OpenCL 1.2 포함)(4개 장치, 3092MHz, 4008Mb, 버전 2.0(sse2,avx))

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL 초기화 OK!
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU 시간 = 86923ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) 970 패스에서 GPU MaxResult==4.27665에 대한 결과
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU 시간 = 246965ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) 970 패스에서 Cpu MaxResult==4.27665에 대한 결과
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.841192779816619
2012.04.10 11:47:50 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL 초기화 OK!
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU 시간 = 87610ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) 781 패스에서 GPU MaxResult==4.43566에 대한 결과
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU 시간 = 245873ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) 카운트 지시자 = 16; 카운트 기록 막대 = 50000; 카운트 패스 = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) 781 패스에서 Cpu MaxResult==4.43566에 대한 결과
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
제가 알기로는 데이터가 있는 2차원/다차원 배열을 GPU로 전송하고 싶다면 데이터 표현을 구조로 사용하고 구조를 전달할 수 있습니까?
 
Ashes : OpenCL 1.2는 1.1에 비해 약 10%의 이득을 주었습니다.

예, 그것에 대해. 그러나 이득은 때때로 중요하지 않습니다.

AMD SDK가 "외부" 하드웨어의 모든 기능을 사용하지 않는다는 점을 제외하고

처음에는 그런 가설이 있었습니다.

그러나 GPU Caps 유틸리티의 CPU OpenCL 테스트는 모두 꽤 잘 통과했으며 확인했습니다. 유틸리티는 트레일러에 있습니다. CPU 에뮬레이션만 트위스트합니다.

일부 테스트에서 i3의 fps는 G840보다 몇 배 더 높습니다(4D Quaternion Julia Set - 약 17 대 4-5).

따라서 AMD가 여기서 훌륭한 일을 했다는 것이 밝혀졌습니다.

문제는 터미널에 있습니다. 어떤 이유에서인지 G840을 "이해"하지만 AMD APP SDK가 설치된 Intel의 쿨러 보석을 "이해하지" 않습니다. 일주일 전에 서비스 데스크에 메시지를 보냈지만 지금까지 응답이 없습니다.

파일: