문제

저는 약간의 PHP 경험을 통해 학위 프로그램을 통해 3 분의 2의 비즈니스 전공이며, 한 번의 입문 C ++ 클래스를 수강했으며 이제는 프로그래밍/컴퓨터 과학에 대한 비즈니스 선택을 후회합니다.

보다 고급 프로그래밍을 배우는 데 관심이 있습니다. 구체적으로 C, 결국 인공 신경망 데이터 분석 (AI, 비전 또는 음성 처리가 아니라 대규모 데이터 세트에서 데이터 포인트 간의 상관 관계를 찾는 것이 아니라 일반 데이터/통계 분석)을 위해 CUDA 아키텍처를 사용하는 것으로 진행됨).

C를 배우기 시작하는 방법에 대한 조언이 있습니까? 데이터 분석을위한 Ann/Bayesian 기술뿐만 아니라? 책이 너무 많아서 무엇을 선택 해야할지 모르겠습니다.

Cuda는 상당히 새롭기 때문에 학습자 친화적 인 (즉, 바보 같은) 자료가없는 것 같습니다. NVIDIA 문서를 넘어 CUDA를위한 학습 자원이 있습니까?

또한, GPGPU 컴퓨팅에 대한 이야기와 저를 도울 수있는 대규모 병렬 프로그래밍에 대해 어떤 리소스를 추천 하시겠습니까?

도움이 되었습니까?

해결책

새로운 기술이기 때문에 Cuda를 먼저 배우는 것이 좋습니다. 프로그래밍에 대한 배경 지식이 많지 않기 때문입니다.

C (또는 C ++)에 대한 경험이 많지 않기 때문에 Cuda는 성숙도, libs, 멋진 오류 메시지 등이 없기 때문에 배우는 데 어려움을 겪을 것입니다.

CUDA는 C에 익숙한 사람들을위한 것이며 (C ++ 경험도 도움이됩니다), 잘 알려진 문제의 해결책을 다시 생각하거나 재고하여 성능 향상이 필요한 문제가 있습니다.

"Ann/Bayesian"문제를 해결하려는 경우 C ++ 또는 C에서 솔루션을 만드는 것이 좋습니다. 스레드 나 멀티 스레딩을 만드는 것에 귀찮게하지 마십시오. 그런 다음 평가 후 직렬 솔루션의 응답 시간은 OpenMP를 사용하여 평행하게 만들려고 시도합니다. 그 후에도 여전히 더 많은 성능이 필요하다면 Cuda를 배우는 것이 좋습니다.

Cuda는 꽤 비밀 오류, 디버깅하기 어렵고 완전히 다른 아키텍처 등이 있기 때문에 이것이 유효한 점이라고 생각합니다.

여전히 관심이 있다면 Cuda를 배우는 몇 가지 링크입니다.

온라인 과정 :

포럼 (최고의 정보 출처) :

도구 :

CUDA에서 해결 된 문제 :

다른 팁

당신은 3 가지 다른 목표를 표현했습니다.

  • c
  • CUDA 플랫폼에 대한 코드 작성 학습
  • 데이터 분석을 위해 Bayes 'Nets 및/또는 신경망 사용 학습

첫째 :이 것들은 현장에서 이미 여러 학위를 가지고있는 사람들에게는 쉽지 않습니다. 만하면 베이지안 추론에 대해 알아보십시오. 그것은 데이터에 대한 추론에 사용할 수있는 가장 강력한 프레임 워크이며,이를 알아야합니다. Mackay의 책을 확인하십시오 (맨 아래에 언급). 당신은 확실히 자신에게 도전적인 과제를 설정했습니다 - 나는 당신에게 최선을 다하기를 바랍니다!

당신의 목표는 모두 상당히 다른 물고기 주전자입니다. C로 프로그램을 배우는 것은 그리 어렵지 않습니다. 나는 당신의 대학에서 "알고리즘 및 데이터 구조에 대한 소개"(보통 CS 메이저의 첫 번째 과정)를 취할 가능하다면 (아마도 Java에서 가르 칠 것입니다). 이것은 귀하에게 매우 유용하며 C의 기본 코딩은 단순히 학습 구문의 문제가됩니다.

