2012-05-06 4 views
1

죄송합니다. 분명하지만 C++과 Cuda를 지금 공부하고 있으며 이것이 가능한지 알고 싶으면 관련 섹션에 더 집중할 수 있습니다.CUDA가 자체 작업 대기열을 처리 할 수 ​​있습니까?

기본적으로 내 문제는 병렬 처리가 가능합니다. 실제로 현재 여러 서버에서 실행 중입니다. ,

  • 폐기 데이터를 (아무것도하지 않는

    1. 데이터를 (에 저장) 유지 : 내 프로그램은 작업 항목 (아주 작은 목록)를 가져 와서 그 위에 루프를 실행하고 3 결정 중 하나 만든다 이렇게하는 것에는 확실 상기
    2. 프로세스 데이터() 그것 때문에 데이터를 수정하고 처리하는 큐에 다시 보낸다.

  • 가 재귀로 사용하지만 각 부분이 독립적으로 만들어 비록 내가 하나의 CPU에 의해 더 오래 묶여 있지만 그것의 부정적인 영향은 앞뒤로 전달되는 메시지가 많이 있습니다. CUDA가 작동하는 방식과 작업을 제출하는 방법에 대해 높은 수준에서 논의하고 있지만 CUDA가 장치 자체의 큐를 관리 할 수 ​​있습니까?

    현재의 생각 프로세스는 C++ 호스트의 큐를 관리 한 다음 처리를 장치로 보낸 다음 결과를 호스트로 다시 보내고 장치로 다시 보낸다고합니다. CUDA 메모리 자체에 대기열을 넣을 수 있는지, 커널이 작업을하고 직접 작업을 보낼 수 있는지 알고 싶었습니다.

    CUDA를 사용하여 이와 같은 작업을 수행 할 수 있습니까? 아니면이를 수행하는 더 좋은 방법이 있습니까?

    +0

    가능한 복제본 [C++에서 작업 대기열을 관리하는 데 사용할 수있는 내장 라이브러리가 있습니까?] (http://stackoverflow.com/questions/10464838/is-there-a-embedded-library-i-can -use-to-manage-a-work-queue-in-c) – talonmies

    답변

    1

    중간 결과를 기기에 보관할 수 있는지 묻는 중입니다. 그 대답은 '예'입니다. 즉, 새 작업 항목을 장치로 복사하고 장치에서 완성 된 항목 만 복사하면됩니다. 여전히 결정되지 않은 작업 항목은 커널 호출 사이에 장치에 남아있을 수 있습니다.

    이것을 위해 CUDA Thrust를 조사하고 싶을 수 있습니다. 추력은 변환을위한 효율적인 알고리즘을 가지고 있습니다. 사용자 정의 논리와 결합 할 수 있습니다 (추력 매뉴얼에서 "커널 융합"을 검색하십시오.) 아마도 당신의 처리는 변환이라고 생각할 수 있습니다. 작업 항목의 벡터를 가져 와서 새 벡터 두 개, 보관할 항목과 아직 결정되지 않은 항목 중 하나입니다.

    호스트가 장치의 메모리를 인식하고 있습니까 (또는 모니터링 할 수 있습니까?)? 내 관심사는 GPU 온보드 메모리를 초과하는 데이터를 인식하고 처리하는 방법입니다.

    커널 내에서 메모리를 할당하고 해제 할 수는 있지만 매우 효율적이지는 않습니다. 대신 cudaMalloc()cudaFree()과 같은 CUDA 호출을 실행하거나 Thrust를 사용하는 경우 커널 호출간에 벡터를 만들거나 크기를 조정하여 메모리를 관리하십시오.

    이 "수동"메모리 관리를 사용하면 cudaMemGetInfo()과 함께 사용 된 메모리 양을 추적 할 수 있습니다.

    완료된 작업 항목을 호스트로 다시 복사하므로 장치에 남은 작업 항목 수와 커널 호출에 필요한 최대 메모리 양을 알 수 있습니다.

    각 변환에 대해 소스 및 대상 벡터를 교환하는 것이 좋습니다. 간단한 예를 들어, 여러 단계로 필터링하려는 작업 항목 집합이 있다고 가정 해보십시오.벡터 A를 작성하고 작업 항목으로 채 웁니다. 그런 다음 같은 크기의 벡터 B를 만들고 비워 두십시오. 필터링 후 A에서 작업 항목의 일부가 B로 이동되었으며 사용자는 그 개수를가집니다. 이제 필터를 다시 실행합니다. 이번에는 B를 소스로, A를 대상으로 사용합니다.

    +0

    로저 감사합니다.이 사실을 알게되어 매우 기쁩니다. 당신의 대답이 관련 질문을 촉발 시켰습니다. 호스트가 장치의 메모리를 인식하고 있습니까 (또는 모니터링 할 수 있습니까?)? 내 관심사는 GPU 온보드 메모리를 초과하는 데이터를 인식하고 처리하는 방법입니다. –

    +1

    답변에 대한 몇 가지 메모를 추가했습니다. –

    관련 문제