엔비디아 CUDA란 무엇인가요? 엔비디아 쿠다? Cuda 기술이 적용된 GPU 카드의 비그래픽 컴퓨팅

그리고 호스트 코드(메인, 제어 코드)와 장치 코드(하드웨어 코드)(확장자가 .cu인 파일)를 모든 프로그래밍 환경에서 최종 프로그램이나 라이브러리를 조립하는 프로세스에 적합한 개체 파일로 변환하도록 설계되었습니다. 넷빈즈에서.

CUDA 아키텍처는 그리드 메모리 모델, 클러스터 스레드 모델링 및 SIMD 명령어를 사용합니다. 고성능 그래픽 컴퓨팅뿐만 아니라 nVidia 비디오 카드를 사용하는 다양한 과학 컴퓨팅에도 적용 가능합니다. 과학자와 연구자들은 천체 물리학, 전산 생물학 및 화학, 유체 역학 모델링, 전자기 상호 작용, 컴퓨터 단층 촬영, 지진 분석 등을 포함한 다양한 분야에서 CUDA를 널리 사용합니다. CUDA에는 OpenGL 및 Direct3D를 사용하여 애플리케이션에 연결할 수 있는 기능이 있습니다. CUDA는 Linux, Mac OS X, Windows와 같은 운영 체제를 위한 크로스 플랫폼 소프트웨어입니다.

2010년 3월 22일, nVidia는 OpenCL 지원이 포함된 CUDA Toolkit 3.0을 출시했습니다.

장비

CUDA 플랫폼은 8세대 NVIDIA G80 칩 출시와 함께 시장에 처음 등장했으며 GeForce, Quadro 및 NVidia Tesla 가속기 제품군에 사용되는 모든 후속 그래픽 칩 시리즈에 포함되었습니다.

CUDA SDK를 지원하는 첫 번째 하드웨어 시리즈인 G8x에는 CUDA SDK를 API로 사용하는 32비트 단정밀도 벡터 프로세서가 있었습니다. (CUDA는 C double 유형을 지원하지만 정밀도는 이제 32비트로 감소했습니다. 부동 소수점). 최신 GT200 프로세서는 64비트 정밀도(SFU만)를 지원하지만 성능은 32비트 정밀도보다 훨씬 나쁩니다(스칼라 프로세서가 8개 있는 반면 스트림 멀티프로세서당 SFU는 2개뿐이기 때문입니다). GPU는 하드웨어 멀티스레딩을 구성하므로 GPU의 모든 리소스를 사용할 수 있습니다. 따라서 물리적 가속기의 기능을 그래픽 가속기로 이전할 수 있는 가능성이 열립니다(구현 예는 nVidia PhysX입니다). 또한 컴퓨터 그래픽 하드웨어를 사용하여 복잡한 비그래픽 계산(예: 컴퓨터 생물학 및 기타 과학 분야)을 수행할 수 있는 폭넓은 가능성을 열어줍니다.

장점

그래픽 API를 통해 범용 컴퓨팅을 구성하는 전통적인 접근 방식과 비교할 때 CUDA 아키텍처는 이 영역에서 다음과 같은 장점을 가지고 있습니다.

제한

  • 장치에서 실행 가능한 모든 함수는 재귀를 지원하지 않으며(CUDA Toolkit 3.1은 포인터 및 재귀를 지원함) 몇 가지 다른 제한 사항이 있습니다.

지원되는 GPU 및 그래픽 가속기

CUDA 기술에 대한 완전한 지원을 선언한 장비 제조업체 Nvidia의 장치 목록은 공식 Nvidia 웹사이트인 CUDA-Enabled GPU Products(영어)에서 제공됩니다.

실제로 다음 주변 장치는 현재 PC 하드웨어 시장에서 CUDA 기술을 지원합니다.

