APL hardware: Difference between revisions

Jump to navigation Jump to search
432 bytes added ,  22:13, 10 September 2022
m
Text replacement - "<source" to "<syntaxhighlight"
mNo edit summary
m (Text replacement - "<source" to "<syntaxhighlight")
Tags: Mobile edit Mobile web edit
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
APL hardware is hardware that has been designed to natively support APL [[array]] operations. This breaks the popular understanding of APL as an interpreted language. Unlike [[wikipedia:x86|x86]], which is targeted to operate on individual [[scalar]]s one at a time, native APL architectures would be targeted to operate on entire arrays at a time, thereby increasing the speed of APL processing.
APL hardware is hardware that has been designed to natively support APL [[array]] operations. This breaks the popular understanding of APL as an interpreted language. Unlike [[wikipedia:x86|x86]], which is targeted to operate on individual [[scalar]]s one at a time, native APL architectures would be targeted to operate on entire arrays at a time, thereby increasing the speed of APL processing.
== The APL Machine ==
{{Main|APL Machine}}
The APL Machine was an actual (as opposed to theoretical) hardware implementation, created with the explicit purpose of facilitating programming an analog array processor.


== Cellular APL Computer ==
== Cellular APL Computer ==
Line 28: Line 32:


=== Supported Operations ===
=== Supported Operations ===
Values can be transferred using the <source lang=apl inline>←</source> operator.
Values can be transferred using the <syntaxhighlight lang=apl inline>←</syntaxhighlight> operator.
The MLIM natively supports the monadic operations:
The MLIM natively supports the monadic operations:
<source lang=apl inline>(A,B,C,T)←~(A,B,C,T)</source>
<syntaxhighlight lang=apl inline>(A,B,C,T)←~(A,B,C,T)</syntaxhighlight>
and the dyadic operations:
and the dyadic operations:
<source lang=apl>
<syntaxhighlight lang=apl>
(C,A)←(A,C)+B
(C,A)←(A,C)+B
(C,A)←(A,C)-B
(C,A)←(A,C)-B
Line 42: Line 46:
(C,A)←(A,C)=B
(C,A)←(A,C)=B
(C,A)←(A,C)>B
(C,A)←(A,C)>B
</source>
</syntaxhighlight>
The operations can be combined to create the following operations:
The operations can be combined to create the following operations:
<source lang=apl>
<syntaxhighlight lang=apl>
+M
+M
×M
×M
Line 69: Line 73:
M⍱N
M⍱N
M⍲N
M⍲N
</source>
</syntaxhighlight>
The masking functionality of the RL combined with the native ability for [[Scan]] (reduce while reading the output in between each step) and [[Reduce]] (<source lang=apl inline>\</source> and <source lang=apl inline>/</source> respectively) allows for [[Index Generator]] (monadic <source lang=apl inline>⍳</source>) to be defined, while its generalized indexing functionality allows [[Reverse]] and [[Transpose]] (monadic <source lang=apl inline>⌽</source> and <source lang=apl inline>⍉</source>) to be defined. [[Shape]] and [[Ravel]] (monadic <source lang=apl inline>⍴</source> and <source lang=apl inline>,</source>) can also be defined by using the RL and PP in parallel. Thus, a list of complex operators can be defined:  
The masking functionality of the RL combined with the native ability for [[Scan]] (reduce while reading the output in between each step) and [[Reduce]] (<syntaxhighlight lang=apl inline>\</syntaxhighlight> and <syntaxhighlight lang=apl inline>/</syntaxhighlight> respectively) allows for [[Index Generator]] (monadic <syntaxhighlight lang=apl inline>⍳</syntaxhighlight>) to be defined, while its generalized indexing functionality allows [[Reverse]] and [[Transpose]] (monadic <syntaxhighlight lang=apl inline>⌽</syntaxhighlight> and <syntaxhighlight lang=apl inline>⍉</syntaxhighlight>) to be defined. [[Shape]] and [[Ravel]] (monadic <syntaxhighlight lang=apl inline>⍴</syntaxhighlight> and <syntaxhighlight lang=apl inline>,</syntaxhighlight>) can also be defined by using the RL and PP in parallel. Thus, a list of complex operators can be defined:  
<source lang=apl>
<syntaxhighlight lang=apl>
⍳N
⍳N
,N
,N
Line 90: Line 94:
M∘.b N
M∘.b N
M[N]
M[N]
</source>
</syntaxhighlight>
This paper does not outline floating point arithmetic. Many functions may be missing because floating point arithmetic has not been defined.
This paper does not outline floating point arithmetic. Many functions may be missing because floating point arithmetic has not been defined.


Navigation menu