Duncan, On Mon, Aug 3, 2015 at 2:37 AM, Duncan Murray <[email protected] > wrote:
> Hi Steve, > when I first saw the heading I was interested, but seeing the words > BASIC, COBOL and Fortran made me a little uneasy. I honestly don't think > you'd get much traction or interest in a language syntactically similar to > those - it should use modern techniques where valid, for example even Json > would be easily / more accessible than the COBOL PICTURE clause. > I don't see how Json could specify the minimal word sizes and modes needed to conserve gates in an FPGA. Perhaps you see something I missed? Explain? There is an old adage "There is nothing new in computing" because just about everything has been done before, somewhere. Here, I was just showing that these things are NOT new - in the present situation where "modern" is unusable. Also, why invent something when there is a perfectly usable way already in existence? > > I love the idea of having SQL commands built into the language. > Yea, SQL is my favorite AI language - but not suitable as an implementation language, or inside of FPGAs, though an FPGA might be programmed in this language to become an SQL engine. > > I can't wrap my head around the WHEN command - may need some more > information on this, but it appears as though it could have concurrency > issues and odd side effects (due to programmers not using it correctly / > understanding it). > For sure. It is the nature of FPGAs to want to do EVERYTHING at the same time - or add gates to keep this from happening. A big plus for any language is having less efficient things take more code. Perhaps I should pay more attention to scope - to better control side effects? I suspect there may be good ways to keep order with such things, only no one has yet worked this problem because no previous high-level language ran in this environment. > > The speed increase using the FPGA is the biggest selling point in my mind, > YES. > and for AI work there are large repeatable batches of maths crunching so > there should be an increase. I dont know how long it would take you to > prototype something specific for a single calculation (prime number > generation for example?), but nothing gets interest like a real test. > FPGAs are already used in large numbers, with pipelined data chaining as would also be the result of this language. Presently, "compiling" is a months-long grueling effort hand-writing low-level code, that the right language translator/compiler could do easily. > > On the same hardware, using the same algorithm if you can increase the > speed of this compared to other languages on that box, then you will get a > lot of interest. > That has already been done in several places. Often they get astronomical boosts from crazy methods that aren't programmable on PCs, like switching around the addressing lines to a block of memory to change its organization, soft-wiring complex functions, etc. > > Another thought could be to implement this as a library that existing > languages can access. > I had no intention of accelerating PCs with this, as this is a bit of a misfit for them. However, this might be better for implementing some highly parallel things, like robots, where functionality outweighs speed. Thanks for your comments. Steve ================= > > Cheers, > Duncan > [email protected] > > > On Mon, Aug 3, 2015 at 6:12 PM, Steve Richfield <[email protected] > > wrote: > >> PM, >> >> It sounds like you may be too far removed from FPGAs to help here. >> >> FPGAs seem to be positioned to replace CPUs as they now exist. FPGAs are >> able to execute page-long loops completely in parallel, producing >> results-per-clock-cycle, whereas the best conventional CPUs can do is to >> produce operations-per-clock-cycle. >> >> However, no good programming language for them has been forthcoming. What >> they have is even lower than assembly language - closer to horizontal >> microcoding. >> >> Conventional procedural languages are unsuitable for FPGAs, because the >> first step, massive parallelism, must be discarded in order to even use >> languages that presume that only one (or just a few) things can be done at >> once. >> >> Not only are there no suitable languages for FPGAs, there aren't even any >> active discussions about the subject. NO ONE has yet made any proposals, >> despite decades of need. My goal was to ignite such discussions by >> exhibiting a plausible high-level language for FPGAs. >> >> It you are interested in doing things like AGI at practical speeds, you >> REALLY need to come up to speed on FPGAs. There are several proposals >> floating around for attaching FPGAs as co-processors, and there have >> already been such products, though it is my own opinion that there really >> is no need for a CPU once the implementation language problem is solved. >> >> Steve >> ============= >> >> On Mon, Aug 3, 2015 at 12:22 AM, Piaget Modeler < >> [email protected]> wrote: >> >>> If the purpose of this languge is to crunch numbers, then you should >>> look at R as well. >>> If the purpose of this language is to move data then you should look at >>> SQL as well. >>> If the purpose of this language is to do pattern matching over data >>> records then you should look at OPS as well. >>> If the purpose of this language is to do literal programming then you >>> should look at Premise as well. >>> If the purpose of this language is to do symbolic manipulation then you >>> should look at Lisp as well. >>> If the purpose of this language is to do object oriented programming >>> then you should look at Java as well. >>> >>> Parallel operations for what purpose? Are these low level parallel >>> operations or high level parallel operations? >>> >>> What is really new here? Same old procedural programming or something >>> special? >>> >>> Your thoughts? >>> >>> ~PM >>> >>> ------------------------------ >>> Date: Sun, 2 Aug 2015 23:48:54 -0700 >>> Subject: [agi] Design notes for a new parallel computing language >>> From: [email protected] >>> To: [email protected] >>> >>> >>> Hi all, >>> >>> I am working on a high-level FPGA programming language, that should also >>> serve better than existing languages as an AGI implementation language and >>> a robotics programming language. This is designed to be executed on FPGAs >>> rather than CPUs, though a PC version is contemplated. >>> >>> Here are my early thoughts. All comments are welcome. >>> >>> Parallel Computing Language >>> *Design Notes by Steve Richfield *as of Aug 2, 2015 >>> >>> The goal of PCL is to provide a language to express algorithms in >>> parallel form for easy compilation to either parallel or sequential >>> platforms, rather than forcing programmers to express their algorithms in a >>> probably inefficient sequential form, for a (nonexistent) compiler to >>> translate to a parallel form. >>> >>> >>> The special need is to be able to translate to FPGA implementations, >>> which presently require efficient translation to be able to fit into >>> existing hardware. >>> >>> >>> *Existing Technology from which to Borrow* >>> >>> *APL structure:* In APL, everything is a matrix of varying >>> dimensionality, including zero dimensions (a simple variable). It includes >>> numerous array operations as operators in the language. Unfortunately, its >>> promoters have adopted syntax reminiscent to Sanskrit, which is enough to >>> chase away anyone not well versed in matrix inversions, etc. Some of the >>> IBM-360 architecture was first worked out in APL. >>> >>> >>> *Dartmouth BASIC MAT statements: *The original Dartmouth BASIC >>> recognized MAT at the beginning of statements to indicate that the >>> statements specified matrix operations, rather than operations on >>> variables. Hence, *MAT C=A*B* multiplied matrix *A* by matrix *B*, and >>> stored the result in matrix *C*. APL-like procedure is MUCH less opaque >>> in this syntax. >>> >>> >>> *COBOL PICTURE clauses:* COBOL provided an easy (though now arcane) way >>> of easily describing variable structure, which could be easily extended to >>> meet present needs. Specifying *PICTURE 9999*, which could be >>> abbreviated *PIC 9(4)*, a programmer could easily state that a variable >>> had to hold 4 decimal digit values. In our implementation, *PICTURE >>> 111111111111* or *PIC 1(12)* could specify a 12-bit field, as could *PICTURE >>> 7777* or *PICTURE FFF*. COBOL also allowed for fixed-point notation, >>> which is also important in FPGA context, e.g. with *PICTURE 999V99* to >>> represent 3 digits to the left and two digits to the right of the implied >>> decimal point. Provision would have to also be made for logarithmic >>> notation. Note that in addition to precisely specifying “variables”, this >>> also guides debuggers on how to display what they find. This approach would >>> allow for specifying pipeline widths to be as narrow as possible for each >>> operation. >>> >>> >>> *FORTRAN Arithmetic Statement Functions:* FORTRAN provides a one-line >>> way of specifying simple function subroutines, e.g. >>> *RMS(A,B)=SQRT((A**2)+(B**2))* that are usually implemented by simple >>> string substitution into their references, so they are executed as an >>> in-line subroutine in C, but without the need to specify they are in-line. >>> Data chaining in complex operations would be easy to specify with such >>> syntax. >>> >>> >>> *Eliminating **GOTO** statements: *Parallel processing aside, there are >>> plenty of good reasons to eliminate *GOTO* statements. In the process, >>> we should probably eliminate everything else that specifies anything >>> conditional beyond conditional storage of computed results. The presence of >>> a particular condition that necessitates particular processing should be >>> handled as an event, though it would be possible to fake it by translating >>> conditional logic into an event handler. >>> >>> >>> *All “procedure” will be event-driven:* Where sequence is needed, it >>> will be triggered step-by-step, e.g. by *WHEN* statements. Where a long >>> sequence is needed, each step must be triggered by completing the previous >>> step. To avoid programming flags and *WHEN* clauses for each step, a >>> *PROCEDURE* will be declared, that necessarily starts with a *WHEN* >>> clause, after which the compiler will assume that each step starts when the >>> previous step has completed. There may be any number of procedures >>> simultaneously active at any one time, but only one instance of any >>> particular procedure, unless it is declared as being *RECURSIVE* and/or >>> *REENTRANT*. Where a procedure requires conditional operation within >>> it, the conditional operation will be triggered and entered via a *WHEN* >>> statement. Note that complex *WHEN* statements, when implemented in >>> hardware, only cost gates and NOT any time. >>> >>> >>> *Familiar Operations: *Familiar operations like SELECT ... CASE >>> statements will be provided, though they will “execute” in unfamiliar ways. >>> For example, a SELECT statement will simultaneously “execute” all CASEs for >>> which the stated conditions are satisfied. >>> >>> >>> *Syntax:* Three different syntaxes will be supported, which can be >>> intermixed on input. They are mathematical, familiar (similar to C), and >>> verbose (similar to COBOL). For example, familiar *MAT C=A*B *in the >>> example above would be simply *C=A*B* in mathematical form, and *Multiply >>> matrix A by matrix B giving matrix C* in verbose form. Error messages >>> from the compiler would show both the input and the equivalent verbose >>> forms, to show how the compiler interpreted the statements. >>> >>> >>> *Early implementations:* Initially this PCL will be a publication >>> language to specify the construction of complex programmable logic. Then, a >>> translator will be written in a portable language like C to translate >>> programs from PCL to C so that programs can be tested on personal >>> computers, etc. Then, translators will be written to translate to FPGAs >>> programming languages *Verilog* and *VHDL*, and finally, FPGAs will be >>> adapted to become better targets for code produced by this process, much as >>> IBM 360/370 mainframes were designed as prime targets for COBOL programs. >>> >>> >>> *Other Applications:* This language comes VERY close to also meeting >>> the needs for robotics applications, with many simultaneous tasks and close >>> coupling to I/O, so it should be expanded to include anything that might be >>> missing to also serve robotics. >>> >>> >>> *Comments:* PLEASE comment on this at any level, most especially what >>> other languages might serve this need, what features of other languages >>> should be incorporated, what it might be missing, what might be wrong, etc. >>> >>> >>> Steve >>> >>> >>> >>> >>> *AGI* | Archives <https://www.listbox.com/member/archive/303/=now> >>> <https://www.listbox.com/member/archive/rss/303/19999924-4a978ccc> | >>> Modify <https://www.listbox.com/member/?&> Your Subscription >>> <http://www.listbox.com> >>> *AGI* | Archives <https://www.listbox.com/member/archive/303/=now> >>> <https://www.listbox.com/member/archive/rss/303/10443978-6f4c28ac> | >>> Modify <https://www.listbox.com/member/?&> Your Subscription >>> <http://www.listbox.com> >>> >> >> >> >> -- >> Full employment can be had with the stoke of a pen. Simply institute a >> six hour workday. That will easily create enough new jobs to bring back >> full employment. >> >> *AGI* | Archives <https://www.listbox.com/member/archive/303/=now> >> <https://www.listbox.com/member/archive/rss/303/25449614-a78bbfa7> | >> Modify <https://www.listbox.com/member/?&> Your Subscription >> <http://www.listbox.com> >> > > *AGI* | Archives <https://www.listbox.com/member/archive/303/=now> > <https://www.listbox.com/member/archive/rss/303/10443978-6f4c28ac> | > Modify > <https://www.listbox.com/member/?&> > Your Subscription <http://www.listbox.com> > -- Full employment can be had with the stoke of a pen. Simply institute a six hour workday. That will easily create enough new jobs to bring back full employment. ------------------------------------------- AGI Archives: https://www.listbox.com/member/archive/303/=now RSS Feed: https://www.listbox.com/member/archive/rss/303/21088071-f452e424 Modify Your Subscription: https://www.listbox.com/member/?member_id=21088071&id_secret=21088071-58d57657 Powered by Listbox: http://www.listbox.com