사양 버전 GPU 비디오 카드
1.0 G80, G92, G92b, G94, G94b 지포스 8800GTX/울트라, 9400GT, 9600GT, 9800GT, 테슬라 C/D/S870, FX4/5600, 360M, GT 420
1.1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b 지포스 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/18/3700, 4700x2, 1xxM, 32 /370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1.2 GT218, GT216, GT215 지포스 210, GT 220/40, FX380 LP, 1800M, 370/380M, NVS 2/3100M
1.3 GT200, GT200b 지포스 GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, 테슬라 C/M1060, S1070, 쿼드로 CX, FX 3/4/5800
2.0 GF100, GF110 지포스(GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S/M2050/70, Quadro Plex 7000, Quadro 4000, 5000, 6000, 지포스(GF110) GTX 560 TI 448, GTX570, GTX580, GTX59 0
2.1 GF104, GF114, GF116, GF108, GF106 지포스 610M, GT 430, GT 440, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, 쿼드로 600, 2000
3.0 GK104, GK106, GK107 GEFORCE GTX 690, GTX 680, GTX 670, GTX 660 Ti, GTX 660, GTX 650 Ti, GTX 650, GT 640, GeForce GTX 680MX, GeForce GTX 680M, GEFORCE GTX 675MX, GeForce GTX 670MX, GTX, GTX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX 670MX, GTX, GTX 670MX, GTX 670MX, GTX 670MX, GTX, GTX TX 660M, 지포스 GT 650M, 지포스 GT 645M, 지포스 GT 640M
3.5 GK110
데스크톱 컴퓨터용 Nvidia GeForce
지포스 GTX 590
지포스 GTX 580
지포스 GTX 570
지포스 GTX 560 Ti
지포스 GTX 560
지포스 GTX 550 Ti
지포스 GTX 520
지포스 GTX 480
지포스 GTX 470
지포스 GTX 465
지포스 GTX 460
지포스 GTS 450
지포스 GTX 295
지포스 GTX 285
지포스 GTX 280
지포스 GTX 275
지포스 GTX 260
지포스 GTS 250
지포스 GT 240
지포스 GT 220
지포스 210
지포스 GTS 150
지포스 GT 130
지포스 GT 120
지포스 G100
지포스 9800 GX2
지포스 9800 GTX+
지포스 9800 GTX
지포스 9800GT
지포스 9600 GSO
지포스 9600GT
지포스 9500GT
지포스 9400GT
지포스 9400mGPU
지포스 9300mGPU
지포스 8800 GTS 512
지포스 8800GT
지포스 8600 GTS
지포스 8600GT
지포스 8500GT
지포스 8400GS
모바일 컴퓨터용 Nvidia GeForce
지포스 GTX 580M
지포스 GTX 570M
지포스 GTX 560M
지포스 GT 555M
지포스 GT 540M
지포스 GT 525M
지포스 GT 520M
지포스 GTX 485M
지포스 GTX 480M
지포스 GTX 470M
지포스 GTX 460M
지포스 GT 445M
지포스 GT 435M
지포스 GT 425M
지포스 GT 420M
지포스 GT 415M
지포스 GTX 285M
지포스 GTX 280M
지포스 GTX 260M
지포스 GTS 360M
지포스 GTS 350M
지포스 GTS 160M
지포스 GTS 150M
지포스 GT 335M
지포스 GT 330M
지포스 GT 325M
지포스 GT 240M
지포스 GT 130M
지포스 G210M
지포스 G110M
지포스 G105M
지포스 310M
지포스 305M
지포스 9800M GTX
지포스 9800M GT
지포스 9800M GTS
지포스 9700M GTS
지포스 9700M GT
지포스 9650MGS
지포스 9600M GT
지포스 9600MGS
지포스 9500MGS
지포스 9500M G
지포스 9300MGS
지포스 9300M G
지포스 9200MGS
지포스 9100M G
지포스 8800M GTS
지포스 8700M GT
지포스 8600M GT
지포스 8600MGS
지포스 8400M GT
지포스 8400MGS
엔비디아 테슬라 *
테슬라 C2050/C2070
테슬라 M2050/M2070/M2090
테슬라 S2050
테슬라 S1070
테슬라 M1060
테슬라 C1060
테슬라 C870
테슬라 D870
테슬라 S870
데스크톱 컴퓨터용 Nvidia Quadro
쿼드로 6000
쿼드로 5000
쿼드로 4000
쿼드로 2000
쿼드로 600
쿼드로 FX 5800
쿼드로 FX 5600
쿼드로 FX 4800
쿼드로 FX 4700 X2
쿼드로 FX 4600
쿼드로 FX 3700
쿼드로 FX 1700
쿼드로 FX 570
쿼드로 FX 470
Quadro FX 380 로우 프로파일
쿼드로 FX 370
Quadro FX 370 로우 프로파일
쿼드로 CX
쿼드로 NVS 450
쿼드로 NVS 420
쿼드로 NVS 290
쿼드로 플렉스 2100 D4
쿼드로 플렉스 2200 D2
쿼드로 플렉스 2100 S4
쿼드로 플렉스 1000 모델 IV
모바일 컴퓨팅을 위한 Nvidia Quadro
쿼드로 5010M
쿼드로 5000M
쿼드로 4000M
쿼드로 3000M
쿼드로 2000M
쿼드로 1000M
쿼드로 FX 3800M
쿼드로 FX 3700M
쿼드로 FX 3600M
쿼드로 FX 2800M
쿼드로 FX 2700M
쿼드로 FX 1800M
쿼드로 FX 1700M
쿼드로 FX 1600M
쿼드로 FX 880M
쿼드로 FX 770M
쿼드로 FX 570M
쿼드로 FX 380M
쿼드로 FX 370M
쿼드로 FX 360M
쿼드로 NVS 5100M
쿼드로 NVS 4200M
쿼드로 NVS 3100M
쿼드로 NVS 2100M
쿼드로 NVS 320M
쿼드로 NVS 160M
쿼드로 NVS 150M
쿼드로 NVS 140M
쿼드로 NVS 135M
쿼드로 NVS 130M
  • Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 모델에서는 배정밀도 GPU 계산이 가능합니다.

다양한 버전의 기능 및 사양

기능 지원(목록에 없는 기능은
모든 컴퓨팅 기능에 지원됨)
컴퓨팅 기능(버전)
1.0 1.1 1.2 1.3 2.x

전역 메모리의 32비트 단어
아니요

전역 메모리의 부동 소수점 값
다음에서 작동하는 정수 원자 함수
공유 메모리의 32비트 단어
아니요
32비트에서 작동하는omicExch()
공유 메모리의 부동 소수점 값
다음에서 작동하는 정수 원자 함수
전역 메모리의 64비트 단어
워프 투표 기능
배정밀도 부동 소수점 연산 아니요
64비트에서 작동하는 원자 함수
공유 메모리의 정수 값
아니요
부동 소수점 원자 추가 작업
전역 및 공유 메모리의 32비트 단어
_투표권()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
표면 기능
스레드 블록의 3D 그리드
기술 사양 컴퓨팅 기능(버전)
1.0 1.1 1.2 1.3 2.x
스레드 블록 그리드의 최대 차원 2 3
스레드 블록 그리드의 최대 x, y 또는 z 차원 65535
스레드 블록의 최대 차원 3
블록의 최대 x 또는 y 치수 512 1024
블록의 최대 z 차원 64
블록당 최대 스레드 수 512 1024
워프 크기 32
멀티프로세서당 최대 상주 블록 수 8
멀티프로세서당 최대 상주 워프 수 24 32 48
멀티프로세서당 최대 상주 스레드 수 768 1024 1536
멀티프로세서당 32비트 레지스터 수 8K 16K 32K
멀티프로세서당 최대 공유 메모리 양 16KB 48KB
공유 메모리 뱅크 수 16 32
스레드당 로컬 메모리 양 16KB 512KB
일정한 메모리 크기 64KB
지속적인 메모리를 위한 멀티프로세서별 캐시 작업 세트 8KB
텍스처 메모리를 위한 멀티프로세서별 캐시 작업 세트 장치에 따라 다름(6KB~8KB)
1D 텍스처의 최대 너비
8192 32768
1D 텍스처의 최대 너비
선형 메모리에 바인딩된 참조
2 27
최대 너비 및 레이어 수
1D 레이어 텍스처 참조용
8192x512 16384x2048
2D의 최대 너비 및 높이
텍스처 참조가 바인딩됨
선형 메모리 또는 CUDA 배열
65536x32768 65536x65535
최대 너비, 높이 및 개수
2D 레이어 텍스처 참조를 위한 레이어
8192x8192x512 16384x16384x2048
최대 너비, 높이 및 깊이
선형에 바인딩된 3D 텍스처 참조의 경우
메모리 또는 CUDA 배열
2048x2048x2048
최대 텍스처 수
커널에 바인딩될 수 있음
128
1D 표면의 최대 너비
CUDA 배열에 바인딩된 참조
아니다
지원됨
8192
2D의 최대 너비 및 높이
CUDA 배열에 바인딩된 표면 참조
8192x8192
최대 표면 수
커널에 바인딩될 수 있음
8
당 최대 명령어 수
핵심
2 백만

CudaArray* cu_array; 조직< float , 2 >텍스; // 배열 할당 cudaMalloc( & cu_array, cudaCreateChannelDesc< float>(), 너비, 높이) ; // 이미지 데이터를 배열에 복사합니다. cudaMemcpy( cu_array, image, width* height, cudaMemcpyHostToDevice) ; // 배열을 텍스처에 바인딩 cudaBindTexture(tex, cu_array) ; // 커널 실행 dark3 blockDim(16, 16, 1) ; Dim3 GridDim(너비 / blockDim.x, 높이 / blockDim.y, 1) ; 핵심<<< gridDim, blockDim, 0 >>> (d_odata, 너비, 높이) ; cudaUnbindTexture(tex) ; __global__ void kernel(float * odata, int height, int width) ( unsigned int x = blockIdx.x * blockDim.x + threadIdx.x ; unsigned int y = blockIdx.y * blockDim.y + threadIdx.y ; float c = texfetch(tex, x, y) ; odata[ y* 너비+ x] = c; )

pycuda.driver를 drv import numpy drv.init() dev = drv.Device(0) ctx = dev.make_context() mod = drv.SourceModule(로 가져오기 """ __global__ void Multiply_them(float *dest, float *a, float *b) ( const int i = threadIdx.x; dest[i] = a[i] * b[i]; ) """) Multiply_them = mod.get_function ("multiply_them" ) a = numpy.random .randn (400 ) .astype (numpy.float32 ) b = numpy.random .randn (400 ) .astype (numpy.float32 ) dest = numpy.zeros_like (a) Multiply_them( drv.Out (dest) , drv.In (a) , drv.In (b) , block= (400 , 1 , 1 ) ) 인쇄 dest-a*b

CUDA를 대학 과목으로

2009년 12월 현재, 소프트웨어 모델 CUDA는 전 세계 269개 대학에서 강의됩니다. 러시아에서는 야로슬라블 주립대학교의 상트페테르부르크 폴리테크닉 대학교에서 CUDA 교육 과정이 제공됩니다. P. G. Demidov, 모스크바, 니즈니 노브고로드, 상트페테르부르크, 트베리, 카잔, 노보시비르스크, 노보시비르스크 주립 기술 대학, 옴스크 및 페름 주립 대학, 사회 및 인간 자연의 국제 대학 "Dubna", Ivanovo 주립 에너지 대학, 벨고로드 주립 대학 , MSTU 그들. 러시아 화학 기술 대학 바우만(Bauman)의 이름을 따서 명명되었습니다. Mendeleev, 지역간 슈퍼컴퓨터 센터 RAS, . 또한 2009년 12월에는 Dubna 시에 위치한 러시아 최초의 과학 및 교육 센터 "병렬 컴퓨팅"이 운영을 시작했다고 발표되었으며, 이 센터의 임무에는 GPU의 복잡한 컴퓨팅 문제 해결에 대한 교육 및 상담이 포함됩니다.

우크라이나에서는 Kiev Institute of System Analysis에서 CUDA 과정을 진행합니다.

연결

공식 리소스

  • CUDA Zone (러시아어) - 공식 CUDA 웹사이트
  • CUDA GPU 컴퓨팅(영어) - CUDA 컴퓨팅 전용 공식 웹 포럼

비공식 리소스

톰의 하드웨어
  • 드미트리 체카노프. nVidia CUDA: 비디오 카드에서의 컴퓨팅인가 아니면 CPU의 죽음인가? . Tom's Hardware(2008년 6월 22일). 보관됨
  • 드미트리 체카노프. nVidia CUDA: 대중 시장을 위한 GPU 애플리케이션 벤치마킹. Tom's Hardware(2009년 5월 19일). 2012년 3월 4일에 원본 문서에서 보존된 문서. 2009년 5월 19일에 확인함.
iXBT.com
  • 알렉세이 베릴로. NVIDIA CUDA - GPU의 비그래픽 컴퓨팅. 1 부 . iXBT.com(2008년 9월 23일). 2012년 3월 4일에 원본 문서에서 보존된 문서. 2009년 1월 20일에 확인함.
  • 알렉세이 베릴로. NVIDIA CUDA - GPU의 비그래픽 컴퓨팅. 2 부 . iXBT.com(2008년 10월 22일). - NVIDIA CUDA 구현의 예. 2012년 3월 4일에 원본 문서에서 보존된 문서. 2009년 1월 20일에 확인함.
기타 리소스
  • 보레스코프 알렉세이 빅토로비치. CUDA 기초(2009년 1월 20일). 2012년 3월 4일에 원본 문서에서 보존된 문서. 2009년 1월 20일에 확인함.
  • 블라디미르 프롤로프. CUDA 기술 소개. 온라인 잡지 "컴퓨터 그래픽 및 멀티미디어"(2008년 12월 19일). 2012년 3월 4일에 원본 문서에서 보존된 문서. 2009년 10월 28일에 확인함.
  • 이고르 오스콜코프. NVIDIA CUDA는 대형 컴퓨팅의 세계로 향하는 저렴한 티켓입니다. Computerra(2009년 4월 30일). 2009년 5월 3일에 확인함.
  • 블라디미르 프롤로프. CUDA 기술 소개(2009년 8월 1일). 2012년 3월 4일에 원본 문서에서 보존된 문서. 2010년 4월 3일에 확인함.
  • GPGPU.ru. 컴퓨팅에 비디오 카드 사용
  • . 병렬 컴퓨팅 센터

노트

또한보십시오

다윈의 진화론에 따르면 최초의 유인원은
정확하게 말하면 - 호모 조상, 인류의 전임자)는 나중에
우리 안에. 수천 개 이상의 라디오 튜브를 갖춘 멀티톤 컴퓨터 센터,
방 전체를 차지하는 것은 0.5kg짜리 노트북으로 대체되었는데, 그건 그렇고,
첫 번째 성능보다 열등하지 않습니다. 대홍수 이전의 타자기가 되었습니다.
무엇이든, 무엇이든(인체에도) 인쇄할 수 있습니다.
다기능 장치. 거대 프로세서 기업들이 갑자기 벽을 쌓기로 결정했습니다.
"돌"의 그래픽 코어. 그리고 비디오 카드는 그림을 보여줄 뿐만 아니라
허용 가능한 FPS 및 그래픽 품질을 제공할 뿐만 아니라 모든 종류의 계산도 수행합니다. 예
아직 생산하는 방법! GPU를 활용한 멀티스레드 컴퓨팅 기술에 대해 논의합니다.

왜 GPU인가?

왜 그들이 모든 컴퓨팅 성능을 그래픽에 이전하기로 결정했는지 궁금합니다.
어댑터? 보시다시피 프로세서는 여전히 유행하고 있으며 따뜻함을 포기할 것 같지 않습니다.
장소. 하지만 GPU에는 조커와 함께 몇 개의 에이스가 들어 있습니다.
충분한. 최신 중앙 프로세서는 최대를 달성하도록 설계되었습니다.
정수 및 부동 소수점 데이터 처리 시 성능
정보의 병렬 처리에 대해 특별히 걱정하지 않고 쉼표를 사용합니다. 같은에서
시간이 지나면 비디오 카드의 아키텍처를 통해 신속하고 문제 없이 "병렬화"할 수 있습니다.
데이터 처리. 한편으로는 (3D 컨베이어로 인해) 다각형이 계산되고,
반면에 픽셀 텍스처 처리. “조화로운” 관계가 있다는 것은 분명합니다.
카드 코어의 부하 고장. 또한 메모리 및 비디오 프로세서 성능
"RAM-캐시-프로세서" 조합보다 더 최적입니다. 데이터 단위가 되는 순간
비디오 카드에서 하나의 GPU 스트림 프로세서에 의해 처리되기 시작하고 다른 GPU 스트림 프로세서에 의해 처리되기 시작합니다.
장치는 다른 장치와 병렬로 로드되며 원칙적으로는 쉽게 달성할 수 있습니다.
버스 대역폭과 비슷한 GPU 로드,
그러나 이를 위해서는 컨베이어가 균일하게 적재되어야 합니다.
모든 조건부 전환 및 분기. 중앙 프로세서는 그 덕분에
다양성을 위해서는 처리 요구 사항에 맞는 전체 캐시가 필요합니다.
정보.

전문가들은 병렬 컴퓨팅과 GPU의 작업에 대해 생각해 왔습니다.
수학과 많은 과학적 계산이 여러 면에서 유사하다는 이론을 내놓았습니다.
3D 그래픽 처리. 많은 전문가들은 근본적인 요인이 다음과 같다고 생각합니다.
개발 GPGPU (GPU의 범용 계산 - 범용
비디오 카드를 사용한 계산
)은 2003년 Brook GPU 프로젝트의 등장이었습니다.

