NVIDIA vs AMD : GPGPU 성능
둘 다 코딩 경험이있는 사람들의 의견을 듣고 싶습니다. 나 자신은 NVIDIA에 대한 경험이 있습니다.
NVIDIA CUDA는 경쟁사보다 훨씬 더 인기있는 것 같습니다. (이 포럼의 질문 태그를 세는 것만으로도 'cuda'는 'opencl'3 : 1을 능가하고 'nvidia'는 'ati'15 : 1을 능가하며 'ati-stream'에 대한 태그는 전혀 없습니다.
반면에 Wikipedia에 따르면 ATI / AMD 카드는 특히 달러당 훨씬 더 많은 잠재력을 가지고 있어야합니다. 현재 시장에서 가장 빠른 NVIDIA 카드 인 GeForce 580 (500 달러)은 1.6 단 정밀도 TFlops입니다. AMD Radeon 6970은 370 달러에 구입할 수 있으며 2.7TFlops입니다. 580에는 772MHz에서 512 개의 실행 장치가 있습니다. 6970에는 880MHz에서 1536 개의 실행 장치가 있습니다.
NVIDIA보다 AMD의 종이 이점은 얼마나 현실적이며 대부분의 GPGPU 작업에서 실현 될 가능성이 있습니까? 정수 작업은 어떻게 되나요?
은유 적으로 말하면 ati는 nvidia에 비해 좋은 엔진을 가지고 있습니다. 하지만 엔비디아는 더 나은 차를 가지고 있습니다 : D
이는 대부분 nvidia가 과학 컴퓨팅 (BLAS, FFT)에 필요한 중요한 라이브러리를 개발하기 위해 상당한 자원 (돈과 사람)을 투자 한 다음이를 홍보하는 데 다시 좋은 일을했기 때문입니다. 이것이 CUDA가 ati (또는 OpenCL)에 비해 여기에서 태그를 지배하는 이유 일 수 있습니다.
일반적으로 GPGPU 작업에서 실현되는 이점은 메모리 전송 대역폭, 좋은 컴파일러 및 드라이버와 같은 다른 문제 (애플리케이션에 따라 다름)에 따라 결정됩니다. nvidia는 더 성숙한 컴파일러, 리눅스에서 더 안정적인 드라이버 (과학 컴퓨팅에서 널리 사용되기 때문에 리눅스)를 가지고 있으며, 적어도 현재로서는 CUDA에 유리하게 균형을 기울입니다.
2013 년 1 월 12 일 수정
이 게시물을 작성한 지 2 년이 지났지 만 여전히 때때로 조회수를 끌어들이는 것 같습니다. 그래서 몇 가지를 명확히하기로 결정했습니다
- AMD는 게임을 강화했습니다. 이제 BLAS 및 FFT 라이브러리가 모두 있습니다. 수많은 타사 라이브러리도 OpenCL 주변에서 잘립니다.
- Intel은 OpenMP와 OpenCL을 모두 지원하는 Xeon Phi를 공개했습니다. 또한 기존 x86 코드를 사용하는 기능도 있습니다. 주석에서 언급했듯이 현재 SSE없이 제한된 x86
- NVIDIA와 CUDA는 사용 가능한 라이브러리 범위에서 여전히 우위를 점하고 있습니다. 그러나 그들은 이전처럼 OpenCL에 집중하지 않을 수 있습니다.
간단히 말해서 OpenCL은 지난 2 년 동안 격차를 좁혔습니다. 현장에 새로운 선수가 있습니다. 그러나 CUDA는 여전히 팩보다 약간 앞서 있습니다.
나는 CUDA와 OpenCL에 대해 강한 감정을 가지고 있지 않습니다. 아마도 OpenCL은 개방형 표준이라는 점에서 장기적인 미래입니다.
그러나 현재의 NVIDIA 대 GPGPU 용 ATI 카드 (그래픽 성능이 아니라 GPGPU)에 대해 강한 의견이 있습니다. 이를 위해 현재 상위 500 대 클러스터 목록 에서 NVIDIA가 AMD 4 시스템을 1로, gpgpu.org 에서 NVIDIA 에 대한 검색 결과 (문서, 온라인 리소스 링크 등)를 이끌고 있음 을 지적하겠습니다 . AMD 6 : 1의 결과보다 많습니다.
이 차이의 큰 부분은 사용 가능한 온라인 정보의 양입니다. NVIDIA CUDA Zone 과 AMD의 GPGPU Developer Central을 비교해보십시오 . 시작하는 개발자를위한 항목의 양은 비교에 가깝지 않습니다. NVIDIAs 사이트에서는 아마도 당신과 같은 문제를 해결하는 사람들이 작성한 수많은 문서와 기고 코드를 찾을 수 있습니다. NVIDIA 및 다른 곳에서 온 수많은 온라인 수업과 개발자의 모범 사례 가이드 등과 같은 매우 유용한 문서를 찾을 수 있습니다. 무료 개발 도구 (프로파일 러, cuda-gdb 등)의 가용성은 NVIDIA의 방식을 압도적으로 기울입니다.
(편집자 :이 단락의 정보는 더 이상 정확하지 않습니다.) 그리고 일부 차이점은 하드웨어이기도합니다. AMD 카드는 피크 플롭 측면에서 더 나은 사양을 가지고 있지만 그 중 상당 부분을 확보하려면 문제를 완전히 독립적 인 많은 스트림 프로세서로 분리해야 할뿐만 아니라 각 작업 항목도 벡터화해야합니다. GPGPUing 코드가 충분히 어렵다는 점을 감안할 때 추가 아키텍처 복잡성은 일부 프로젝트를 만들거나 중단하기에 충분합니다.
이 모든 결과는 NVIDIA 사용자 커뮤니티가 계속 성장하고 있다는 것입니다. 내가 아는 3 ~ 4 개 그룹 중 GPU 클러스터 구축을 고려하고있는 그룹 중 누구도 AMD 카드를 심각하게 고려하고 있지 않습니다. 이는 NVIDIA 측에서 더 많은 그룹이 논문을 작성하고 코드를 기고하는 등을 의미합니다.
저는 NVIDIA 실이 아닙니다. 이 방식이 아니고 똑같이 매력적인 GPGPU 플랫폼이 두 개 (또는 그 이상!) 있었으면 좋겠습니다. 경쟁이 좋다. 아마도 AMD는 곧 게임을 강화할 것이며 다가오는 퓨전 제품은 매우 매력적으로 보입니다. 그러나 누군가에게 오늘 구매할 카드와 지금 당장 노력을 기울이는 데 시간을 할애 할 위치에 대한 조언을 제공하면서 양심적으로 두 개발 환경이 똑같이 좋다고 말할 수는 없습니다.
추가 편집 : 위의 내용은 원래 질문에 대한 답변 측면에서 약간 타원이라고 생각하므로 좀 더 명확하게 만들겠습니다. 하드웨어에서 얻을 수있는 성능은 무한한 시간을 사용할 수있는 이상적인 세상에서 기본 하드웨어와 프로그래밍 언어의 기능에만 의존합니다. 그러나 실제로 투자 된 고정 된 시간으로 얻을 수있는 성능의 양은 개발 도구, 기존 커뮤니티 코드 기반 (예 : 공개적으로 사용 가능한 라이브러리 등)에 크게 좌우됩니다. 이러한 고려 사항은 모두 NVIDIA를 강력하게 지적합니다.
(편집자 :이 단락의 정보는 더 이상 정확하지 않습니다.) 하드웨어 측면에서 AMD 카드의 SIMD 장치 내 벡터화 요구 사항으로 인해 NVIDIA 하드웨어보다 종이 성능을 훨씬 더 어렵게 만듭니다.
AMD와 NVIDIA 아키텍처의 주요 차이점은 AMD는 알고리즘의 동작이 컴파일 타임에 결정될 수있는 문제에 최적화되어 있고 NVIDIA는 알고리즘의 동작이 런타임에만 결정될 수있는 문제에 최적화되어 있다는 것입니다.
AMD는 ALU에 더 많은 트랜지스터를 사용할 수있는 비교적 단순한 아키텍처를 가지고 있습니다. 문제가 컴파일 타임에 완전히 정의되고 다소 정적이고 선형적인 방식으로 아키텍처에 성공적으로 매핑 될 수있는 한 AMD가 NVIDIA보다 더 빠르게 알고리즘을 실행할 수있는 좋은 기회가 있습니다.
반면에 NVIDIA의 컴파일러는 컴파일 시간에 분석을 덜 수행합니다. 대신 NVIDIA는 런타임에만 나타나는 알고리즘의 동적 동작을 처리 할 수있는 로직에 더 많은 트랜지스터를 사용하는 고급 아키텍처를 가지고 있습니다.
GPU를 사용하는 대부분의 슈퍼 컴퓨터가 NVIDIA와 함께한다는 사실은 과학자들이 계산을 실행하는 데 관심이있는 문제 유형이며 일반적으로 AMD보다 NVIDIA 아키텍처에 더 잘 매핑된다는 것입니다.
OpenCL에서 몇 가지 반복 코딩을 수행했습니다. 그리고 NVIDIA와 ATI에서 실행 한 결과는 거의 동일합니다. 동일한 가치 ($) 카드에서 거의 동일한 속도.
두 경우 모두 CPU에 비해 속도가 ~ 10x-30x였습니다.
CUDA를 테스트하지는 않았지만 무작위 메모리 가져 오기 문제를 마술처럼 해결할 수 있을지 의문입니다. 요즘 CUDA와 OpenCL은 거의 동일하며 CUDA보다 OpenCL에서 더 많은 미래를 볼 수 있습니다. 주된 이유는 인텔이 프로세서 용 OpenCL을 사용하여 드라이버를 출시하기 때문입니다. 이것은 미래에 큰 발전이 될 것입니다 (CPU에서 OpenCL의 16, 32 또는 64 스레드를 실행하는 것은 정말 빠르고 GPU로 이식하기 쉽습니다).
Fermi와 Kepler를위한 CUDA를 몇 년간 사용한 후 GCN 카드 용 OpenCL로 시간을 보냈지 만 여전히 CUDA를 프로그래밍 언어로 선호하고 옵션이 있다면 CUDA가있는 AMD 하드웨어를 선택할 것입니다.
NVIDIA와 AMD (OpenCL)의 주요 차이점 :
AMD의 경우 :
Even with Maxwell, NVidia still has longer command latencies and complex algorithms are likely to be 10 faster on AMD(assuming same theoretical Tflops) after easy optimizations for both. The gap was up to 60% for Kepler VS GCN. It's harder to optimize complex kernels for NVidia in this sense.
Cheap cards.
OpenCL is open standard with other vendors available.
For Nvidia:
Has the Tesla line of hardware that's suitable for reliable high server loads.
New Maxwell is way more power efficient.
Compiler and tools are way more advanced. AMD still can't get to implement
maxregcout
parameter, so you can easily control occupancy on various hardware and their compiler has a lot of random ideas of what is an optimal code that change with every version, so you may need to revisit old code every half a year because it suddenly became 40% slower.
At this point if GPGPU is your goal, CUDA is the only choice, since opencL with AMD is not ready for server farm and it's significantly harder to write efficient code for AMD due to the fact that the compiler always seems to be "in beta".
I am new to GPGPU but I have some experience in scientific computing (PhD in Physics). I am putting together a research team and I want to go towards using GPGPU for my calculations. I had to choose between the available platforms. I decided on Nvidia, for a couple of reasons: while ATI might be faster on paper, Nvidia has a more mature platform and more documentation so it will be possible to get closer to the peak performance on this platform.
Nvidia also has an academic research support program, one can apply for support, I just received a TESLA 2075 card which I am very happy about. I don't know if ATI or Intel supports research this way.
What I heard about OpenCL is that it's trying to be everything at once, it is true that your OpenCL code will be more portable but it's also likely to not exploit the full capabilities of either platform. I'd rather learn a bit more and write programs that utilize the resources better. With the TESLA K10 that just came out this year Nvidia is in the 4.5 TeraFlops range so it is not clear that Nvidia is behind ... however Intel MICs could prove to be a real competitor, especially if they succeed in moving the GPGPU unit to the motherboard. But for now, I chose Nvidia.
My experience in evaluating OpenCL floating point performance tends to favor NVIDIA cards. I've worked with a couple of floating point benchmarks on NVIDIA cards ranging from the 8600M GT to the GTX 460. NVIDIA cards consistently achieve about half of theoretical single-precisino peak on these benchmarks.
The ATI cards I have worked with rarely achieve better than one third of single-precision peak. Note that my experience with ATI is skewed; I've only been able to work with one 5000 series card. My experience is mostly with HD 4000 series cards, which were never well supported. Support for the HD 5000 series cards is much better.
I would like to add to the debate. For us in the business of software, we can compromise raw single-precision performance to productivity but even that I do not have to compromise since, as already pointed out, you cannot achieve as much performance on on ATI's hardware using OpenCL as you can achieve if you write in CUDA on NVIDIA's hardware.
And yes, with PGI's announcement of x86 compiler for CUDA, there won't be any good reason to spend more time and resources writing in OpenCL :)
P.S: My argument might be biased since we do almost all our GPGPU work on CUDA. We have an Image Processing/Computer Vision library CUVI (CUDA for Vision and Imaging) which accelerates some core IP/CV functionality on CUDA.
Cuda is certainly popular than OpenCL as of today, as it was released 3 or 4 years before OpenCL. Since OpenCL been has released, Nvidia has not contributed much for the language as they concentrate much on CUDA. They have not even released openCL 1.2 version for any driver.
As far as heterogenous computing as well as hand held devices as concerned OpenCl will surely gain more popularity in near future. As of now biggest contributor to OpenCL is AMD, It's visible on their site.
in my experience:
if you want best absolute performance then you need to see who is on the latest hardware iteration, and use their stack (including latest / beta releases).
if you want the best performance for the money you will be aiming at gamer cards rather than "professional" cards and the flexibility of targetting different platforms favors opencl.
if you are starting out, in particular, cuda tends to be more polished and have more tools and libraries.
finally, my personal take, after appalling "support" from nvidia (we got a dead tesla and it wasn't changed for months, while a client was waiting): the flexibility to jump ship with opencl is worth the risk of slightly lower performance when nvidia are ahead in the release cycle.
참고URL : https://stackoverflow.com/questions/4638324/nvidia-vs-amd-gpgpu-performance
'programing tip' 카테고리의 다른 글
개체 참조가 개체의 인스턴스로 설정되지 않았습니다. .NET에서 어떤 개체가 'null'인지 표시하지 않는 이유는 무엇입니까? (0) | 2020.08.15 |
---|---|
Kotlin의 단일 느낌표 (0) | 2020.08.15 |
자바 스크립트 콘솔에서 컨텍스트를 iframe으로 변경하는 방법이 있습니까? (0) | 2020.08.15 |
현재보기 (0) | 2020.08.15 |
이스탄불 보장 보고서를 어떻게 읽습니까? (0) | 2020.08.15 |