Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8229675
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 7, 20262026-06-07T16:52:38+00:00 2026-06-07T16:52:38+00:00

PRAM models for parallel computing come in the three main flavours: EREW , CREW,

  • 0

PRAM models for parallel computing come in the three main flavours: EREW , CREW, CRCW.

I can understand how EREW, CREW can be implemented on a multicore machine. But how
would one go about implementing the CRCW model on a multicore CPU ? Is it even a practical model, since concurrent writes are not possible and every basic parallel programming course
goes into great details into race conditions.

Essentially this means that trying to avoid race conditions and trying to implement concurrent
writes are two opposing goals.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-07T16:52:40+00:00Added an answer on June 7, 2026 at 4:52 pm

    First up: We know that the PRAM is a theoretical, or abstract machine. There are several simplifications made so that it may be used for analyzing/designing parallel algorithms.

    Next, let’s talk about the ways in which one may do ‘concurrent writes’ meaningfully.

    Concurrent write memories are usually divided into subclasses, based on how they behave:

    1. Priority based CW – Processors have a priority, and if multiple concurrent writes to the same location arrive, the write from the processor of highest priority gets committed to memory.

    2. Arbitary CW – One processor’s write is arbitrarily chosen for commit.

    3. Common CW – Multiple concurrent writes to the same location are committed only if the values being written are the same. i.e. all writing processors must agree on the value being written.

    4. Reduction CW – A reduction operator is applied on the multiple values being written. e.g. a summation, where multiple concurrent writes to the same location lead to the sum of the values being written to be committed to memory.

    These subclasses lead to some interesting algorithms. Some of the examples I remember from class are:

    1. A CRCW-PRAM where the concurrent write is achieved as a summation can sum an arbitrarily large number of integers in a single timestep. There is a processor for each integer in the input array. All processors write their value to the same location. Done.

    2. Imagine a CRCW-PRAM where the memory commits concurrent writes only if the value written by all processors is the same. Now imagine N numbers A[1] ... A[N], whose maximum you need to find. Here’s how you’d do it:

    Step 1.

    N2 processors will compare each value to each other value, and write the result to a 2D array:

    parallel_for i in [1,N]
      parallel_for j in [1,N]
        if (A[i] >= A[j])
          B[i,j] = 1
        else
          B[i,j] = 0
    

    So in this 2D array, the column corresponding to the biggest number will be all 1’s.

    Step 2:

    Find the column which has only 1’s. And store the corresponding value as the max.

    parallel_for i in [1,N]
      M[i] = 1
      parallel_for j in [1,N]
        if (B[i,j] = 0)
          M[i] = 0              // multiple concurrent writes of *same* value
      if M[i]
        max = A[i]
    

    Finally, is it possible to implement for real?

    Yes, it is possible. Designing, say, a register file, or a memory and associated logic, which has multiple write ports, and which arbitrates concurrent writes to the same address in a meaningful way (like the ways I described above) is possible. You can probably already see that based on the subclasses I mentioned. Whether or not it is practical, I cannot say. I can say that in my limited experience with computers (which involves mostly using general purpose hardware, like the Core Duo machine I’m currently sitting before), I haven’t seen one in practice.

    EDIT: I did find a CRCW implementation. The wikipedia article on PRAM describes a CRCW machine which can find the max of an array in 2 clock cycles (using the same algorithm as the one above). The description is in SystemVerilog and can be implemented in an FPGA.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

The issue I am having is that when I am in my main storyboard
Just as a little heads up, I'm completely new to this whole coding thing
Usually i am pretty good at working my way round as3 but this one
I have this script here: function MainAssistant(argFromPusher) { } MainAssistant.prototype = { setup: function()
I have a MYSQL table called 'categories' from a project I inherited from someone
I was trying to make a custom application form. I've added some control like
Example #1 bschaeffer's answer to this question - in his last example: $this->load->model('table'); $data
I am trying to show and hide rows dynamically on my page.firstly I tryed
Hi Stackoverflow friends, I need an appliaction that ,capture an image using camera and
I use the C++ programming language with GCC on a GNU/Linux desktop. I am

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.