스탠포드 대학의 프로젝트 창시자들은 어려운 문제를 해결해야 했습니다.
문제: 그래픽 어댑터를 강제로 생성하는 하드웨어 및 소프트웨어
다양한 계산. 그리고 그들은 성공했습니다. 일반적인 C 언어를 사용하여,
미국 과학자들은 GPU를 프로세서처럼 작동하도록 만들었습니다.
병렬 처리. Brook 이후 VGA 계산에 관한 수많은 프로젝트가 나타났습니다.
Accelerator 라이브러리, Brahma 라이브러리, 시스템 등
GPU++ 메타프로그래밍 및 기타.

쿠다!

발전 전망에 대한 예감이 강요됐다. AMD그리고 엔비디아
핏불처럼 Brook GPU에 달라붙으세요. 마케팅 정책을 생략하면
모든 것을 올바르게 구현하면 그래픽 부문뿐만 아니라 발판을 마련할 수 있습니다.
시장뿐만 아니라 컴퓨팅 분야에서도(특수 컴퓨팅 카드를 살펴보고
서버 테슬라수백 개의 멀티프로세서 포함), 일반적인 CPU를 대체합니다.

당연히 'FPS 군주'들은 각자의 방식으로 걸림돌 앞에서 헤어졌다.
경로이지만 기본 원칙은 변경되지 않았습니다. 계산을 수행하는 것입니다.
GPU를 사용합니다. 이제 "친환경" 기술에 대해 자세히 살펴보겠습니다. 쿠다
(컴퓨팅 통합 장치 아키텍처).

우리의 "주인공"의 임무는 두 개의 API를 동시에 제공하는 것입니다.
첫 번째는 상위 수준의 CUDA Runtime으로, 다음과 같은 기능을 나타냅니다.
더 간단한 레벨로 분류되어 하위 API인 CUDA 드라이버로 전달됩니다. 그래서
"고수준"이라는 문구는 프로세스에 적용하기에는 무리입니다. 소금은 다
정확하게 드라이버에 포함되어 있으며 친절하게 생성된 라이브러리가 이를 얻는 데 도움이 될 것입니다.
개발자 엔비디아: CUBLAS(수학적 계산 도구) 및
FFT(푸리에 알고리즘을 사용한 계산). 자, 실습으로 넘어 갑시다
재료의 일부.

CUDA 용어

엔비디아 CUDA API에 대한 매우 독특한 정의로 작동합니다. 그들
중앙 프로세서 작업에 사용되는 정의와 다릅니다.

– 처리해야 하는 데이터 세트(
큰 처리 자원이 필요합니다).

경사– 32개 스레드 그룹. 데이터만 처리됩니다.
워프이므로 워프는 최소한의 데이터 양입니다.

차단하다– 흐름 세트(64에서 512까지) 또는 세트
워프(2~16).

그리드블록의 모음입니다. 이 데이터 분리
성능 향상을 위해서만 사용됩니다. 그러니까 숫자라면
다중 프로세서가 크면 블록이 병렬로 실행됩니다. 만약에
카드에 운이 없습니다(개발자는 다음을 사용하는 것을 권장합니다)
GeForce 8800 GTS 320MB 이상의 어댑터), 데이터 블록이 처리됩니다.
순차적으로.

NVIDIA는 또한 다음과 같은 개념을 도입합니다. 핵심, 주인
그리고 장치.

일하고 있었다!

을 위한 본격적인 작업 CUDA를 사용하려면 다음이 필요합니다.

1. 프로그래밍의 본질부터 GPU 셰이더 코어의 구조를 안다.
그들 사이에 하중을 균등하게 분배하는 것으로 구성됩니다.
2. 몇 가지 측면을 고려하여 C 환경에서 프로그래밍할 수 있습니다.

개발자 엔비디아비디오 카드의 "내부"를 여러 번 공개했습니다.
우리가 보던 것과는 다르게. 그러니 아무렇지도 않게 모든 것을 공부해야 할 것입니다
건축의 미묘함. 전설적인 G80 '돌'의 구조를 살펴보자 지포스 8800
GTX
.

셰이더 코어는 8개의 TPC(텍스처 프로세서 클러스터) 클러스터로 구성됩니다.
텍스처 프로세서(그래서 지포스 GTX 280– 15개 코어, 8800GTS
여섯 개가 있어요 8600 – 4개 등). 그것들은 차례로 두 개로 구성됩니다
스트리밍 멀티프로세서(이하 SM) SM (다들
16) 프런트 엔드(명령어 읽기 및 디코딩 문제 해결)와
백엔드(명령의 최종 출력) 파이프라인과 8개의 스칼라 SP(셰이더)
프로세서) 및 2개의 SFU(슈퍼 기능 장치). 각 비트마다(단위
시간) 프런트 엔드는 워프를 선택하고 처리합니다. 모든 날실이 흐르도록
(32개가 있음을 상기시켜 드리겠습니다.) 처리되면 컨베이어 끝에 32/8 = 4사이클이 필요합니다.

각 다중 프로세서에는 공유 메모리라는 것이 있습니다.
크기는 16KB이며 프로그래머에게 완전한 자유를 제공합니다.
행위. 원하는대로 배포하세요 :). 공유 메모리는 스레드 간 통신을 제공합니다.
하나의 블록이며 픽셀 셰이더와 함께 작동하도록 고안되지 않았습니다.

SM도 GDDR에 액세스할 수 있습니다. 이를 위해 각각 8KB가 주어졌습니다.
업무에 가장 중요한 모든 것을 저장하는 캐시 메모리(예: 컴퓨팅
상수).

다중 프로세서에는 8192개의 레지스터가 있습니다. 활성 블록의 수는
8개 이상이고 워프 수는 768/32 = 24개를 넘지 않습니다. 이로부터 G80이 분명합니다.
단위 시간당 최대 32*16*24 = 12288 스레드를 처리할 수 있습니다. 당신은 도울 수 없지만
향후 프로그램을 최적화할 때 이러한 수치를 고려하십시오.
– 블록 크기, 다른 한편 – 스레드 수). 매개변수 균형이 중요한 역할을 할 수 있습니다.
그러므로 앞으로 중요한 역할을 할 엔비디아블록 사용을 권장합니다
128개 또는 256개의 스레드가 있습니다. 512개의 스레드로 구성된 블록은 다음과 같은 이유로 비효율적입니다.
지연 증가. GPU 비디오 카드 구조의 모든 미묘함을 고려하여
프로그래밍 능력이 좋으면 매우 생산적인 일을 할 수 있습니다
병렬 컴퓨팅을 위한 도구. 그런데 프로그래밍에 대해서...

프로그램 작성

CUDA의 "창의성"을 위해서는 다음이 필요합니다. GeForce 비디오 카드 이상
에피소드 8
. 와 함께

공식 웹사이트에서 세 가지 소프트웨어 패키지를 다운로드해야 합니다.
CUDA 지원(각 OS마다 고유함), CUDA SDK 패키지 자체(두 번째
베타 버전) 및 추가 라이브러리(CUDA 툴킷). 기술 지원
운영 체제 Windows(XP 및 Vista), Linux 및 Mac OS X. 공부하려면 I
Vista Ultimate Edition x64를 선택했습니다(앞으로 시스템이 작동했다고 말하겠습니다).
정말 좋아요). 이 글을 쓰는 시점에는 업무와 관련이 있었습니다.
ForceWare 드라이버 177.35. 도구 세트로 사용됨
Borland C++ 6 Builder 소프트웨어 패키지(다음과 함께 작동하는 모든 환경)
언어 C).

사람에게 그 언어 아는 사람, 새로운 환경에 익숙해지기 쉬울 것입니다. 필요한 것은
기본 매개 변수를 기억하십시오. 키워드 _global_(함수 앞에 위치)
함수가 커널에 속해 있음을 나타냅니다. 그녀는 중앙에서 호출됩니다
프로세서 및 모든 작업은 GPU에서 발생합니다. _global_ 호출에는 더 많은 것이 필요합니다
특정 세부 사항, 즉 메쉬 크기, 블록 크기 및 커널이 무엇인지
적용된. 예를 들어, _global_ void saxpy_parallel 줄은<<>>, 여기서 X –
그리드 크기, Y는 블록 크기로 이러한 매개변수를 지정합니다.

_device_ 기호는 함수가 그래픽 코어(또는라고도 함)에 의해 호출된다는 것을 의미합니다.
모든 지시를 따를 것입니다. 이 함수는 멀티프로세서의 메모리에 위치하며,
따라서 그녀의 주소를 알아내는 것은 불가능합니다. _host_ 접두사는 호출이
CPU가 참여해야만 처리가 이루어집니다. _글로벌_ 및
_devices_는 서로 호출할 수 없으며 스스로 호출할 수도 없습니다.

또한 CUDA용 언어에는 비디오 메모리 작업을 위한 여러 가지 기능이 있습니다.
(GDDR과 RAM 사이의 메모리 확보), cudamemcpy 및 cudamemcpy2D(복사
GDDR과 RAM 사이의 메모리) 및 cudamalloc(메모리 할당).

모든 프로그램 코드는 CUDA API로 컴파일됩니다. 먼저 받아요
전용 코드 중앙 프로세서, 노출되어 있습니다.
표준 컴파일 및 그래픽 어댑터용 기타 코드
중간 언어 PTX(어셈블러와 유사)로 다시 작성되었습니다.
가능한 오류를 식별합니다. 이 모든 "댄스"가 끝난 후 결승전
GPU/CPU가 이해할 수 있는 언어로 명령을 번역(번역)합니다.

학습 키트

프로그래밍의 거의 모든 측면은 다음 문서에 설명되어 있습니다.
드라이버와 두 개의 응용 프로그램은 물론 개발자 웹 사이트에서도 볼 수 있습니다. 크기
기사가 이를 설명하기에 충분하지 않습니다(관심 있는 독자는 첨부해야 함).
약간의 노력을 기울이고 자료를 직접 연구하십시오).

CUDA SDK 브라우저는 초보자를 위해 특별히 개발되었습니다. 누구나 할 수 있다
병렬 컴퓨팅의 위력을 직접 느껴보세요.
안정성 - 예제는 아티팩트나 충돌 없이 작동합니다. 응용 프로그램에는
다수의 지표 미니 프로그램(61개 "테스트"). 각각의 경험에는
프로그램 코드와 PDF 파일에 대한 자세한 문서입니다. 사람들이 있다는 것은 즉시 명백하다.
브라우저에 자신의 창작물이 표시되는 사람들은 진지한 작업을 수행하고 있습니다.
처리하는 동안 프로세서와 비디오 카드의 속도를 비교할 수도 있습니다.
데이터. 예를 들어 비디오 카드를 사용하여 다차원 배열을 스캔하는 경우 지포스 8800
GT
0.17109밀리초 내에 256개의 스레드가 있는 블록으로 512MB를 생성합니다.
이 기술은 SLI 탠덤을 인식하지 못하므로 듀오나 트리오가 있는 경우에는
작업하기 전에 "페어링" 기능을 비활성화하십시오. 그렇지 않으면 CUDA는 하나만 볼 수 있습니다
장치 듀얼 코어 AMD 애슬론 64 X2(코어 주파수 3000MHz) 동일한 경험
2.761528밀리초 후에 전달됩니다. G92가 16배 이상인 것으로 밝혀졌습니다.
바위보다 빠르다 AMD! 보시다시피 이는 극단적인 시스템과는 거리가 멀습니다.
대중에게 사랑받지 못하는 운영 체제와 함께 좋은 결과를 보여줍니다
결과.

