{"id":2886,"date":"2024-11-18T11:05:27","date_gmt":"2024-11-18T16:05:27","guid":{"rendered":"https:\/\/blogs.mathworks.com\/matlab\/?p=2886"},"modified":"2025-09-23T05:28:21","modified_gmt":"2025-09-23T09:28:21","slug":"20-years-of-supercomputing-with-matlab","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/matlab\/2024\/11\/18\/20-years-of-supercomputing-with-matlab\/","title":{"rendered":"20 years of supercomputing with MATLAB"},"content":{"rendered":"<div class = rtcContent><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>While prepping for the <\/span><a href=\"https:\/\/sc24.supercomputing.org\/\" target=\"_blank\" rel=\"noopener\"><span>SC24 supercomputing conference<\/span><\/a><span> with the rest of the MathWorks crew I idly wondered when <\/span><a href = \"https:\/\/uk.mathworks.com\/products\/parallel-computing.html\"><span>Parallel Computing Toolbox <\/span><\/a><span>was first released. <\/span><a href=\"https:\/\/www.linkedin.com\/in\/josmartin\/?originalSubdomain=uk\" target=\"_blank\" rel=\"noopener\"><span>Jos Martin<\/span><\/a><span>, one of the original authors of the toolbox, glanced at his watch before saying \"oh wow! Actually 20 years yesterday! <\/span><span style=' font-weight: bold;'>The first version of Distributed Computing Toolbox, which later evolved into the products we now call Parallel Computing Toolbox and MATLAB Parallel Server, was released on November 7th 2004<\/span><span>\". <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>\"Someone should tell the story!\" I insisted and, as it turns out, volunteered. So, Jos sat down and started to tell me how things were back in the day. <\/span><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>1995: Cleve Moler writes \"Why there isn't a parallel MATLAB\"<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>All good stories of how a thing was done starts with the story of why the thing shouldn't be done and this one is no different. Back in 1995, a parallel version of MATLAB didn't make much sense and Cleve was moved to write about exactly why this was the case in an article he <\/span><a href = \"https:\/\/blogs.mathworks.com\/cleve\/2024\/03\/15\/twenty-years-of-parallel-matlab\/\"><span>tells us is the most widely cited piece<\/span><\/a><span> he's ever written: <\/span><a href=\"https:\/\/uk.mathworks.com\/content\/dam\/mathworks\/tag-team\/Objects\/w\/72903_92027v00Cleve_Why_No_Parallel_MATLAB_Spr_1995.pdf\" target=\"_blank\" rel=\"noopener\"><span>Why there isn't a parallel MATLAB<\/span><\/a><span>.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>That article considered what we now call <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/distributed-arrays.html\"><span>distributed arrays<\/span><\/a><span>: matrices\/arrays that are split across multiple independent computers. 1995 computer technology just wasn't good enough to make a performant parallel MATLAB that would work in any way that was recognizable as MATLAB. The results were simply too slow. In addition, barely anyone actually had a decent parallel computer. It didn't make good business sense to put too much effort into this.<\/span><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2004: Distributed Computing Toolbox debuts in SC04, Pitsburgh.<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Things were rather different in 2004. MathWorks had customers that were demanding a parallel MATLAB  and so a team formed to build one. This is where Jos' story began:<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Jos: We released it on November 7th 2004 and it was pretty basic!<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Me: I guess <\/span><span style=' font-family: monospace;'>parfor<\/span><span> and not much else right?<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Jos: <\/span><span style=' font-family: monospace;'>parfor<\/span><span>?! Oh you sweet summer child! <\/span><span style=' font-family: monospace;'>parfor<\/span><span> wouldn't be out until R2007b. Version 1.0 supported independent jobs using the <\/span><a href = \"https:\/\/uk.mathworks.com\/videos\/series\/getting-started-with-matlab-job-scheduler.html\"><span>MATLAB Job scheduler<\/span><\/a><span> and nothing else. We didn't have <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/spmd.html\"><span style=' font-family: monospace;'>spmd<\/span><\/a><span> and we didn't have communicating jobs or MPI. We didn't support other schedulers. We didn't have much but it did provide the first building blocks for the tools that allowed people to write parallel algorithms in MATLAB without MPI, and that was what was needed at the time.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Me: OK, so you had the <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/batch.html\"><span style=' font-family: monospace;'>batch<\/span><\/a><span> command?<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Jos: No, that came later. We had the precursor to <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/createjob.html\"><span style=' font-family: monospace;'>createJob<\/span><\/a><span> and <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/createtask.html\"><span style=' font-family: monospace;'>createTask<\/span><\/a><span>. What you could do was say \"Run this over there, and run that over at this other place\". You could do this with multiple clusters, like you can do with <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/parcluster.html\"><span style=' font-family: monospace;'>parcluster<\/span><\/a><span> today. So, a customer could have a local MATLAB program that would send tasks to other machines. Those machines could be running Windows or Linux and you could use all of them at the same time.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>It was basic but it worked and even then it was very useful to some of our users. This is what the demo looked like at the MathWorks Booth at SC04.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_1.png\" width = \"563\" height = \"422\" alt = \"The hardware used in the MathWorks SC04 booth\" style = \"vertical-align: baseline; width: 563px; height: 422px;\"><\/img><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2005: Version 2.0 and Bill Gates at the SC05 conference<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Version 2.0 had support for communicating jobs via MATLAB Job Scheduler and we also started supporting 3rd party schedulers, but only for non-communicating jobs back then. One of the 3rd party schedulers we supported was CCS, which later became HPC Server on Windows. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>In the picture below you have Bill Gates on the SC stage in Seattle running MATLAB on a Windows cluster. A short while later, Kyril Faenov, director of the High Performance Computing product unit in the Windows Server Group, came on stage to run a demo. The live demo distributed an algorithm that analyzed proteomics data on a local multinode Windows cluster and then transferred the job to a 64-node Linux cluster that was based in Washington.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_2.png\" width = \"643\" height = \"482\" alt = \"\" style = \"vertical-align: baseline; width: 643px; height: 482px;\"><\/img><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Jos was in the front row, sat next to Cleve, watching rather nervously. He'd been out there for 3 weeks in advance making sure that everything worked OK. I can only imagine what was going through his mind at that moment. Think about it: code you had written was being used in a live demo at <\/span><span style=' font-weight: bold;'>the <\/span><span>largest event in your industry, as part of a keynote by the CEO of Microsoft, while the co-founder of your company was sat next to you. If it were me, the stress of it all would have resulted in a heart attack moments before the demo started. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Kyril pressed the go button, the CPU core load shot up and results start coming back. Jos breathed out a sigh of relief, the live demo had worked and it all looked pretty cool! <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Jos went backstage after the keynote to thank the team who were babysitting the clusters.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span style=' font-weight: bold;'>Jos: <\/span><span>\"Guys! We made it. It was awesome! Thank you.\"<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span style=' font-weight: bold;'>Them: <\/span><span>\"Just! 20 seconds after the demo finished, we lost the InfiniBand connection and everything crashed\"<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Back then, the MathWorks booth at SC looked like the picture below. This was in the days when we still had a rack of real machines on-premise to run the demos. <\/span><a href = \"https:\/\/blogs.mathworks.com\/cleve\/2024\/03\/15\/twenty-years-of-parallel-matlab\/\"><span>Cleve tells us<\/span><\/a><span> that the rack itself was bought from Home Depot!<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_3.png\" width = \"700\" height = \"525\" alt = \"The MathWorks booth at SC05\" style = \"vertical-align: baseline; width: 700px; height: 525px;\"><\/img><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2007: Local workers, parfor and Cleve's follow up article<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>For the first few years, everything in parallel MATLAB was <\/span><span style=' font-weight: bold;'>only<\/span><span> HPC in the sense that you ran parallel workers on other machines. There was no concept of having a local pool so you couldn't run multiple workers on the same machine. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>This was long before my time at MathWorks but looking at the history, it makes sense. The first dual core Intel and AMD chips were released in 2005 so it would be a while before your average MATLAB user felt the pain of not being able to run multiple workers on the same machine.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Local workers really changed the game though. You could prototype your parallel code on your local dual core machine and then it would run <\/span><span style=' font-weight: bold;'>without modification<\/span><span> on a HPC cluster, you could just scale up the number of workers. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>2007 was the year that <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/parfor.html\"><span style=' font-family: monospace;'>parfor<\/span><\/a><span> became a thing and this really changed the game. Usually the first part of Parallel Computing Toolbox that most users learn, <\/span><span style=' font-family: monospace;'>parfor<\/span><span> is the easy way to parallelize loops in MATLAB. It has been developed a lot since that first version and has all sorts of tricks up its sleeve that aren't known by many people. I'll do a deep dive on it at some point next year.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Cleve also wrote a follow up to his 1995 article. This one was called <\/span><a href = \"https:\/\/uk.mathworks.com\/company\/technical-articles\/parallel-matlab-multiple-processors-and-multiple-cores.html\"><span>Parallel MATLAB: Multiple processors and multiple cores<\/span><\/a><span> that gave an overview of parallel computing in MATLAB at that time.<\/span><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2008: MathWorks jointly won the SC08 HPC Challenge class 2 award<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '>The HPC Challenge<span> is a benchmark that has obvious winners - the best result. There is also a class 2 award that is a little more subjective as it awards the most \"elegant\" implementation of four or more of the HPC Challenge benchmarks. This award was weighted 50% on performance and 50% on code elegance, clarity, and size. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>In SC08, the MATLAB team jointly won the class 2 award. We shared the prize with Chapel and X10 who also turned in great submissions. <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/benchmark-your-cluster-with-the-hpc-challenge.html\"><span>One of the examples in today's MATLAB documentation<\/span><\/a><span> is based on this work which allows you to run the challenge using MATLAB today.<\/span><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2010: GPU computing in MATLAB debuted at SC10 and NVIDIA GTC<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>These days, <\/span><a href = \"https:\/\/blogs.mathworks.com\/matlab\/2024\/09\/26\/matlab-now-has-over-1000-functions-that-just-work-on-nvidia-gpus\/\"><span>MATLAB has over 1,000 functions that support execution on NVIDIA GPUs<\/span><\/a><span> but the first version, released as part of R2010b, was rather more limited. Two glaring omissions were the <\/span><span style=' font-family: monospace;'>subsref<\/span><span> and <\/span><span style=' font-family: monospace;'>subsasgn<\/span><span> functions which meant that indexing of <\/span><span style=' font-family: monospace;'>gpuArray<\/span><span>'s was not supported. Imagine trying to do anything useful in MATLAB without ever indexing anything!<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Even then, however, <\/span><span style=' font-family: monospace;'>gpuArray<\/span><span> worked with 123 functions and it was a big enough release that Jensen Huang highlighted it in the 2010 NVIDIA  conference.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_4.png\" width = \"641\" height = \"427\" alt = \"\" style = \"vertical-align: baseline; width: 641px; height: 427px;\"><\/img><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>GPU computing was also the highlight of MathWorks' attendance at SC10. The booth is starting to look a little more like it does today.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_5.png\" width = \"644\" height = \"483\" alt = \"\" style = \"vertical-align: baseline; width: 644px; height: 483px;\"><\/img><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2013: parfeval gets added to the parallel language<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/parallel.pool.parfeval.html\"><span style=' font-family: monospace;'>parfeval<\/span><\/a><span> is a function in Parallel Computing Toolbox that doesn't get enough coverage. It allows you to request asynchronous execution of a function on a worker, This provides the programmer with the means to write more expressive code than is possible with <\/span><span style=' font-family: monospace;'>parfor<\/span><span> in a way that's easier than low-level functions such as  <\/span><span style=' font-family: monospace;'>spmdSend<\/span><span>, <\/span><span style=' font-family: monospace;'>spmdReceive<\/span><span> and friends. <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>In future years, additional support functions, such as <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/matlab\/ref\/parallel.future.aftereach.html?searchHighlight=aftereach&amp;s_tid=srchtitle_support_results_1_aftereach\"><span style=' font-family: monospace;'>afterEach<\/span><\/a><span> and <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/matlab\/ref\/parallel.future.afterall.html\"><span style=' font-family: monospace;'>afterAll<\/span><\/a><span>, were added to the language that assisted with workflows based on <\/span><span style=' font-family: monospace;'>parfeval.<\/span><span> <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>If the only parallel function you know in MATLAB is <\/span><span style=' font-family: monospace;'>parfor<\/span><span>, I suggest that you take a closer look at how <\/span><span style=' font-family: monospace;'>parfeval<\/span><span> might be able to help you.<\/span><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2015: Cleve's trip report of SC15<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Cleve wrote a <\/span><a href = \"https:\/\/blogs.mathworks.com\/cleve\/2015\/11\/23\/trip-report-supercomputing-2015\/?s_tid=blogs_rc_2\"><span>great report of his time at SC15 on his blog<\/span><\/a><span>. One of the demos at the MathWorks booth was of a Raspberry Pi, running code generated by MATLAB, doing live edge detection of a video feed,<\/span><\/div><ul  style = 'margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; '><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><a href = \"https:\/\/uk.mathworks.com\/hardware-support\/raspberry-pi-matlab.html\"><span>More details about using Raspberry Pi with MATLAB and Simulink<\/span><\/a><\/li><\/ul><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2016: Big data and tall arrays<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>2016 saw the introduction of <\/span><a href = \"https:\/\/www.mathworks.com\/help\/matlab\/import_export\/tall-arrays.html\"><span>Tall arrays<\/span><\/a><span>. These are what you use when your data has got so many rows that it won't fit into memory. One of the differences between tall arrays and in-memory arrays is that tall arrays typically remain <\/span><span style=' font-style: italic;'>unevaluated<\/span><span> until you request that calculations be performed, so called Lazy-evaluation.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Tall arrays have been discussed a couple of times on The MATLAB Blog:<\/span><\/div><ul  style = 'margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; '><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><a href = \"https:\/\/blogs.mathworks.com\/matlab\/2022\/11\/07\/matlabs-high-performance-computing-hpc-and-big-data-datatypes\/\"><span>MATLAB\u2019s High Performance Computing Data Types<\/span><\/a><\/li><li  style = 'margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap; '><a href = \"https:\/\/blogs.mathworks.com\/matlab\/2023\/05\/05\/working-efficiently-with-data-parquet-files-and-the-needle-in-a-haystack-problem\/\"><span>Working efficiently with data: Parquet files and the Needle in a Haystack problem<\/span><\/a><\/li><\/ul><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_6.png\" width = \"345\" height = \"457\" alt = \"\" style = \"vertical-align: baseline; width: 345px; height: 457px;\"><\/img><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2017: parsim, bringing Simulink to the HPC party<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>R2017a introduced <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/simulink\/slref\/parsim.html\"><span style=' font-family: monospace;'>parsim<\/span><\/a><span> which relieved users from all the hassle of trying to call <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/simulink\/slref\/sim.html?searchHighlight=sim&amp;s_tid=srchtitle_support_results_1_sim\"><span style=' font-family: monospace;'>sim<\/span><\/a><span> from within <\/span><span style=' font-family: monospace;'>parfor<\/span><span>, something that was <\/span><span style=' font-style: italic;'>very<\/span><span> hard to get right. If you want to run many Simulink jobs in parallel, this is the function for you. There are <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/simulink\/examples.html?s_tid=CRUX_topnav&amp;category=run-multiple-parallel-simulations\"><span>several illuminating examples in the documentation<\/span><\/a><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2020: Thread pools were introduced<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Until R2020a, local worker pools in MATLAB were always process-based. In R2020a, thread-based pools were first made possible which allowed for reduced memory usage, faster start-up time and lower data-transfer costs.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Today, as of R2024b, process pools are still the default because only a (ever-growing) subset of MATLAB functions work on thread pools. However, you can open a thread pool very easily instead by calling<\/span><\/div><div style=\"background-color: #F5F5F5; margin: 10px 15px 10px 0; display: inline-block\"><div class=\"inlineWrapper\"><div  style = 'border-left: 1px solid rgb(217, 217, 217); border-right: 1px solid rgb(217, 217, 217); border-top: 1px solid rgb(217, 217, 217); border-bottom: 1px solid rgb(217, 217, 217); border-radius: 4px; padding: 6px 45px 4px 13px; line-height: 18.004px; min-height: 0px; white-space: nowrap; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace; font-size: 14px; '><span style=\"white-space: pre\"><span >parpool(<\/span><span style=\"color: #a709f5;\">\"Threads\"<\/span><span >)<\/span><\/span><\/div><\/div><\/div><div  style = 'margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>before you run any parallel code.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>This is what I almost always do when working on a single machine these days. I only switch back to process pools when I am prototyping for multi-node work or when I hit one of the rare occasions where I'm using functionality that's not yet supported by thread pools. If you only ever use a single node of a HPC system, I highly recommend that you give this a try.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>See <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/parallel-computing\/choose-between-thread-based-and-process-based-environments.html\"><span>Choose Between Thread-Based and Process-Based Environments<\/span><\/a><span> for more details.<\/span><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2023: Quantum Computing, Parallel server on Kubernetes<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Quantum computing isn't part of the Parallel Computing Toolbox, it's available via a <\/span><a href = \"https:\/\/uk.mathworks.com\/matlabcentral\/fileexchange\/125425-matlab-support-package-for-quantum-computing\"><span>downloadable support package<\/span><\/a><span>. I'm only including it here because I wanted to be part of the story and last year, at SC23, one of the things I did was hang out at the AWS booth presenting the <\/span><a href = \"https:\/\/uk.mathworks.com\/matlabcentral\/fileexchange\/125425-matlab-support-package-for-quantum-computing\"><span>Quantum Support Package<\/span><\/a><span> and how it provides access to real quantum computers on the cloud via AWS Braket and IBM.  <\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_7.png\" width = \"548\" height = \"411\" alt = \"\" style = \"vertical-align: baseline; width: 548px; height: 411px;\"><\/img><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>2023 was also when it became possible to deploy MATLAB Parallel Server and MATLAB Job Scheduler on a Kubernetes cluster using a Helm chart. See <\/span><a href = \"https:\/\/uk.mathworks.com\/help\/matlab-parallel-server\/run-matlab-parallel-server-on-kubernetes.html\"><span>https:\/\/uk.mathworks.com\/help\/matlab-parallel-server\/run-matlab-parallel-server-on-kubernetes.html<\/span><\/a><span> for details. This was the booth last year.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><img class = \"imageNode\" src = \"http:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_8.png\" width = \"556\" height = \"742\" alt = \"\" style = \"vertical-align: baseline; width: 556px; height: 742px;\"><\/img><\/div><h2  style = 'margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: 700; text-align: left; '><span>2024: MathWorks at SC24 in Atlanta<\/span><\/h2><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Parallel computing in MATLAB has come a long way in the 20 years since 2004 and I've only covered some of the highlights in the list above. I just <\/span><span style=' font-weight: bold;'>know<\/span><span> that I've missed out some of the favorite features of both MathWorkers and users alike but SC24 is coming up fast and I need to get this article published.<\/span><\/div><div  style = 'margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(33, 33, 33); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: 400; text-align: left; '><span>Come and join us at the MathWorks booth #3414, play with the demos, chat to me, Jos and other members of the MathWorks team about parallel computing in MATLAB or just to share memories about SC's gone by. Oh, and get some swag of course. <\/span><\/div>\r\n<\/div><script type=\"text\/javascript\">var css = ''; var head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style'); head.appendChild(style); style.type = 'text\/css'; if (style.styleSheet){ style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); }<\/script>","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/matlab\/files\/2024\/11\/pct20blogUpdated_8.png\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><p>While prepping for the SC24 supercomputing conference with the rest of the MathWorks crew I idly wondered when Parallel Computing Toolbox was first released. Jos Martin, one of the original authors... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/matlab\/2024\/11\/18\/20-years-of-supercomputing-with-matlab\/\">read more >><\/a><\/p>","protected":false},"author":176,"featured_media":2880,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[42,14,77,44],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts\/2886"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/users\/176"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/comments?post=2886"}],"version-history":[{"count":3,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts\/2886\/revisions"}],"predecessor-version":[{"id":3986,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/posts\/2886\/revisions\/3986"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/media\/2880"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/media?parent=2886"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/categories?post=2886"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/matlab\/wp-json\/wp\/v2\/tags?post=2886"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}