2016-11-07 1 views
-1

나는 다음과 같은 문제에 대한 조언을 요청하고있다 :GPU 브 루트 포스 구현

내가 (평)의 OpenCL과 GPU를 기반으로 무차별 알고리즘을 쓰고 연구 프로젝트하십시오.

지금 내가 가지고 할

(나는 JTR 밖에 알고) 단어 (양 = 1024 * 64) .I 패스와 버퍼의 둘레에 각각 채우고있다 파이썬에서 브 루트 포스 - 발전기 버퍼를 GPU 커널에 연결합니다. GPU는 버퍼의 각 값에 대해 MD5 해쉬 값을 계산하고 주어진 값과 비교합니다. 잘 작동합니다.

하지만 :

나는 이것이 정말 내가 GPU에서 얻을 수있는 최대 성능 생각하지 않는다 - 또는인가? CPU가 버퍼를 채우고 GPU에 '단지'해시 계산을 위해 합격해야 할 때 병목 현상이 발생하지 않습니까? 아니면 잘못되었습니다. 이것은 이미 fastet 또는 거의 fastet 성능입니다. 도망?

나는이 질문을하기 전에 여기서 많은 연구를 해왔다. 지금까지 GPU 커널에서 무차별 강제 구현을 찾을 수 없었습니다 - 왜?

들으

편집 1 :

내가 알고 싶은 것을 다른 방식으로 그것을 설명하려고합니다. 평균적인 컴퓨터가 있다고 가정 해 보겠습니다. GPU에서 brute-force-algorithm을 수행하는 것은 CPU보다 빠릅니다 (올바르게 수행하는 경우). 일부 GPU 무차별 공격 도구를 살펴본 결과, GPU 커널에서 전체 무차별 대항 구현을 찾지 못했습니다.

지금은 "워드 패키지"를 GPU에 전달하고 작업을 수행하도록했습니다 (해쉬 & 비교). 일반적인 방법처럼 보입니다. brute-force 알고리즘을 '분할하는 것'이 더 빠르지 않아 GPU의 각 유닛이 자체적으로 "단어 패키지"를 생성합니다.

저는 GPU 작업에서 CPU 작업을 수행하는 대신 일반 값으로 CPU에서 GPU로 패키지를 전달하는 것이 궁금합니다. GPU에서 무차별 알고리즘을 분리하는 것이 불가능하거나 GPU로 포팅하려는 노력의 가치가있는 것이 아니기 때문입니까?

답변

1

"brute-force"접근법의 성능에 대해.

내가 일반적인 방법은 GPU 작업에 또한 CPU의 일을 대신 GPU로 CPU의 값으로 패키지를 전달하는 이유를 궁금해 할 모든! GPU에서 무차별 알고리즘을 분리하는 것이 불가능하거나 GPU로 포팅하려는 노력의 가치가있는 것이 아니기 때문입니까?

알고리즘의 세부 사항을 모르지만 일반적으로 하이브리드 CPU-GPU 알고리즘을 만들기 전에 몇 가지 사항을 고려해야합니다. 그냥 몇 가지 이름 :

  • 다른 아키텍처 (최고의 CPU 알고리즘은 아마 최고의 GPU 알고리즘 아니다).
  • 여분의 동기화 지점.
  • 다른 메모리 공간 (PCIe/네트워크 전송을 의미 함).
  • 더 복잡한 알고리즘

  • 더 복잡한 미세 조정

    .

  • 공급 업체 정책.

그럼에도 불구하고 GPU의 성능과 CPU를 동시에 결합하는 예제가 많이 있습니다. 일반적으로 알고리즘의 순차적 또는 고도로 발산 된 부분은 CPU에서 실행되지만 균등하고 컴퓨팅 집약적 인 부분은 GPU에서 실행됩니다. 다른 응용 프로그램은 CPU를 사용하여 입력 데이터를 GPU 처리 (예 : 데이터 레이아웃 변경)에보다 적합한 형식으로 사전 처리합니다. 마지막으로 MAGMA 프로젝트와 같이 CPU에서 상당한 작업을 수행하는 순수 성능을 목표로하는 애플리케이션이 있습니다.

요약하면, 실제로 가능한 경우 알고리즘의 세부 사항에 달려 있거나 CPU-GPU 시스템 전체를 최대한 활용하는 하이브리드 알고리즘을 설계하는 것이 가치가 있다고 대답합니다.

나는 당신이 두 부분으로 질문을 분해해야한다고 생각 현재의 접근 방식의 성능에 대한

:

  • 그것은 내 GPU 커널이 ​​효율적인가요?
  • GPU에서 실제로 작업하는 데 걸리는 시간은 얼마나됩니까? 우리가 정말 그것으로 당신을 도울 수 있도록 처음에 대해서는

, 당신은 당신의 GPU 커널에 대한 정보를 제공하지 않았지만, 일반적으로 최적화 방법이 적용

  1. 인가 그것은 당신의 계산 메모리/바인딩 계산?
  2. GPU 피크 메모리 대역폭과 얼마나 멀리 떨어져 있습니까?

어떤 종류의 최적화/알고리즘을 적용해야하는지 알기 위해서는이 질문부터 시작해야합니다. roofline performance model을 살펴보세요.

두 번째 질문에 대해서는 자세히 설명하지 않더라도 응용 프로그램에서 작은 메모리 전송에 많은 시간을 소비하는 것처럼 보입니다 (메모리 전송 최적화 방법은 article을 참조하십시오). 몇 마디 만 보내면 PCIe를 시작하는 오버 헤드로 인해 GPU 장치를 사용하면 얻을 수있는 성능상의 이점을 없앨 수 있습니다. 따라서 대량의 메모리를 저장하는 대신 많은 수의 작은 버퍼를 보내는 것은 일반적으로 이동하는 방법이 아닙니다.

성능을 원하는 경우 계산 및 메모리 전송을 겹칠 수 있습니다. 자세한 내용은 this article을 참조하십시오.

최적화를 구현하기 전에 일반적으로 응용 프로그램의 프로필을 작성하는 데 시간이 필요합니다. 그것은 당신에게 많은 시간을 절약 할 수 있습니다.

+0

시간 동안 Thx! 내 질문을 업데이트했습니다. 다시 한번 살펴보고 그것에 대해 어떻게 생각하는지 알려주시겠습니까? 제 질문은 제 프로그램과 성능에 대해 명확하지 않습니다. GPU 알고리즘의 일반적인 구현에 관한 것입니다. – tobnic

+0

반갑습니다. 귀하의 알고리즘에 대한 구체적인 내용을 모르겠습니다.몇 가지 아이디어를 제공했지만 질문에 특정 태그를 추가하는 것이 좋습니다. – srodrb

관련 문제