브라우저 외에도 사회에 유용한 프로그램이 많이 있습니다. 어도비 벽돌
자사 제품을 새로운 기술에 적응시켰습니다. 이제 Photoshop CS4가 정식 버전이 되었습니다.
최소한의 자원 사용 그래픽 어댑터(특별한 파일을 다운로드해야 합니다.
플러그인). Badaboom 미디어 변환기 및 RapiHD와 같은 프로그램을 사용하면 다음을 수행할 수 있습니다.
비디오를 MPEG-2 형식으로 디코딩합니다. 오디오 처리에 적합
할 것이다 무료 유틸리티가속. CUDA API에 맞춰진 소프트웨어의 양,
틀림없이 성장할 것이다.

그리고 이때...

그 동안 당신은 이 자료를 읽고 있습니다. 프로세서 문제로 열심히 일하는 사람들입니다.
GPU를 CPU에 통합하는 자체 기술을 개발하고 있습니다. 바깥으로부터 AMD모두
분명한 것은 그들은 엄청난 경험을 가지고 있다는 것입니다. ATI.

"마이크로 장치"인 Fusion의 생성은 다음과 같은 여러 코어로 구성됩니다.
코드네임 Bulldozer 및 비디오 칩 RV710(Kong). 그들의 관계는 다음과 같습니다
향상된 HyperTransport 버스를 통해 수행됩니다. 에 따라
코어 수와 그 수 주파수 특성 AMD는 전체 가격을 만들 계획입니다
"돌"의 계층 구조. 노트북용 프로세서(팔콘)도 생산할 예정이다.
멀티미디어 장치(Bobcat)용. 게다가 기술의 응용이다.
휴대용 장치의 개발은 캐나다인들에게 첫 번째 과제가 될 것입니다. 개발과 함께
병렬 컴퓨팅에서는 이러한 "돌"의 사용이 매우 대중화될 것입니다.

인텔그의 Larrabee와 시간이 조금 늦었습니다. 제품 AMD,
아무 일도 일어나지 않으면 2009년 말~초반에 매장 진열대에 나타날 것입니다.
2010. 그리고 적의 결정은 거의 두 시간 후에야 드러날 것입니다.
올해의.

Larrabee는 많은 수(읽기: 수백)의 코어를 갖습니다. 처음에는
8~64코어용으로 설계된 제품도 있을 예정입니다. 펜티엄과 매우 유사하지만
꽤 많이 재 작업되었습니다. 각 코어에는 256KB의 L2 캐시가 있습니다.
(시간이 지남에 따라 크기가 증가합니다). 관계는 다음을 통해 수행됩니다.
1024비트 양방향 링 버스. 인텔은 그들의 "자식"이
DirectX 및 Open GL API(Apple 개발자용)와 완벽하게 작동하므로
소프트웨어 개입이 필요하지 않습니다.

내가 왜이 모든 것을 말했습니까? Larrabee와 Fusion이 대체되지 않을 것이 분명합니다.
시장에서 강제 퇴출되지 않는 일반 고정 프로세서를 시장에서 제거
비디오 카드. 게이머와 익스트림 스포츠 매니아들에게 궁극적인 꿈은 여전히 ​​남아있습니다
멀티 코어 CPU와 여러 최고급 VGA의 직렬 구성. 하지만 심지어 뭐
프로세서 회사는 원칙에 따라 병렬 컴퓨팅으로 전환하고 있습니다.
GPGPU와 유사하다고 많이 말합니다. 특히, 그러한 내용에 대해서는
CUDA와 같은 기술은 존재할 권리가 있으며 아마도 그럴 것입니다.
매우 인기가 있습니다.

간단한 요약

비디오 카드를 사용한 병렬 컴퓨팅은 좋은 도구일 뿐입니다.
열심히 일하는 프로그래머의 손에. 무어의 법칙을 따르는 거의 프로세서
끝이 올 것이다. 회사 엔비디아아직 갈 길이 멀다
API를 대중에게 홍보합니다(아이디어에 대해서도 마찬가지입니다). ATI/AMD).
그것이 어떨지는 미래가 보여줄 것입니다. 그래서 CUDA가 돌아올 것입니다 :).

추신 초보 프로그래머나 관심 있는 분들의 방문을 추천합니다
다음의 "가상 시설":

NVIDIA 공식 웹사이트 및 웹사이트
GPGPU.com. 모두
제공된 정보는 다음과 같습니다 영어, 하지만 적어도 그러지 않아서 고마워요
중국인 그러니 가보세요! 작성자님이 조금이나마 도움이 되셨으면 좋겠습니다
CUDA 탐험을 향한 흥미진진한 여행!

수십 년 동안 칩의 트랜지스터 수가 2년마다 두 배로 늘어난다는 무어의 법칙이 적용되었습니다. 그러나 이는 1965년의 일이며 지난 5년 동안 소비자급 프로세서의 물리적 멀티 코어 아이디어가 빠르게 발전하기 시작했습니다. 2005년 Intel은 Pentium D를 출시했고 AMD는 Athlon X2를 출시했습니다. 그 당시에는 2개의 코어를 사용하는 애플리케이션이 한 손에 꼽힐 정도였습니다. 그러나 혁명을 일으킨 차세대 Intel 프로세서에는 정확히 2개의 물리적 코어가 있었습니다. 더욱이 Quad 시리즈는 2007년 1월에 등장했는데, 당시 Moore는 자신의 법칙이 곧 적용되지 않을 것이라고 인정했습니다.

지금은 무엇입니까? 저렴한 사무용 시스템에서도 듀얼 코어 프로세서와 4개의 물리적 코어가 표준이 되었으며 이는 단 2~3년 만에 이루어졌습니다. 프로세서 주파수는 증가하지 않지만 아키텍처가 개선되고 물리적 코어 및 가상 코어 수가 증가합니다. 그러나 수십 또는 수백 개의 컴퓨팅 "유닛"이 장착된 비디오 어댑터를 사용한다는 아이디어는 오랫동안 존재해 왔습니다.

GPU 컴퓨팅의 전망은 엄청나지만 가장 널리 사용되는 솔루션은 Nvidia CUDA입니다. Nvidia CUDA는 무료이고 많은 문서가 있으며 일반적으로 구현이 매우 쉽습니다. 하지만 이 기술을 사용하는 애플리케이션은 많지 않습니다. 기본적으로 이는 대부분의 경우 일반 사용자가 신경 쓰지 않는 모든 종류의 특수 계산입니다. 그러나 대량 사용자를 위해 설계된 프로그램도 있으며 이 기사에서는 이에 대해 이야기하겠습니다.

첫째, 기술 자체와 그것이 사용되는 것에 대해 조금 설명합니다. 왜냐하면 글을 쓸 때 폭넓은 독자층에 초점을 맞추기 때문에 복잡한 용어 없이 접근 가능한 언어로, 다소 간략하게 설명하려고 노력하겠습니다.

쿠다(English Compute Unified Device Architecture)는 GPGPU(비디오 카드의 임의 컴퓨팅) 기술을 지원하는 NVIDIA 그래픽 프로세서를 사용하여 계산을 수행할 수 있는 소프트웨어 및 하드웨어 아키텍처입니다. CUDA 아키텍처는 8세대 NVIDIA 칩인 G80의 출시와 함께 시장에 처음 등장했으며 GeForce, Quadro 및 Tesla 가속기 제품군에 사용되는 모든 후속 그래픽 칩 시리즈에 포함되어 있습니다. (다) 위키피디아.org

들어오는 스트림은 서로 독립적으로 처리됩니다. 평행한.

3가지 레벨로 구분됩니다.

그리드- 핵심. 1차원/2차원/3차원 블록 배열을 포함합니다.

차단하다– 많은 스레드가 포함되어 있습니다. 서로 다른 블록의 스레드는 서로 상호 작용할 수 없습니다. 왜 블록을 도입해야 했나요? 각 블록은 기본적으로 자체 하위 작업을 담당합니다. 예를 들어, 큰 이미지(매트릭스)는 여러 개의 작은 부분(매트릭스)으로 나누어 이미지의 각 부분을 병렬로 작업할 수 있습니다.

- 흐름. 한 블록 내의 스레드는 전역 메모리보다 훨씬 빠른 공유 메모리나 스레드 동기화 도구를 통해 상호 작용할 수 있습니다.

경사모든 최신 GPU의 워프 크기는 32입니다. 다음은 서로 상호 작용하는 스레드의 조합입니다. 반 뒤틀림, 이는 워프의 절반입니다. 왜냐하면 메모리 액세스는 일반적으로 워프의 전반부와 후반부에 별도로 발생합니다.

보시다시피 이 아키텍처는 작업 병렬화에 탁월합니다. 프로그래밍은 몇 가지 제한 사항이 있는 C 언어로 수행되지만 실제로는 모든 것이 그렇게 간단하지는 않습니다. 모든 것이 병렬화될 수는 없습니다. 난수 생성(또는 초기화)을 위한 표준 함수도 없으며, 이 모든 기능을 별도로 구현해야 합니다. 기성 옵션이 많이 있지만 이 중 어느 것도 기쁨을 가져다주지 않습니다. 재귀를 사용하는 기능은 비교적 최근에 나타났습니다.

명확하게 하기 위해 float 유형의 두 배열로 작업을 수행하는 작은 콘솔 프로그램(코드를 최소화하기 위해)이 작성되었습니다. 정수가 아닌 값으로. 위에서 언급한 이유로 인해 초기화(다양한 임의 값으로 배열 채우기)가 CPU에 의해 수행되었습니다. 다음으로, 각 배열의 해당 요소를 사용하여 25개의 서로 다른 작업이 수행되었으며 중간 결과가 세 번째 배열에 기록되었습니다. 배열의 크기가 변경되었으며 결과는 다음과 같습니다.

총 4가지 테스트가 수행되었습니다.

각 배열의 요소는 1024개입니다.

이렇게 적은 수의 요소를 사용하면 병렬 컴퓨팅이 거의 쓸모가 없다는 것을 분명히 알 수 있습니다. 계산 자체는 준비보다 훨씬 빠릅니다.

각 배열의 요소는 4096개입니다.

이제 비디오 카드가 프로세서보다 3배 빠르게 어레이에서 작업을 수행하는 것을 볼 수 있습니다. 또한 비디오 카드에서 이 테스트의 실행 시간은 증가하지 않았습니다(오류로 인해 시간이 약간 감소할 수 있음).