CUDA 플랫폼에 대한 코드 작성을 배우는 것은 실질적으로 더 어려운 일입니다. 위에서 권장했듯이 OpenMPI를 먼저 확인하십시오. 일반적으로 컴퓨터 아키텍처 (Patterson & Hennessy is Nice)와 병렬 알고리즘에 관한 책에 대한 내용을 읽을 수 있습니다. 동시성을 본 적이 없다면 (즉, 세마포어에 대해 들어 본 적이없는 경우), 그것을 찾는 것이 유용 할 것입니다 (운영 체제 과정의 강의 노트는 아마도 그것을 다룰 것입니다 - MIT Open Courseware 참조). 마지막으로, 언급했듯이, 새로운 필드이기 때문에 GPU 프로그래밍에 사용할 수있는 좋은 참조는 거의 없습니다. 따라서 최선의 방법은 예제 소스 코드를 읽고 어떻게 수행되는지 배우는 것입니다.

마지막으로 베이지안 그물과 신경망. 먼저, 이것들이 상당히 다릅니다. 베이지안 네트워크는 (일반적으로 큰) 변수에 비해 관절 확률 분포를 나타내는 그래픽 (노드 및 가장자리) 방법입니다. "신경망"이라는 용어는 다소 모호하지만 일반적으로 간단한 처리 요소를 사용하여 데이터 포인트를 분류하기위한 비선형 기능을 학습하는 것을 의미합니다. 베이 에스 네트와 신경망에 대한 정말 좋은 소개를 제공하는 책은 David JC MacKay의 정보 이론, 추론 및 학습 알고리즘입니다. 이 책은 온라인에서 무료로 제공됩니다 http://www.inference.phy.cam.ac.uk/mackay/itila/. 이 책은 그 주제에서 내가 가장 좋아하는 것입니다. 박람회는 매우 명확하며 운동은 밝아지고 있습니다 (대부분 솔루션이 있습니다).

병렬 프로그래밍에 대한 친근한 소개를 찾고 있다면 대신 고려하십시오. 열린 MPI 또는 CPU 클러스터의 posix 스레딩. 이것에 대해 시작하기 만하면 단일 멀티 코어 프로세서 만 있습니다.

일반적인 합의는 이러한 새로운 아키텍처 (GPU, 셀 등)에 대한 다중 프로그램이 프로그래밍 모델의 성숙도와 API의 측면에서 갈 수있는 방법이 있다는 것입니다. 반대로, Open MPI와 PTHREADS는 꽤 오랫동안 주변에 있었고 학습을위한 많은 자원이 있습니다. 이것에 익숙해지면 최신 기술을 시험해보십시오.

다른 많은 언어에 대한 프로그래밍 인터페이스가 있지만 C는 아마도 고성능 컴퓨팅에 사용되는 가장 일반적인 현대 언어 (Fortran과 Pascal이 여전히이 분야에서 시작되고 있음) 일 것입니다. C ++는 또한 상당히 인기가 있지만 여러 생물 정보학 패키지가이를 사용합니다. 어쨌든 C는 확실히 좋은 출발점이며, 더 많은 언어 기능이나 라이브러리를 원한다면 C ++까지 올라갈 수 있습니다 (아마도 성능 비용에 달할 것입니다).

데이터 마이닝에 관심이 있으시면 Orange라는 오픈 소스 시스템을보고 싶을 수도 있습니다. C ++로 구현되지만 Python 또는 시각적 링크 및 노드 언어로 최종 사용자 프로그래밍을 지원합니다.

그것이 그것이 NNS를 지원하는지는 모르겠지만 사람들이 Datamining 기술을 학습하는 데 그것을 사용한다는 것을 알고 있습니다. 클러스터링 및 협회 규칙과 같은 것들을 지원합니다.

(또한 당신이 그것에 대해 알지 못한다면, 당신은 B-School에서 운영 관리를하는 누군가를 추적하고 싶을 것입니다. CS와 Datamining에 관심이 있다면, 당신은 그곳에서 비슷한 사람들을 찾을 수 있습니다.)

링크: gpgpu.org 흥미로운 토론이 있습니다

최신 CUDA 릴리스 (3.1, 3.2)에는 단일 카드 설정에서 멀티 코어 매트릭스 작업을 처리 할 Cublas라는 전체 기능 세트가 있습니다. 역 프로이트 화를 평행하게하는 것은 조금 더 어려울 것이지만, 나는 그것에 대해 노력하고 있습니다.

나는 iTunesu에서 Stanford에서 무료로 멋진 비디오 코스를 찾을 수있었습니다.

프로그래밍 방법론 (CS106A) 프로그래밍 추상화 (CS106B) 프로그래밍 패러다임 (CS107) 기계 학습 (CS229) CUDA를 사용하여 대규모 병렬 프로세서 프로그래밍

이 과정 각각에는 약 20 개 정도의 강의가 있으므로 모든 것을 보는 것이 투자이지만 그만한 가치가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top