When I took the Andrew Ng's Machine Learning course at Stanford (Coursera),
all the homework was in Octave (Open-Source Matlab). I actually did some of
my ML homework in J, but most of the homework problems required submitting
the answers in Octave code. Octave is a nice matrix-handling language, but
it lacks many of the useful primitives of J. We only touched on the
then-brand-new Deep Learning algorithms in that class.

The Deep Learning library Theano <http://deeplearning.net/tutorial/> is
written in Python which has a library to run computations on the Nvidia
CPU/GPU <http://bit.ly/1JbQ1eA>. Most of the serious deep learning research
runs on GPUs using large arrays of homogenous parallel graphic processors.
The huge number-crunching task that is needed to train a multi-layered
neural network was nearly impossible until the advent of these large GPU
clusters.

It is becoming clear that advances in CPU power in the near future will not
come from faster clock speeds, because of power and other limitations. The
major advances in processing power will come from adding more parallel
processors on a chip. The need for ultra-high resolution (4K) video
processing is driving chip vendors to put massive parallel processing power
in all their mid and higher-end chips.

Dual and quad CPUs  are becoming commonplace in desktops, laptops, and even
smart phones. Even more importantly, massive multi.processing GPUs are
getting integrated right along with these multiple CPUs on a single
System-on-Chip (SOC). The NVidia Tegra X1 chip
<http://www.nvidia.com/object/tegra-x1-processor.html> has eight 64bit ARM
cores and 256 GPU cores on *a single chip intended for mobile devices*.
Truly a supercomputer on a chip. And it is likely to be coming to you in a
tablet priced under $500 in the near future.

So it is clear that your everyday processor will soon have multiple
parallel CPUs and hundreds of parallel GPUs (if yours doesn't have
already). What is needed now is a programing language to deal with all this
parallelism.

I have always felt that APL and J are perfect languages to express parallel
operations. APL and subsequently J have evolved over 50 years to develop
and polish the set of primitives that now cover arguably the most
commonly-used and useful set of array operations of any language. I believe
that if J's primitives could run on a modern multi-CPU and GPU architecture
and take advantage of all that parallelism, this would give J a unique
position in programming languages as being a true "native" parallel
language. This could significantly raise the visibility of J in the
programming world.

However, we must keep in mind the fate of Analogic's APL Machine
<http://bit.ly/157Lhtd>, one of the first computers to implement APL using
a vector processor architecture. I believe that the APL Machine story
points out the risk of tying a language to what was then, rather exotic
hardware.   I believe that you need to make J language run on commodity
hardware, taking advantage of the parallel processing that is now showing
up in most common stationary and mobile devices.

For a test case, I would recommend porting the J kernel to the NVidia K1
processor, which is in the NVidia Shield tablet, or also in the Lenovo
IdeaPad K1. The K1 has the same basic CPU and GPU architecture as the X!,
but not quite so many cores. When the X1 hits volume production later this
year, moving to it should be fairly straightforward. Unfortunately, my
coding skills fall way short of those required to perform this task, so I
can only point out the opportunity.

I realize that some of J's primitives do not fit well with massively
parallel processors. However that is the whole idea behind a high-level
language - the language takes advantage of the underlying parallel hardware
when it can, and falls back to traditional scalar processing when it can't.

Skip














Skip Cave
Cave Consulting LLC

On Tue, Jan 20, 2015 at 12:31 PM, greg heil <[email protected]> wrote:

> Indeed, i was sort of wondering what the best way to make the tool
> that Facebook is donating be more immediately available to J users.
> Natural ports for Java and Lua users.
>
> ---~
>
> http://gigaom.com/2015/01/16/facebook-open-sources-tools-for-bigger-faster-deep-learning-models
>
> greg
> ~krsnadas.org
>
> --
>
> from: Jon Hough <[email protected]>
> to: "[email protected]" <[email protected]>
> date: 20 January 2015 at 05:59
> subject: [Jchat] Deep Learning With Google
>
> >I found this article about Google's deep learning very interesting.
>
> https://medium.com/backchannel/google-search-will-be-your-next-brain-5207c26e4523
>
> >Just thought I'd throw it out there, to anyone who might be interested. I
> know there are J'ers who do data analysis and possibly machine learning
> stuff. This could be interesting for them.
>
> >As a machine learning layman, the above article was pretty useful to help
> understand how companies like Google leverage all the data they have.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to