이제 각 배열에는 12288개의 요소가 있습니다.

비디오 카드의 분리가 2배 증가했습니다. 다시 말하지만, 비디오 카드의 실행 시간이 늘어났다는 점은 주목할 가치가 있습니다.
중요하지 않지만 프로세서에서는 3번 이상, 즉 작업의 복잡성에 비례합니다.

마지막 테스트는 각 배열의 36864개 요소입니다.

이 경우 가속도는 비디오 카드에서 거의 22배 더 빠른 인상적인 값에 도달합니다. 그리고 다시 비디오 카드의 실행 시간은 약간 증가했지만 프로세서에서는 3배가 필요하며 이는 다시 작업의 복잡성에 비례합니다.

계산을 계속 복잡하게 만들면 비디오 카드가 점점 더 많이 승리하게 됩니다. 이 예는 다소 과장되어 있지만 전체적인 상황은 명확하게 드러납니다. 그러나 위에서 언급했듯이 모든 것이 병렬화될 수는 없습니다. 예를 들어 Pi를 계산합니다. 몬테카를로법을 사용하여 작성한 예만 있으나 계산의 정확도는 소수점 이하 7자리, 즉 일반 플로트. 계산의 정확도를 높이기 위해서는 긴 연산이 필요하며, 여기서 문제가 발생합니다. 이를 효과적으로 구현하는 것은 매우 어렵습니다. CUDA를 사용하여 소수점 이하 100만 자리까지 Pi를 계산하는 예제를 인터넷에서 찾을 수 없었습니다. 그러한 응용 프로그램을 작성하려는 시도가 있었지만 가장 간단하고 가장 효과적인 방법숫자 Pi를 계산하는 방법은 Brent-Salamin 알고리즘 또는 Gauss 공식입니다. 잘 알려진 SuperPI(작동 속도와 반복 횟수로 판단)는 가우스 공식을 사용할 가능성이 높습니다. 그리고 판단해 보면
SuperPI가 단일 스레드라는 사실, CUDA에서의 예제 부족 및 시도 실패로 인해 Pi 계산을 효과적으로 병렬화하는 것은 불가능합니다.

그런데 계산 중에 GPU의 부하가 어떻게 증가하고 메모리도 할당되는지 확인할 수 있습니다.

이제 CUDA의 보다 실용적인 이점, 즉 이 기술을 사용하는 현재 존재하는 프로그램에 대해 살펴보겠습니다. 대부분의 경우 이들은 모든 종류의 오디오/비디오 변환기 및 편집기입니다.

테스트에는 3가지 다른 비디오 파일이 사용되었습니다.

      *영화 아바타 제작의 역사 - 1920x1080, MPEG4, h.264.
      *시리즈 "Lie to me" - 1280x720, MPEG4, h.264.
      *시리즈 "필라델피아는 항상 맑습니다" - 624x464, xvid.

처음 두 파일의 컨테이너와 크기는 .mkv 및 1.55GB였으며 마지막 파일은 .avi 및 272MB였습니다.

매우 감각적이고 인기 있는 제품부터 시작해 보겠습니다. 바다붐. 사용된 버전 - 1.2.1.74 . 프로그램 비용은 $29.90 .

프로그램 인터페이스는 간단하고 직관적입니다. 왼쪽에서는 소스 파일이나 디스크를 선택하고 오른쪽에서는 인코딩할 필수 장치를 선택합니다. 매개변수를 수동으로 설정하는 사용자 모드도 있는데, 이것이 바로 우리가 사용한 것입니다.

먼저, 비디오가 "자체"로 얼마나 빠르고 효율적으로 인코딩되는지 살펴보겠습니다. 해상도도 같고 크기도 거의 같습니다. 속도는 경과 시간이 아닌 fps 단위로 측정합니다. 이렇게 하면 임의 길이의 비디오가 얼마나 압축되는지 비교하고 계산하는 것이 더 편리합니다. 왜냐하면 오늘 우리는 "친환경" 기술을 고려하고 있으며 그래프가 이에 상응할 것입니다 -)

인코딩 속도는 품질에 직접적으로 좌우되며 이는 명백합니다. Badaboom에서는 가벼운 해상도(전통적으로 SD라고 함)가 문제가 되지 않는다는 점은 주목할 가치가 있습니다. 인코딩 속도는 원본(24fps) 비디오 프레임 속도보다 5.5배 더 높습니다. 그리고 대용량 1080p 비디오도 프로그램을 통해 실시간으로 변환됩니다. 최종 비디오의 품질이 원본 비디오 자료와 매우 유사하다는 점은 주목할 가치가 있습니다. Badaboom은 매우 효율적으로 인코딩합니다.

하지만 일반적으로 비디오를 더 낮은 해상도로 전송하므로 이 모드의 상황을 살펴보겠습니다. 해상도가 감소함에 따라 비디오 비트레이트도 감소했습니다. 1080p 출력 파일의 경우 9500kbps, 720p의 경우 4100kbps, 720x404의 경우 2400kbps였습니다. 합리적인 크기/품질 비율을 기준으로 선택되었습니다.

댓글이 필요하지 않습니다. 720p에서 일반 SD 품질로 리핑하는 경우 2시간 분량의 영화를 트랜스코딩하는 데 약 30분이 소요됩니다. 동시에 프로세서 로드는 미미하므로 불편함을 느끼지 않고 업무를 수행할 수 있습니다.

동영상을 모바일 기기용 포맷으로 변환한다면 어떨까요? 이렇게 하려면 iPhone 프로필(비트 전송률 1Mbit/s, 480x320)을 선택하고 인코딩 속도를 확인하세요.

무슨 말이라도 해야 합니까? 일반 iPhone 품질의 2시간짜리 영화는 15분 이내에 코드 변환됩니다. HD 품질을 사용하면 더 어렵지만 여전히 매우 빠릅니다. 가장 중요한 것은 출력 비디오 자료의 품질이 상당히 유지된다는 것입니다. 높은 레벨전화기 디스플레이에서 볼 때.

일반적으로 Badaboom에 대한 인상은 긍정적이고, 작동 속도가 만족스러우며, 인터페이스가 간단하고 명확합니다. 온갖 종류의 버그 이전 버전(저는 2008년에 베타를 사용했습니다.) 치료되었습니다. 한 가지를 제외하면 소스 파일의 경로와 완성된 비디오가 저장되는 폴더의 경로에는 러시아어 문자가 포함되어서는 안 됩니다. 하지만 프로그램의 장점에 비하면 이런 단점은 미미합니다.

다음 줄에는 슈퍼 LoiLoScope. 일반 버전의 경우 그들은 묻습니다. 3,280루블, Windows 7에서 터치 제어를 지원하는 터치 버전의 경우 4,440루블. 개발자가 왜 그런 종류의 돈을 원하는지, 비디오 편집자에게 멀티터치 지원이 필요한 이유를 알아내도록 노력해 보겠습니다. 사용된 최신 버전 - 1.8.3.3 .

프로그램 인터페이스를 말로 설명하기가 꽤 어려워서 짧은 영상을 만들어 보기로 했습니다. 모든 CUDA용 비디오 변환기와 마찬가지로 GPU 가속은 h.264 코덱을 사용하는 MPEG4의 비디오 출력에만 지원된다는 점을 바로 말씀드리겠습니다.

인코딩시 프로세서 부하가 100% 이지만 불편함을 주지는 않습니다. 브라우저 및 기타 가벼운 응용 프로그램은 속도가 느려지지 않습니다.

이제 성능으로 넘어 갑시다. 우선, 모든 것이 Badaboom과 동일합니다. 즉, 비디오를 비슷한 품질의 비디오로 트랜스코딩합니다.

결과는 Badaboom보다 훨씬 좋습니다. 품질도 우수하며 원본과의 차이점은 돋보기 아래에서 프레임을 쌍으로 비교해야만 알 수 있습니다.

와, 여기 LoiloScope가 Badaboom보다 2.5배 더 뛰어납니다. 동시에 다른 비디오를 병렬로 쉽게 자르고 인코딩할 수 있으며, 뉴스를 읽고 영화를 볼 수도 있으며, 심지어 프로세서 부하가 최대임에도 불구하고 FullHD도 문제 없이 재생됩니다.

이제 모바일 장치용 비디오를 만들어 보겠습니다. Badaboom – iPhone(480x320, 1 Mbit/s)에서 호출한 것과 동일한 프로필을 호출해 보겠습니다.

오류가 없습니다. 모든 것을 여러 번 재확인했지만 매번 결과는 동일했습니다. 아마도 이는 SD 파일이 다른 코덱과 다른 컨테이너에 기록되었기 때문에 발생하는 것입니다. 트랜스코딩 시 비디오는 먼저 디코딩되어 특정 크기의 행렬로 분할된 후 압축됩니다. xvid의 경우에 사용되는 ASP 디코더는 병렬 디코딩 시 AVC(h.264용)보다 속도가 느립니다. 그러나 192fps는 원본 비디오 속도보다 8배 빠르며, 23분짜리 시리즈가 4분 이내에 압축됩니다. xvid/DivX로 압축된 다른 파일에서도 이러한 상황이 반복되었습니다.

로일로스코프나는 즐거운 인상만을 남겼습니다. 인터페이스는 특이함에도 불구하고 편리하고 기능적이며 작동 속도는 칭찬할 수 없습니다. 상대적으로 열악한 기능은 다소 실망스럽습니다. 그러나 간단한 설치만으로 색상을 약간 조정하고, 부드럽게 전환하고, 텍스트를 추가하기만 하면 되는 경우가 많으며, LoiloScope는 이 작업을 훌륭하게 수행합니다. 가격도 다소 무섭습니다. 일반 버전의 경우 100달러 이상이 외국에서는 정상이지만, 우리에게는 여전히 그런 수치가 다소 터무니없어 보입니다. 하지만 예를 들어 홈 비디오를 자주 촬영하고 편집했다면 구매를 고려했을 수도 있다는 점은 인정합니다. 동시에 다른 형식으로 먼저 변환하지 않고 비디오 카메라에서 직접 HD(또는 AVCHD) 콘텐츠를 편집할 수 있는지 확인했는데 LoiloScope는 .mts와 같은 파일에 어떤 문제도 밝히지 않았습니다.

