{{위키데이터 속성 추적}}
'''병렬 랜덤 접근 기계'''(parallel random-access machine) 또는 '''병렬 램'''(parallel RAM, PRAM)은 [[컴퓨터 과학]]에서 [[공유 메모리]] [[추상 기계]]이다. 이름에서 알 수 있듯이 PRAM은 RAM([[랜덤 접근 기계]])에 대한 병렬 컴퓨팅 비유로 사용된다([[랜덤 액세스 메모리]]와 구별됨).<ref>{{서적 인용|last1=Fortune |first1=Steven |last2=Wyllie |first2=James |chapter=Parallelism in random access machines |date=1978-05-01 |title=Proceedings of the tenth annual ACM symposium on Theory of computing - STOC '78 |chapter-url=https://dl.acm.org/doi/10.1145/800133.804339 |location=New York, NY, USA |publisher=Association for Computing Machinery |pages=114–118 |doi=10.1145/800133.804339 |isbn=978-1-4503-7437-8|hdl=1813/7454 |hdl-access=free }}</ref> 순차 알고리즘 설계자가 알고리즘 성능(예: 시간 복잡도)을 모델링하기 위해 RAM을 사용하는 것과 마찬가지로 PRAM은 병렬 알고리즘 설계자가 병렬 알고리즘 성능(예: 프로세서 수에 따른 시간 복잡도)을 모델링하는 데 사용된다. 일반적으로 가정된 내용도 명시되어 있다). RAM 모델이 주 메모리 대비 캐시 메모리에 대한 액세스 시간과 같은 실질적인 문제를 무시하는 방식과 유사하게 PRAM 모델은 [[동기화 (컴퓨터 과학)|동기화]] 및 [[커뮤니케이션|통신]]과 같은 문제를 무시하지만 문제 크기에 따라 원하는 수의 프로세서를 제공한다. 예를 들어 알고리즘 비용은 두 개의 매개변수 O(시간)과 O(시간 × 프로세서_번호)를 사용하여 추정된다.

== 예시 코드 ==
<syntaxhighlight lang="SystemVerilog">
module FindMax #(parameter int len = 8)
                (input bit clock, resetN, input bit[7:0] data[len], output bit[7:0] maxNo);
    typedef enum bit[1:0] {COMPARE, MERGE, DONE} State;

    State state;
    bit m[len];
    int i, j;

    always_ff @(posedge clock, negedge resetN) begin
        if (!resetN) begin
            for (i = 0; i < len; i++) m[i] <= 0;
            state <= COMPARE;
        end else begin
            case (state)
                COMPARE: begin
                    for (i = 0; i < len; i++) begin
                        for (j = 0; j < len; j++) begin
                            if (data[i] < data[j]) m[i] <= 1;
                        end
                    end
                    state <= MERGE;
                end

                MERGE: begin
                    for (i = 0; i < len; i++) begin
                        if (m[i] == 0) maxNo <= data[i];
                    end
                    state <= DONE;
                end
            endcase
        end
    end
endmodule
</syntaxhighlight>

== 같이 보기 ==
* [[플린 분류]]
* [[랜덤 접근 기계]]
* [[병렬 프로그래밍 모델]]

== 각주 ==
<references />

* {{인용
 | last1=Eppstein | first1=David
 | last2=Galil | first2=Zvi
 | title=Parallel algorithmic techniques for combinatorial computation
 | journal=Annu. Rev. Comput. Sci.
 | year=1988
 | volume=3
 | pages=233–283
 | doi=10.1146/annurev.cs.03.060188.001313
}}
* {{인용
 | first = Joseph
 | last = JaJa
 | title = An Introduction to Parallel Algorithms
 | edition =
 | publisher = Addison-Wesley
 | date = 1992
 | isbn = 0-201-54856-9
 }}
* {{인용
 | last1=Karp | first1=Richard M.
 | last2=Ramachandran | first2=Vijaya
 | title=A Survey of Parallel Algorithms for Shared-Memory Machines
 | publisher=University of California, Berkeley, Department of EECS
 | id=Tech. Rep. UCB/CSD-88-408
 | year=1988
 | url = https://dl.acm.org/citation.cfm?id=894803
}}
* {{서적 인용
| first=Jörg
| last=Keller
|author2=Christoph Keßler
|author3=Jesper Träff
| title=Practical PRAM Programming
| publisher=John Wiley and Sons
| year=2001
| isbn=0-471-35351-5
}}
* {{인용
 | first = Uzi
 | last = Vishkin
 | title = Thinking in Parallel: Some Basic Data-Parallel Algorithms and Techniques, 104 pages
 | publisher = Class notes of courses on parallel algorithms taught since 1992 at the University of Maryland, College Park, Tel Aviv University and the Technion
 | date = 2009
 | url=http://www.umiacs.umd.edu/users/vishkin/PUBLICATIONS/classnotes.pdf
 }}
* {{인용
| first = Uzi
| last = Vishkin
| title=Using simple abstraction to reinvent computing for parallelism
| pages=75–85
| year=2011
| doi=10.1145/1866739.1866757
| journal=Communications of the ACM
| volume=54
| doi-access=free
}}
* {{인용
 | last1=Caragea | first1=George Constantin
 | last2=Vishkin | first2=Uzi
 | chapter=Brief announcement: Better speedups for parallel max-flow
 | title=Proceedings of the 23rd ACM symposium on Parallelism in algorithms and architectures - SPAA '11
 | pages=131
 | year=2011
 | doi=10.1145/1989493.1989511
 | isbn=9781450307437

 | s2cid=5511743
 }}
* {{인용
 | last1=Ghanim | first1=Fady
 | last2=Vishkin | first2=Uzi
 | last3=Barua   | first3=Rajeev
 | title=Easy PRAM-based High-performance Parallel Programming with ICE
 | journal=IEEE Transactions on Parallel and Distributed Systems
 | volume=29
 | issue=2
 | pages=377–390
 | year=2018
 | doi=10.1109/TPDS.2017.2754376
 | hdl=1903/18521
 | doi-access=free
 | hdl-access=free
 }}

== 외부 링크 ==
* [http://www-wjp.cs.uni-sb.de/forschung/projekte/SB-PRAM/index.php Saarland University's prototype PRAM] {{웨이백|url=http://www-wjp.cs.uni-sb.de/forschung/projekte/SB-PRAM/index.php |date=20160303202357 }}
* [http://www.umiacs.umd.edu/users/vishkin/XMT/spaa07paper.pdf University Of Maryland's PRAM-On-Chip prototype]. This prototype seeks to put many parallel processors and the fabric for inter-connecting them on a single chip
* [http://sourceforge.net/projects/xmtc/ XMTC: PRAM-like Programming - Software release]
{{병렬 컴퓨팅}}
{{전거 통제}}

[[분류:계산 모형]]
[[분류:병렬 알고리즘 분석]]