2014-01-08 2 views
2

내 GPU 장치 인 Quadro FX 3700은 arch> sm_11을 지원하지 않습니다. 재배치 가능 장치 코드 (rdc)를 사용할 수 없었습니다. 따라서 나는 필요한 모든 유틸리티를 1 개의 큰 파일 (x.cu)로 결합했습니다. x.cu에 대한 개요를 알려면 각 구성원 기능이 5 개인 2 개의 클래스, 장치 기능 20 개, 전역 커널 1 개, 커널 호출자 기능 1 개가 들어 있습니다.CUDA 아키텍처 -sm_11 NSight에서 컴파일 문제가 발생했습니다.

지금, Nsight를 통해 컴파일하려고하면 %를 (를) 빌드하여 3을 표시합니다.. 내가 그것은 다음과 같은 메시지를 보여주고 오랜만에 컴파일

nvcc x.cu -o output -I"." 

를 사용하여 컴파일 시도, optimalOrderKernel 글로벌 커널입니다

/tmp/tmpxft_0000236a_00000000-9_Kernel.cpp3.i(0): Warning: Olimit was exceeded on function _Z18optimalOrderKernelPdP18PrepositioningCUDAdi; will not perform function-scope optimization. 
    To still perform function-scope optimization, use -OPT:Olimit=0 (no limit) or -OPT:Olimit=45022 
/tmp/tmpxft_0000236a_00000000-9_Kernel.cpp3.i(0): Warning: To override Olimit for all functions in file, use -OPT:Olimit=45022 
    (Compiler may run out of memory or run very slowly for large Olimit values) 

. 컴파일하는 데 시간이 많이 걸리지 않아야합니다. 이 메시지 뒤에있는 이유, 특히 Olimit을 이해하고 싶습니다.

+0

[CUDA 컴파일 및 링크] (http://stackoverflow.com/questions/20966846/cuda-compilation-and-linking)의 문제는 카드의 계산 기능 때문 이었습니까? – JackOLantern

+0

정확히 도움이 필요한 것은 무엇입니까? 느린 컴파일? 다른 것? – talonmies

답변

1

Olimit은 분명합니다. 이것은 컴파일러가 코드 최적화에 소비 할 수있는 노력의 한계입니다.

대부분의 코드는 nvcc을 사용하여 잘 컴파일됩니다. 그러나 컴파일러는 완벽하지 않으며 일부 겉보기에는 무해한 코드로 인해 컴파일러가 일반적으로 빠른 최적화 프로세스에서 오랜 시간을 소비 할 수 있습니다.

코드를 제공하지 않았으므로 일반에 대해서 말하고 있습니다.

컴파일러가 특정 최적화 단계에서 불균형하게 긴 시간을 보내는 경우가 있기 때문에 Olimit은 편리한 워치 독을 제공하므로 왜 그렇게 오래 걸리는지 알 수 있습니다. 또한 Olimit은 너무 오래 걸리는 최적화 프로세스에서 워치 독처럼 작동합니다. 초과되면 특정 최적화 단계가 중단되고 대신 코드의 "덜 최적화 된"버전이 생성됩니다.

내가받은 컴파일러 메시지가 의도에 따라 Olimit을 수정하는 방법에 대해 아주 분명하다고 생각합니다. 워치 독 기간을 늘리려면 오버라이드하거나 워치 독 기간을 완전히 비활성화하십시오 (0으로 설정). 이 경우 컴파일 프로세스는 메시지에서 알 수 있듯이 임의의 시간이 걸리거나 메모리가 부족할 수 있습니다.