최신 프로세서 개발에서는 코어 수가 점진적으로 증가하여 병렬 컴퓨팅 기능이 향상되는 경향이 있습니다. 그러나 이 점에서 CPU보다 훨씬 뛰어난 GPU는 오랫동안 사용되어 왔습니다. 그리고 GPU의 이러한 기능은 이미 일부 회사에서 고려되었습니다. 논타겟 컴퓨팅에 그래픽 가속기를 사용하려는 첫 번째 시도는 90년대 후반부터 이루어졌습니다. 그러나 셰이더의 출현만이 완전히 새로운 기술 개발의 원동력이 되었고, 2003년에는 GPGPU(범용 그래픽 처리 장치)라는 개념이 등장했습니다. 이 계획의 개발에서 중요한 역할은 C 언어의 특수 확장인 BrookGPU에 의해 수행되었습니다. BrookGPU가 등장하기 전에는 프로그래머가 Direct3D 또는 OpenGL API를 통해서만 GPU로 작업할 수 있었습니다. Brook은 개발자가 친숙한 환경에서 작업할 수 있도록 허용했으며 컴파일러 자체는 특수 라이브러리를 사용하여 낮은 수준에서 GPU와의 상호 작용을 구현했습니다.

이러한 발전은 비디오 카드에서 비그래픽 컴퓨팅을 위한 자체 소프트웨어 플랫폼을 개발하기 시작한 AMD와 NVIDIA 등 업계 리더들의 관심을 끌 수밖에 없었습니다. GPU 개발자보다 제품의 모든 뉘앙스와 기능을 더 잘 아는 사람은 없습니다. 이를 통해 동일한 회사는 특정 하드웨어 솔루션에 대한 소프트웨어 패키지를 최대한 효율적으로 최적화할 수 있습니다. 현재 NVIDIA는 CUDA(Compute Unified Device Architecture) 플랫폼을 개발 중이며, AMD는 유사한 기술을 CTM(Close To Metal) 또는 AMD Stream Computing이라고 부릅니다. CUDA의 일부 기능을 살펴보고 실제로 GeForce 8800 GT 비디오 카드의 G92 그래픽 칩의 컴퓨팅 기능을 평가해 보겠습니다.

하지만 먼저 GPU를 사용하여 계산을 수행할 때의 미묘한 차이를 살펴보겠습니다. 주요 장점은 그래픽 칩이 처음에 여러 스레드를 실행하도록 설계되었지만 기존 CPU의 각 코어는 순차적 명령 스트림을 실행한다는 것입니다. 모든 최신 GPU는 각각 많은 ALU가 있는 여러 컴퓨팅 클러스터로 구성된 멀티프로세서입니다. 가장 강력한 최신 GT200 칩은 10개의 클러스터로 구성되며 각 클러스터에는 24개의 스트림 프로세서가 있습니다. 테스트된 G92 칩 기반 GeForce 8800 GT 비디오 카드에는 각각 16개의 스트림 프로세서가 있는 7개의 대형 컴퓨팅 장치가 있습니다. CPU는 벡터 계산(단일 명령어 다중 데이터 - 하나의 명령어가 여러 데이터에서 실행됨)에 SIMD SSE 블록을 사용하며, 이를 위해서는 데이터를 4개의 벡터로 변환해야 합니다. GPU는 스레드를 스칼라 방식으로 처리합니다. 하나의 명령이 여러 스레드에 적용됩니다(SIMT - 단일 명령 다중 스레드). 이를 통해 개발자는 데이터를 벡터로 변환할 필요가 없으며 스트림에서 임의 분기가 가능합니다. 각 GPU 컴퓨팅 유닛은 직접 메모리에 액세스할 수 있습니다. 그리고 여러 개의 개별 메모리 컨트롤러(최상위 G200에는 8개의 64비트 채널이 있음)와 높은 작동 주파수 덕분에 비디오 메모리 대역폭이 더 높습니다.

일반적으로 작업할 때 특정 작업에서는 대용량 GPU 데이터는 CPU보다 훨씬 빠른 것으로 나타났습니다. 아래에서 이 진술에 대한 그림을 볼 수 있습니다.


이 차트는 2003년 이후 CPU 및 GPU 성능 성장의 역학을 보여줍니다. NVIDIA는 이 데이터를 자사 문서에서 광고로 인용하는 것을 좋아하지만 이는 단지 이론적 계산일 뿐이며 실제로는 그 차이가 훨씬 작을 수도 있습니다.

그러나 GPU에는 사용할 수 있는 엄청난 잠재력이 있으며 소프트웨어 개발에 대한 구체적인 접근 방식이 필요합니다. 이 모든 것은 높은 수준의 CUDA Runtime API와 낮은 수준의 CUDA 드라이버 API 등 여러 소프트웨어 수준으로 구성된 CUDA 하드웨어 및 소프트웨어 환경에서 구현됩니다.


CUDA는 프로그래밍에 표준 C 언어를 사용하는데, 이는 개발자에게 가장 큰 장점 중 하나입니다. 처음에 CUDA에는 BLAS(기본 선형 대수 패키지) 및 FFT(푸리에 변환) 라이브러리가 포함되어 있습니다. CUDA는 또한 OpenGL 또는 DirectX 그래픽 API와 상호 작용할 수 있는 능력, 낮은 수준에서 개발할 수 있는 능력, CPU와 GPU 간의 최적화된 데이터 스트림 배포가 특징입니다. CUDA 계산은 일반적으로 GPU 계산을 위해 특수 계산이 시작되는 유사한 AMD 플랫폼과 달리 그래픽 계산과 동시에 수행됩니다. 가상 기기. 그러나 CUDA가 동시에 실행되는 동안 그래픽 API에 의해 큰 로드가 생성되면 이러한 "동거"에는 오류가 발생합니다. 결국 그래픽 작업의 우선 순위는 여전히 더 높습니다. 이 플랫폼은 32비트 및 64비트 운영 체제인 Windows XP, Windows Vista, MacOS X 및 다양한 Linux 버전과 호환됩니다. 플랫폼은 공개되어 있으며 웹사이트에서 비디오 카드용 특수 드라이버 외에도 컴파일러, 디버거, 표준 라이브러리 및 설명서를 포함한 소프트웨어 패키지 CUDA 툴킷, CUDA 개발자 SDK를 다운로드할 수 있습니다.

CUDA의 실제 구현과 관련하여 오랫동안 이 기술은 입자 물리학, 천체 물리학, 의학 또는 금융 시장 변화 예측 등 분야의 고도로 전문화된 수학적 계산에만 사용되었습니다. 하지만 이 기술은 점차 일반 사용자에게 가까워지고 있으며, 특히 GPU의 컴퓨팅 성능을 활용할 수 있는 Photoshop용 특수 플러그인이 등장하고 있습니다. 특별 페이지에서 NVIDIA CUDA 기능을 사용하는 전체 프로그램 목록을 살펴볼 수 있습니다.

MSI NX8800GT-T2D256E-OC 비디오 카드의 새로운 기술에 대한 실제 테스트로 TMPGEnc 프로그램을 사용하겠습니다. 이 제품상업용(정식 버전의 가격은 100달러)이지만 MSI 비디오 카드의 경우 30일 동안 평가판에서 보너스로 제공됩니다. 개발자 웹사이트에서 이 버전을 다운로드할 수 있지만 TMPGEnc 4.0 XPress MSI Special Edition을 설치하려면 MSI 카드의 드라이버가 포함된 원본 디스크가 필요합니다. 이 디스크가 없으면 프로그램이 설치되지 않습니다.

최대값을 표시하려면 완전한 정보 CUDA의 컴퓨팅 기능과 다른 비디오 어댑터와의 비교에 대해서는 특수 유틸리티 CUDA-Z를 사용할 수 있습니다. 다음은 GeForce 8800GT 비디오 카드에 대해 제공하는 정보입니다.




참조 모델과 비교하여 우리의 사본은 더 높은 주파수에서 작동합니다. 래스터 도메인은 공칭 도메인보다 63MHz 더 높고 셰이더 유닛은 174MHz 더 빠르며 메모리는 100MHz 더 빠릅니다.

다음 구성에서 CPU만 사용하고 TMPGEnc 프로그램에서 CUDA를 추가로 활성화하여 계산할 때 동일한 HD 비디오의 변환 속도를 비교해 보겠습니다.

  • 프로세서: 펜티엄 듀얼 코어 E5200 2.5GHz;
  • 마더보드: 기가바이트 P35-S3;
  • 메모리: 2x1GB GoodRam PC6400(5-5-5-18-2T)
  • 비디오 카드: MSI NX8800GT-T2D256E-OC;
  • 하드 드라이브: 320GB WD3200AAKS;
  • 전원 공급 장치: CoolerMaster eXtreme Power 500-PCAP;
  • 운영 체제: Windows XP SP2;
  • TMPGEnc 4.0 XPress 4.6.3.268;
  • 비디오 카드 드라이버: ForceWare 180.60.
테스트를 위해 프로세서는 첫 번째와 두 번째 경우에 835MHz의 RAM 주파수를 사용하여 3GHz(11.5x261MHz 구성) 및 4GHz(11.5x348MHz)로 오버클럭되었습니다. Full HD 1920x1080 해상도의 비디오, 길이 1분 20초. 추가 부하를 생성하기 위해 소음 감소 필터가 켜져 있었고 그 설정은 기본값으로 유지되었습니다.


인코딩은 DivX 6.8.4 코덱을 사용하여 수행되었습니다. 이 코덱의 품질 설정에서는 모든 값이 기본값으로 유지되고 멀티스레딩이 활성화됩니다.


TMPGEnc의 멀티스레딩 지원은 처음에 CPU/GPU 설정 탭에서 활성화됩니다. CUDA도 같은 섹션에서 활성화됩니다.


위 스크린샷에서 볼 수 있듯이 CUDA를 사용한 필터 처리가 활성화되어 있지만 하드웨어 비디오 디코더는 활성화되어 있지 않습니다. 프로그램 문서에서는 마지막 매개변수를 활성화하면 파일 처리 시간이 늘어난다고 경고합니다.

테스트 결과를 바탕으로 다음과 같은 데이터가 얻어졌습니다.


CUDA가 활성화된 4GHz에서 우리는 단지 몇 초(또는 2%)만 얻었는데 이는 특별히 인상적이지는 않습니다. 그러나 낮은 빈도에서 이 기술을 활성화하면 약 13%의 시간을 절약할 수 있으며 이는 대용량 파일을 처리할 때 상당히 눈에 띄게 나타납니다. 하지만 여전히 결과는 기대만큼 인상적이지 않습니다.

TMPGEnc 프로그램에는 CPU 및 CUDA 로드 표시기가 있는데, 이번 테스트 구성에서는 CPU 로드가 약 20%, 그래픽 코어가 나머지 80%로 나타났습니다. 결과적으로 CUDA를 사용하지 않고 변환했을 때와 100% 동일하며, 시간 차이가 전혀 없을 수도 있습니다(그러나 여전히 존재합니다). 256MB의 작은 메모리 용량도 제한 요소가 아닙니다. RivaTuner의 판독값으로 판단하면 작동 중에 154MB 이하의 비디오 메모리가 사용되었습니다.



결론

