문제

당신에게 다른 사고 방식을 주거나 멀티 스레드 응용 프로그램을 작성하는 데 다른 테이크를하는 패러다임이 있습니까? 아마도 기능 프로그래밍을위한 절차 적 프로그래밍과 같이 크게 다른 느낌이 드는 것일 것입니다.

도움이 되었습니까?

해결책

동시성에는 다른 문제에 대한 다양한 모델이 있습니다. Wikipedia 페이지 동시성 몇 가지 모델을 나열하고 페이지도 있습니다. 동시성 패턴 동시성에 접근하는 다양한 방법에 대한 좋은 출발점이 있습니다.

당신이 취하는 접근법은 당면한 문제에 매우 의존합니다. 다른 모델은 동시 응용 프로그램에서 발생할 수있는 다양한 다른 문제를 해결하고 일부는 다른 문제를 해결합니다.

수업에서 나는 동시성 사용을 배웠다 상호 배제 그리고 동기화 동시성 문제를 해결하기 위해 함께. 일부 솔루션에는 하나만 필요하지만 동시 문제를 해결할 수 있어야합니다.

크게 다른 개념의 경우 불변성과 동시성을 볼 수 있습니다. 모든 데이터가 불변이라면 동시성에 대한 기존의 접근법은 필요하지 않습니다. 이 기사 그 주제를 탐구합니다.

다른 팁

나는 정말로 질문을 이해하지 못하지만 사용을 사용하기 시작하면 쿠다 멀티 스레딩 응용 프로그램에 대한 다른 생각을 제공하십시오.

수천 개의 스레드가 동시에 수있는 수천 개의 스레드가 있기 때문에 세마포어, 모니터 등과 같은 일반적인 멀티 스레딩 기술과 다릅니다. 따라서 Cuda의 병렬 처리 문제는 데이터를 분할하고 나중에 데이터 덩어리를 혼합하는 데 더 많은 것을 상상합니다.

일반적인 일련의 문제를 완전히 재고하는 작은 예는 다음과 같습니다. 주사 연산. 간단합니다.

  • 주어진 세트 {a, b, c, d, e}

다음 세트를 원합니다.

{a, a+b, a+b+c, a+b+c+d, a+b+c+d+e}

이 경우 '+'기호는 모든 통근 연산자입니다 (플러스뿐만 아니라 곱셈을 할 수도 있습니다).

병렬로하는 방법은 무엇입니까? 문제에 대한 완전한 재고입니다. 이것에 설명되어 있습니다. 종이.

Cuda에서 다양한 알고리즘의 더 많은 구현이 Nvidia에서 찾을 수 있습니다. 웹 사이트

글쎄, 매우 보수적 인 패러다임 전환은 스레드 중심 동시성 (모든 것을 공유)에서 프로세스 중심 동시성 (주소 공간 분리)에 이르기까지입니다. 이러한 방식으로 의도하지 않은 데이터 공유를 피할 수 있으며 다른 하위 시스템 간의 커뮤니케이션 정책을 시행하는 것이 더 쉽습니다.

이 아이디어는 오래되었으며 마이크로 커널 OS 커뮤니티에 의해보다 안정적인 운영 체제를 구축하기 위해 전파되었습니다. 흥미롭게도 특이 Microsoft Research의 OS 프로토 타입에 따르면이 모델로 작업 할 때 기존 주소 공간이 필요하지 않습니다.

내가 가장 좋아하는 비교적 새로운 아이디어는입니다 거래 메모리: 업데이트가 항상 원자인지 확인하여 동시성 문제를 피하십시오.

살펴보세요 OpenMP 흥미로운 변형을 위해.

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