Path: utzoo!utgpu!attcan!uunet!seismo!sundc!pitstop!sun!hanami!landman From: landman%hanami@Sun.COM (Howard A. Landman) Newsgroups: comp.arch Subject: Re: Content Addressible Memories Keywords: content addressible memory, connection machine, C Message-ID: <81858@sun.uucp> Date: 15 Dec 88 21:14:55 GMT References: <12371@srcsip.UUCP> <367@enint.Wichita.NCR.COM> Sender: news@sun.uucp Reply-To: landman@sun.UUCP (Howard A. Landman) Organization: Sun Microsystems, Mountain View Lines: 58 >In article <12371@srcsip.UUCP>, shankar@src.honeywell.COM (Son of Knuth) writes: >> It seems that content addressible memories, although present an >> awful lot in the literature over the years, have never really taken off. >> Any comments on why? In article <367@enint.Wichita.NCR.COM> lpelleti@enint.Wichita.NCR.COM (Larry Pelletier) writes: >There was never a "popular" programming paradigm that could really take >advantage of content addressible memories. Although some things could be >done, it really didn't help the concepts of data and code in languages such >as Fortran, Cobol, Pascal, or C. The Connection Machine can quite easily perform as a CAM, and this ability is embedded in the CM versions of Lisp and C. For example, in C*, if m is a "mono" (scalar) variable and p is a "poly" (xector) variable, you can do things like: /* Set m to the maximum odd value in p. */ if (p & 1) m = (>?= p); or: /* Loop through all processors that have 61 in p. */ active = (p == 61); /* active is a poly var */ while (active) /* i.e., while *any* value of active is TRUE */ { /* Get address of first remaining one. */ m = (active = FALSE; /*** OTHER OPERATIONS (using m) HERE ***/ } Of course most times you would try to do the OTHER OPERATIONS above in parallel. You can't if they talk to the outside world serially (e.g. printf()), but if you can it becomes simply: if (p == 61) { /*** OTHER OPERATIONS HERE ***/ } I find it pretty natural to express things this way; often it takes less code than straight C, because many loops become unnecessary. From the viewpoint of a CM, a CAM is just not very powerful, because it only implements a very small set of operations. >Now that we are seeing the emergence of >object-oriented programming (it's no longer just a toy :-)), we will begin >to see a growing popularity in content adressible memories. I've worked in Smalltalk, but I don't understand this comment at all. How are CAMs supposed to help OOP? Howard A. Landman landman@hanami.sun.com "It's a lesson to me."