TMPGEnc 프로그램은 CUDA 기술을 대중에게 소개하는 프로그램 중 하나입니다. 이 프로그램에서 GPU를 사용하면 비디오 처리 속도가 빨라지고 중앙 프로세서의 부담이 크게 줄어들어 사용자가 동시에 다른 작업을 편안하게 수행할 수 있습니다. 구체적인 예에서 GeForce 8800GT 256MB 비디오 카드는 오버클럭된 Pentium 듀얼 코어 E5200 프로세서를 기반으로 비디오를 변환할 때 타이밍 성능을 약간 향상시켰습니다. 그러나 주파수가 감소함에 따라 CUDA 활성화로 인한 이득이 증가하고 약한 프로세서에서는 사용으로 인한 이득이 훨씬 더 커진다는 것이 분명합니다. 이러한 의존성을 배경으로 부하가 증가하더라도(예를 들어 매우 많은 분량추가 비디오 필터) CUDA를 사용하는 시스템의 결과는 인코딩 프로세스에 소요되는 시간 차이의 더 큰 차이로 강조 표시됩니다. 또한 G92는 현재 가장 강력한 칩이 아니며 최신 비디오 카드가 더 높은 성능을 제공할 것이라는 점을 잊지 마십시오. 유사한 응용 프로그램. 그러나 응용 프로그램이 실행되는 동안 GPU는 완전히 로드되지 않으며 아마도 로드 분포는 각 구성, 즉 프로세서/비디오 카드 조합에 따라 개별적으로 달라질 수 있으며, 이는 궁극적으로 백분율로 더 크거나 작은 증가를 제공할 수 있습니다. CUDA 활성화. 어쨌든 대용량 비디오 데이터를 작업하는 사람들의 경우 이 기술을 사용하면 시간을 크게 절약할 수 있습니다.

사실, CUDA는 아직 광범위한 인기를 얻지 못했으며 이 기술을 사용하는 소프트웨어의 품질에는 개선이 필요합니다. 우리가 검토한 TMPGEnc 4.0 XPress 프로그램에서 이 기술이 항상 작동하는 것은 아닙니다. 동일한 비디오를 여러 번 다시 인코딩할 수 있었는데 갑자기 다음 번에 실행되었을 때 CUDA 로드가 이미 0%였습니다. 그리고 이 현상은 완전히 다른 방식으로 완전히 무작위로 발생했습니다. 운영체제. 또한 문제의 프로그램은 XviD 형식으로 인코딩할 때 CUDA 사용을 거부했지만 널리 사용되는 DivX 코덱에는 문제가 없었습니다.

결과적으로 지금까지 CUDA 기술은 특정 작업에서만 개인용 컴퓨터의 성능을 크게 향상시킬 수 있었습니다. 하지만 이러한 기술의 적용 범위가 확대될 것이며, 코어 수를 늘리는 과정이 진행될 것입니다. 기존 프로세서이는 최신 소프트웨어 애플리케이션에서 병렬 멀티스레드 컴퓨팅에 대한 수요가 증가하고 있음을 나타냅니다. 괜히 그런 게 아니잖아 최근에모든 업계 리더들은 하나의 통합 아키텍처 내에서 CPU와 GPU를 결합한다는 아이디어에 열광했습니다. AMD 퓨전). 아마도 CUDA는 이러한 통합 과정의 한 단계일 것입니다.


테스트 장비를 제공해 주신 다음 회사에 감사드립니다.

새로운 기술- 새롭게 출현한 진화종으로서. 많은 노인들과는 달리 이상한 생물. 때로는 어색하고 때로는 재미있습니다. 그리고 처음에는 그의 새로운 특성이 이 안정되고 안정적인 세상에 적합하지 않은 것 같습니다.

그러나 약간의 시간이 지나면 초보자가 더 빨리 달리고 더 높이 점프하며 일반적으로 더 강하다는 것이 밝혀졌습니다. 그리고 그는 역행하는 이웃보다 더 많은 파리를 먹습니다. 그리고 나서 이 같은 이웃들은 이 서투른 전자와 다투는 것이 의미가 없다는 것을 이해하기 시작합니다. 그와 친구가 되는 것이 더 좋고, 공생을 조직하는 것이 더 좋습니다. 파리가 더 많아지는 것을 볼 수 있습니다.

GPGPU 기술(범용 그래픽 처리 장치 - 범용 그래픽 프로세서)은 오랫동안 똑똑한 학자들의 이론적 계산에만 존재했습니다. 또 어떻게? 병렬 분기의 계산을 비디오 카드에 맡겨 수십 년 동안 발전해 온 컴퓨팅 프로세스를 근본적으로 변화시키려는 제안은 이론가들만이 가능합니다.

CUDA 기술의 로고는 그것이 우주의 깊은 곳에서 성장했음을 상기시켜줍니다.
3D 그래픽.

그러나 GPGPU 기술은 오랫동안 대학 저널 페이지에 먼지를 쌓을 수 없었습니다. 깃털을 휘날리며 최고의 자질, 제조업체의 관심을 끌었습니다. 이것이 CUDA가 탄생한 방법입니다. GPGPU를 구현한 것입니다. GPU nVidia에서 제조한 GeForce입니다.

CUDA 덕분에 GPGPU 기술이 주류가 되었습니다. 그리고 이제 가장 근시안적이고 두꺼운 게으름으로 뒤덮인 프로그래밍 시스템 개발자만이 자사 제품에 대한 CUDA 지원을 선언하지 않습니다. IT 간행물은 수많은 대중 과학 기사에서 기술의 세부 사항을 제시하는 것을 영광으로 여겼고 경쟁 업체는 즉시 패턴과 크로스 컴파일러를 사용하여 유사한 것을 개발했습니다.

대중의 인정은 야심 찬 신인뿐만 아니라 새로 탄생한 기술의 꿈이기도 합니다. 그리고 CUDA는 운이 좋았습니다. 그녀는 잘 알려져 있으며 사람들은 그녀에 대해 이야기하고 글을 씁니다.

마치 두꺼운 과학 저널에서 GPGPU를 계속 논의하는 것처럼 글을 쓰고 있습니다. 그들은 "그리드", "SIMD", "워프", "호스트", "텍스처 및 상수 메모리"와 같은 수많은 용어로 독자를 공격합니다. 그들은 그를 nVidia GPU의 조직 다이어그램의 맨 위로 몰입시키고 병렬 알고리즘의 구불구불한 경로를 따라 이끌고 (가장 강력한 움직임) C 언어로 된 긴 코드 목록을 보여줍니다. 결과적으로 기사의 입력에는 CUDA를 이해하려는 불타는 열망을 가진 새로운 독자가 있고 출력에는 동일한 독자가 있지만 사실과 다이어그램의 혼란으로 가득 찬 머리가 부풀어 오른 것으로 나타났습니다. , 코드, 알고리즘 및 용어.

한편, 모든 기술의 목표는 우리의 삶을 더 편리하게 만드는 것입니다. 그리고 CUDA는 이를 훌륭하게 수행합니다. 그녀의 작업 결과는 수백 가지 계획과 알고리즘보다 회의론자들을 더 잘 설득할 것입니다.

모든 곳이 아님

CUDA는 고성능 슈퍼컴퓨터의 지원을 받습니다.
엔비디아 테슬라.

그러나 일반 사용자의 삶을 더 쉽게 만드는 분야에서 CUDA의 작업 결과를 살펴보기 전에 모든 한계를 이해하는 것이 좋습니다. 지니와 마찬가지로 어떤 욕망이든 단 하나입니다. CUDA에도 아킬레스건이 있습니다. 그 중 하나는 작동할 수 있는 플랫폼의 한계입니다.

CUDA를 지원하는 nVidia 비디오 카드 목록은 CUDA 지원 제품이라는 특별 목록에 표시됩니다. 목록은 매우 인상적이지만 분류하기 쉽습니다. CUDA 지원은 거부되지 않습니다.

    nVidia GeForce 8번째, 9번째, 100번째, 200번째 및 400번째 시리즈 모델에는 최소 256MB의 비디오 메모리가 탑재되어 있습니다. 지원은 데스크탑과 모바일 카드 모두로 확장됩니다.

    대부분의 데스크탑 및 모바일 비디오 카드는 nVidia Quadro입니다.

    NVIDIA ION 넷북 시리즈의 모든 솔루션.

    개인용 컴퓨팅과 확장 가능한 클러스터 시스템 구성에 모두 사용되는 고성능 HPC(고성능 컴퓨팅) 및 nVidia Tesla 슈퍼컴퓨터 솔루션입니다.

그러므로 신청하기 전에 소프트웨어 제품 CUDA를 기반으로 하는 이 즐겨찾기 목록을 확인해 볼 가치가 있습니다.

CUDA를 지원하려면 비디오 카드 자체 외에도 적절한 드라이버가 필요합니다. 이는 GPU의 멀티 코어 보물 창고에 대한 프로그램 코드와 데이터에 액세스하기 위한 일종의 소프트웨어 인터페이스 역할을 하는 중앙 프로세서와 그래픽 프로세서 사이의 링크입니다. 실수하지 않도록 nVidia에서는 드라이버 페이지를 방문하여 최신 버전을 다운로드할 것을 권장합니다.

...하지만 프로세스 자체는

CUDA는 어떻게 작동하나요? 독자를 특정 용어의 심연에 빠뜨리지 않고 특수 GPU 하드웨어 아키텍처에서 병렬 컴퓨팅의 복잡한 프로세스를 설명하는 방법은 무엇입니까?

중앙 프로세서가 그래픽 프로세서와 공생하여 프로그램을 실행하는 방법을 상상해 보면 이를 시도할 수 있습니다.

구조적으로 중앙 처리 장치(CPU)와 해당 그래픽 장치(GPU)는 다르게 설계되었습니다. 자동차 산업의 세계에 비유하자면 CPU는 "헛간"이라고 불리는 스테이션 왜건 중 하나입니다. 승용차처럼 보이지만 동시에 (개발자의 관점에서) “스위스인이자 사신이자 파이프 위의 플레이어입니다.” 소형 트럭, 버스, 비대해진 해치백의 역할을 동시에 수행합니다. 줄여서 스테이션 왜건. 실린더 코어는 거의 없지만 거의 모든 작업을 처리하며 인상적인 캐시 메모리는 많은 데이터를 저장할 수 있습니다.

그러나 GPU는 스포츠카입니다. 기능은 단 하나뿐입니다. 조종사를 결승선까지 최대한 빨리 전달하는 것입니다. 따라서 대용량 트렁크 메모리도 없고, 추가 좌석도 없습니다. 그러나 CPU보다 수백 배 더 많은 실린더 코어가 있습니다.

CUDA 덕분에 GPGPU 프로그램 개발자는 프로그래밍의 복잡성을 깊이 파고들 필요가 없습니다.
DirectX, OpenGL 등 그래픽 엔진 개발

