ProgramingTip

CUDA는 재귀를 지원합니까?

bestdevel 2021. 1. 7. 21:28
반응형

CUDA는 재귀를 지원합니까?


CUDA는 재귀를 지원합니까?


2.0 및 CUDA 3.1을 지원하는 NVIDIA 하드웨어에서 수행됩니다.

CUDA C / C ++에 추가 된 새로운 언어 기능 다음 과 가능 합니다.

함수 포인터 및 재귀 지원으로 기존의 많은 알고리즘을 Fermi GPU로 쉽게 이식 할 수 있습니다.

http://developer.nvidia.com/object/cuda_3_1_downloads.html

함수 포인터 : http://developer.download.nvidia.com/compute/cuda/sdk/website/CUDA_Advanced_Topics.html#FunctionPointers

재귀 : NVIDIA 웹 사이트에서 코드 샘플을 수 없습니다 포럼에서 누군가 다음을 게시합니다.

__device__ int fact(int f)
{
  if (f == 0)
    return 1;
  else
    return f * fact(f - 1);
}

예, NVIDIA CUDA 프로그래밍 가이드를 참조하십시오 .

장치 함수는 기능이있는 2.0의 장치 용으로 사용할 수있는 장치 코드의 재귀만을 지원합니다.

사용하신 비용은 Fermi 카드가 필요합니다.


특정 칩에 대한 재귀 만 지원하지만 "에뮬레이트 된"재귀를 피할 수 있습니다. CUDA 레이트 레이서에 확인 타임 재귀를 어떻게 사용했는지 확인하십시오 .


CUDA 4.1 릴리스에서 CUDA는 __device__ 함수에 재 함수 귀를 지원하고 __global__ 함수에 지원하지 않습니다.


호환 장치에서 2.0 기능이있는 이후에만


물론 그렇습니다.하지만이를 Kepler 아키텍처가 필요합니다. 고전적인 빠른 정렬에 대한 최신 예를 확인하십시오.

http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/

내가 아는 한 최신 Kepler GK110만이 동적 메시지 처리를 지원할 때 종류의 재귀 호출과 내에서 새 이름 생성이 가능합니다. Kepler GK110 이전에는 불가능했습니다. 모든 Kepler 아키텍처가이를 지원하는 것은 GK110 만 지원합니다.

재귀가 필요한 경우 Tesla K20이 필요할 것입니다. 나는 Fermi가 그것을 지원하는지 확실하지 않습니다. : \하지만 케플러는 확실합니다. =)


모든 재귀 알고리즘은 스택과 루프로 구현할 수 있습니다. 훨씬 더 고통 스럽지만 재귀가 필요하면 효과가 있습니다.


CUDA 3.1은 재귀를 지원합니다


알고리즘이 많은 재귀를 포함하는 경우 지원 여부에 관계없이 GPU 용으로 설계되지 않은 사건 발생 알고리즘을 재 설계하거나 더 나은 CPU를 얻을 수 있습니다. 어느 쪽이든 더 좋을 것입니다 (많은 경우에, 규모가 더 좋습니다). 그런 다음 재귀를 수행하십시오. GPU.


예, 실제 버전에서 지원됩니다. 하지만 재귀의 실제 깊이를 알기 위해 스택 귀의 메모리 할당을 예측할 수 있습니다. 따라서 스택 귀하의 목적에 충분하지 않을 수 있고 대규모 기본 스택 크기를 수동으로 증가시킬 수 있습니다.


예, 재귀를 지원합니다. 그러나 GPU에서 재귀를 수행하는 것은 좋은 생각이 아닙니다. 각기가 그것을 할 것이기입니다.


1.1 기능 기능을 NVIDIA GPU로 PC에서 방금 시도했습니다. 재귀가 아직 지원되지 않는다. 따라서 가동과는 관련이 없지만 하드웨어 자체는

참조 URL : https://stackoverflow.com/questions/3644809/does-cuda-support-recursion

반응형