그래픽을 포함하여 모든 작업을 해결할 수 있지만 평균 성능을 발휘하는 중앙 프로세서와는 달리 그래픽 프로세서는 입력 시 여러 개의 다각형을 여러 개의 픽셀로 변환하는 단일 작업의 고속 솔루션에 적합합니다. 출력. 더욱이 이 문제는 GPU에서 수백 개의 비교적 간단한 컴퓨팅 코어를 사용하여 병렬로 해결될 수 있습니다.

그렇다면 스테이션 왜건과 스포츠카에서 어떤 종류의 탠덤이 있을 수 있습니까? CUDA는 다음과 같이 작동합니다. 프로그램은 병렬로 실행될 수 있는 코드 섹션이 있을 때까지 CPU에서 실행됩니다. 그런 다음 가장 멋진 CPU의 2개(또는 8개) 코어에서 천천히 실행되는 대신 수백 개의 GPU 코어로 전송됩니다. 동시에 이 섹션의 실행 시간이 크게 단축됩니다. 이는 전체 프로그램의 실행 시간도 단축된다는 의미입니다.

기술적으로 프로그래머에게는 변화가 없습니다. CUDA 프로그램의 코드는 C 언어로 작성되었습니다. 보다 정확하게는 특수 방언 "C with streams"(C with streams)입니다. 스탠포드에서 개발된 C 언어의 확장 버전을 브룩(Brook)이라고 합니다. Brook 코드를 GPU로 전송하는 인터페이스는 CUDA를 지원하는 비디오 카드의 드라이버입니다. 프로그래머에게는 GPU가 CPU 보조 프로세서처럼 보이도록 프로그램의 이 섹션의 전체 처리 프로세스를 구성합니다. 개인 컴퓨팅 초기에 수학 보조 프로세서를 사용하는 것과 매우 유사합니다. CUDA를 지원하는 비디오 카드와 이를 위한 드라이버인 Brook의 출현으로 모든 프로그래머는 자신의 프로그램에서 GPU에 액세스할 수 있게 되었습니다. 그러나 이전에는 이 샤머니즘이 DirectX 또는 OpenGL 그래픽 엔진용 프로그래밍 기술을 수년간 연마한 선택된 소수의 사람들에 의해 소유되었습니다.

이 가식적 인 꿀 통 (CUDA의 칭찬)에는 연고, 즉 제한 사항에 파리를 넣을 가치가 있습니다. 프로그래밍해야 하는 모든 문제를 CUDA를 사용하여 해결할 수 있는 것은 아닙니다. 루틴 해결 속도 향상 사무실 업무작동하지는 않지만 CUDA가 월드 오브 워크래프트에 있는 수천 명의 유사한 전투기의 행동을 계산한다고 믿을 수 있습니다. 그러나 이것은 만들어진 작업입니다. CUDA가 이미 매우 효과적으로 해결한 사례를 살펴보겠습니다.

의로운 일

CUDA는 매우 실용적인 기술입니다. 비디오 카드에 지원을 구현한 nVidia는 CUDA 배너가 대학 환경과 상업 분야 모두에서 많은 열성팬에 의해 채택될 것이라고 예상했습니다. 그래서 그런 일이 일어났습니다. CUDA 기반 프로젝트는 실시간으로 혜택을 제공합니다.

엔비디아 피직스(PhysX)

제조업체는 차기 게임 걸작을 광고할 때 종종 3D 현실성을 강조합니다. 하지만 3D 게임 세계가 아무리 현실적이라 할지라도 중력, 마찰, 유체역학 등 물리의 기본 법칙이 잘못 구현되면 즉시 거짓이 느껴지게 됩니다.

NVIDIA PhysX 물리 엔진의 기능 중 하나는 조직을 사용한 현실적인 작업입니다.

기본 물리 법칙의 컴퓨터 시뮬레이션을 위한 알고리즘을 구현하는 것은 매우 노동 집약적인 작업입니다. 이 분야에서 가장 유명한 회사는 크로스 플랫폼 물리적 Havok Physics를 갖춘 아일랜드 회사 Havok과 세계 최초의 물리적 프로세서(PPU - Physics Process Unit) 및 해당 PhysX 물리 엔진의 시조인 Californian Ageia입니다. 그 중 첫 번째 회사는 Intel이 인수했지만 현재 ATI 비디오 카드 및 AMD 프로세서용 Havok 엔진 최적화 분야에서 적극적으로 노력하고 있습니다. 그러나 PhysX 엔진을 갖춘 Ageia는 nVidia의 일부가 되었습니다. 동시에 nVidia는 PhysX를 CUDA 기술에 적용하는 다소 어려운 문제를 해결했습니다.

이는 통계 덕분에 가능해졌다. GPU가 아무리 복잡한 렌더링을 수행하더라도 일부 코어는 여전히 유휴 상태라는 것이 통계적으로 입증되었습니다. PhysX 엔진이 실행되는 것은 이러한 코어입니다.

CUDA 덕분에 게임 세계의 물리학과 관련된 계산의 대부분이 비디오 카드에서 수행되기 시작했습니다. 중앙 프로세서의 여유 있는 성능은 다른 게임 플레이 문제를 해결하는 데 사용되었습니다. 결과는 그리 오래 걸리지 않았습니다. 전문가에 따르면 CUDA에서 실행되는 PhysX를 사용하면 게임플레이 성능이 최소한 한 자릿수 증가했습니다. 물리 법칙을 실현할 가능성도 높아졌습니다. CUDA는 다차원 물체에 대해 우리에게 친숙한 마찰, 중력 및 기타 사항의 구현에 대한 일상적인 계산을 처리합니다. 이제 영웅과 그들의 장비만이 우리에게 익숙한 법칙에 완벽하게 들어맞는 것이 아닙니다. 물리적 세계, 먼지, 안개, 폭발 파, 화염 및 물도 있습니다.

NVIDIA Texture Tools 2 텍스처 압축 패키지의 CUDA 버전

나는 현실적인 물체를 좋아한다. 현대 게임? 텍스처 개발자들에게 감사 인사를 전할 가치가 있습니다. 그러나 텍스처에 현실감이 많을수록 볼륨도 커집니다. 소중한 메모리를 더 많이 차지합니다. 이를 방지하기 위해 텍스처는 사전 압축되고 필요에 따라 동적으로 압축이 해제됩니다. 그리고 압축과 압축 해제는 순수한 계산입니다. 텍스처 작업을 위해 nVidia는 NVIDIA Texture Tools 패키지를 출시했습니다. DirectX 텍스처(소위 HF 형식)의 효율적인 압축 및 압축 해제를 지원합니다. 이 패키지의 두 번째 버전은 DirectX 11 기술로 구현된 BC4 및 BC5 압축 알고리즘에 대한 지원을 자랑하지만 가장 중요한 것은 NVIDIA Texture Tools 2에 CUDA 지원이 포함되어 있다는 것입니다. nVidia에 따르면 이를 통해 텍스처 압축 및 압축 해제 작업 성능이 12배 향상됩니다. 즉, 게임플레이 프레임이 더 빠르게 로드되고 사실성으로 플레이어를 즐겁게 합니다.

NVIDIA Texture Tools 2 패키지는 CUDA와 함께 작동하도록 설계되었습니다. 텍스처를 압축하고 압축을 풀 때 성능이 향상되는 것은 분명합니다.

CUDA를 사용하면 비디오 감시의 효율성이 크게 향상될 수 있습니다.

실시간 비디오 스트림 처리

누가 뭐라고 말하든, 스파이의 관점에서 볼 때 현재 세계는 생각보다 오웰의 빅 브라더의 세계에 훨씬 더 가깝습니다. 자동차 운전자와 공공장소 방문객 모두 비디오 카메라의 시선을 느낀다.

영상 정보의 강물이 처리 센터로 흘러 들어가 좁은 연결고리, 즉 사람과 만나게 됩니다. 대부분의 경우 그는 영상세계를 감시하는 마지막 권위자이다. 더욱이 권위는 가장 효과적이지 않습니다. 눈을 깜박이고 주의가 산만해지며 잠들려고 합니다.

CUDA 덕분에 비디오 스트림에서 여러 개체를 동시에 추적하는 알고리즘을 구현하는 것이 가능해졌습니다. 이 경우 프로세스는 실시간으로 이루어지며 비디오는 30fps로 가득 차 있습니다. 최신 멀티 코어 CPU에서 이러한 알고리즘을 구현하는 것과 비교할 때 CUDA는 성능이 2~3배 향상되었으며 이는 상당히 많은 것입니다.

비디오 변환, 오디오 필터링

Badaboom 비디오 변환기는 변환 속도를 높이기 위해 CUDA를 최초로 사용한 제품입니다.

새로운 비디오 대여 상품을 FullHD 화질로 큰 화면으로 감상하는 것이 좋습니다. 하지만 큰 화면이동 중에도 휴대할 수 없으며 FullHD 비디오 코덱이 모바일 기기의 저전력 프로세서에 문제를 일으킬 수 있습니다. 전환이 구출됩니다. 하지만 실제로 접해본 사람들 대부분은 전환 시간이 길다고 불평한다. 이는 이해할 수 있는 일이며 프로세스는 일상적이고 병렬화에 적합하며 CPU에서의 실행은 최적이 아닙니다.

그러나 CUDA는 이에 대처합니다. 첫 번째 징후는 Elevental의 Badaboom 변환기입니다. Badaboom 개발자들은 CUDA를 선택할 때 올바른 결정을 내렸습니다. 테스트 결과 표준 1시간 30분 분량의 영화를 20분 이내에 iPhone/iPod Touch 형식으로 변환하는 것으로 나타났습니다. CPU만 사용할 경우 이 프로세스는 1시간 이상 소요됩니다.

CUDA 및 전문 음악 애호가를 돕습니다. 그들 중 누구라도 효과적인 FIR 크로스오버(사운드 스펙트럼을 여러 대역으로 나누는 필터 세트)를 위해 왕국의 절반을 제공할 것입니다. 이 과정은 매우 노동집약적이며, 대용량오디오 자료로 인해 사운드 엔지니어는 몇 시간 동안 "연기"를 해야 합니다. CUDA 기반 FIR 크로스오버를 구현하면 작업 속도가 수백 배 향상됩니다.

쿠다 미래

GPGPU 기술을 현실로 만든 CUDA는 성공에 안주하지 않습니다. 모든 곳에서 발생하는 것처럼 반사 원리는 CUDA에서도 작동합니다. 이제 nVidia 비디오 프로세서의 아키텍처가 CUDA SDK 버전 개발에 영향을 미칠 뿐만 아니라 CUDA 기술 자체로 인해 nVidia가 칩 아키텍처를 재고하게 됩니다. 그러한 반영의 예로는 nVidia ION 플랫폼이 있습니다. 두 번째 버전은 CUDA 문제 해결을 위해 특별히 최적화되었습니다. 이는 상대적으로 저렴한 하드웨어 솔루션에서도 소비자가 CUDA의 모든 성능과 뛰어난 기능을 누릴 수 있음을 의미합니다.