<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Interviews - MacResearch.org</title>
	<atom:link href="https://macresearch.org/interviews/feed/" rel="self" type="application/rss+xml" />
	<link>https://macresearch.org/interviews/</link>
	<description>The Latest Mac Gaming News and Tutorials</description>
	<lastBuildDate>Thu, 19 Oct 2023 09:47:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.5</generator>

<image>
	<url>https://macresearch.org/wp-content/uploads/2020/11/Mac-Research-Favicon.svg</url>
	<title>Interviews - MacResearch.org</title>
	<link>https://macresearch.org/interviews/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Interview with Aaron Hillegass of Big Nerd Ranch</title>
		<link>https://macresearch.org/interview-with-aaron-hillegass-of-big-nerd-ranch/</link>
					<comments>https://macresearch.org/interview-with-aaron-hillegass-of-big-nerd-ranch/#respond</comments>
		
		<dc:creator><![CDATA[Martina Nikolova]]></dc:creator>
		<pubDate>Thu, 16 Apr 2020 10:51:56 +0000</pubDate>
				<category><![CDATA[Interviews]]></category>
		<guid isPermaLink="false">https://macresearch.org/?p=248</guid>

					<description><![CDATA[<p>Aaron Hillegass has been teaching software developers about Mac OS X, and its forerunner at NeXT, for as long as anyone can remember. Recognizable by his enormous cowboy hat, Aaron has written several books, including one on Cocoa development that has become legendary, and runs the Big Nerd Ranch, an enterprise he began after leaving [&#x2026;]</p>
<p>The post <a href="https://macresearch.org/interview-with-aaron-hillegass-of-big-nerd-ranch/">Interview with Aaron Hillegass of Big Nerd Ranch</a> appeared first on <a href="https://macresearch.org">MacResearch.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Aaron Hillegass has been teaching software developers about Mac OS X, and its forerunner at NeXT, for as long as anyone can remember. Recognizable by his enormous cowboy hat, Aaron has written several books, including one on Cocoa development that has become legendary, and runs the Big Nerd Ranch, an enterprise he began after leaving NeXT, which has some of the best courses around for learning Cocoa and other Mac OS X technologies. Recently, Aaron was kind enough to answer some questions for us, and explain how Big Nerd Ranch can help scientific developers on the Mac.</p>



<p><strong>[MR] Let’s start off with something easy: What’s with the hat?</strong></p>



<p>You have something against hats? Indiana Jones wore a hat. Maybe I like to wear a hat.</p>



<p>Actually, the hat is shameless self-promotion. One of the bad things about having a small business is that you have little or no advertising budget, so you end up doing silly things like wearing a cowboy hat to any event where a dozen or more potential customers might be.</p>



<p>I actually have a new hat. My old hat never really fit that well, so I found this amazing hat maker,&nbsp;<a href="http://www.jaxonbilthats.com/">Roy Jackson</a>, and commissioned a new hat. Roy sends you a fitting rig that you put on your head. When you mail the rig back, he makes you a hat.</p>



<p><strong>[MR] Your book&nbsp;<a href="http://www.bignerdranch.com/products.shtml">Cocoa Programming for Mac OS X</a>&nbsp;has become the quintessential beginners guide to developing on Mac OS X, but your involvement with the platform actually goes back much further than that, to NeXT. Can you tell us a little about the NeXT days, and what your role was?</strong></p>



<p>I was one of the developer trainers, and I was in charge of developing the courses we used.</p>



<p>So, you know how the mother bird regurgitates food her baby birds? Well, I was the mother bird, the food is knowledge, and the baby birds are developers. Only, I didn’t actually puke knowledge of OpenStep and WebObjects in their mouths; I would learn the new technologies from the engineers who were inventing them and then distill those ideas into a form that made learning them easier.</p>



<p><strong>[MR] I heard a rumor recently on the&nbsp;<a href="http://www.latenightcocoa.com/">Late Night Cocoa</a>&nbsp;podcast that you were busy working on not just one new Cocoa book, but two. Is there any truth to the rumor, and is there anything you can tell us at this point in time?</strong></p>



<p>The third edition&nbsp;<em>Cocoa Programming for Mac OS X</em>&nbsp;will address Objective-C 2, Xcode 3, and Core Data. I’m working on it now, but don’t expect it to reach bookstores until autumn.</p>



<p>After that, I’m going to write another book, but I haven’t decided what that book will be about. It could be the prequel to the Cocoa book or it could be the sequel. Or perhaps it is time for me to write the self-help book that will bring me fame and fortune.</p>



<p><strong>[MR] Mac OS X ushered in a new era for NeXT developers. What was your feeling about the transition to Apple? Were you enthusiastic, or worried at the time?</strong></p>



<p>I was spoiled. I worked for a company where I got to work on cutting-edge technologies with 350 amazing people. When they said, “You are now part of 9,000 person company.” I panicked and ran.</p>



<p>The cultures clashed a bit, but we ended up with a Unix box that your grandmother would love — something that required the talents at both NeXT and Apple.</p>



<p><strong>[MR] There is no doubt that Apple’s purchase of NeXT presented a lot of opportunities for people loyal to the platform, and you certainly took full advantage of the move by starting up&nbsp;<a href="http://www.bignerdranch.com/">Big Nerd Ranch</a>. For those that don’t know about Big Nerd Ranch, can you give us a quick history?</strong></p>



<p>Big Nerd Ranch, Inc. is taking technical training to the next level.</p>



<p>First, we fixed the things that are obviously wrong with most technical courses: inexperienced instructors and irrelevant materials. Our instructors are the absolute best on the planet, and our materials have been stripped of things that were more sales or novelties than essential techniques.</p>



<p>Second, we took inspiration from monastic retreats. When you come to the Big Nerd Ranch, we eliminate the distractions. It is quiet and your room and food are included. There is nothing to do but learn.</p>



<p><strong>[MR] Big Nerd Ranch began as a Cocoa ‘school’, and you are a prominent member of the Cocoa Developer scene. I remember a few years back a ruckus arising on the cocoa-dev list when you came out hard against the then new Cocoa Bindings. You later retracted much of the criticism, but what is your take on the current state of Cocoa, and where it is headed? Are you enthusiastic about Core Data, for example? Core Animation?</strong></p>



<p>While bindings and Core Data are nice, I think they both could have been better.</p>



<p>In the past, Apple would implement a new technology and use them in their own apps. Once their own engineers had tested and improved the technology, it would be made a public API. These days, Apple uses WWDC to push technologies that they have never actually used in their own applications.</p>



<p><code>PDFView</code>&nbsp;is an example of a nearly flawless technology. Why? Because it was used in Preview before it was made public.&nbsp;<code>NSTreeController</code>, on the other hand, is crap, and should have been identified as crap before it was dumped upon the adoring developer community.</p>



<p>For a decade, Apple/NeXT has claimed that one could write a word processor by subclassing&nbsp;<code>NSTextView</code>. Then Pages comes along and doesn’t use&nbsp;<code>NSTextView</code>&nbsp;at all. Why would Apple pass up such a great opportunity to test and improve&nbsp;<code>NSTextView</code>?</p>



<p>I am delighted with the state of Cocoa, and it gets better with every release. Think how wonderful Cocoa would be if Apple took every opportunity to eat its own dog food.</p>



<p><strong>[MR] Some of our readers will be interested in Cocoa, but I suspect many more would be interested in some of the other courses run by Big Nerd Ranch. A quick look at the web site shows&nbsp;<a href="http://www.bignerdranch.com/schedule.shtml">courses</a>&nbsp;ranging from Core Mac OS X to OpenGL and even Python. Can you discuss a few of the courses that might be of particular interest to scientific developers on the Mac?</strong></p>



<p>Any scientific developer would love our&nbsp;<a href="http://www.bignerdranch.com/classes/opengl.shtml">OpenGL class</a>. While still useful to a game programmer, the class focuses on issues related to data visualization. Rocco Bowling, who used to do data visualization work for one of the intelligence agencies, teaches the class. Rocco also wrote&nbsp;<a href="http://www.freeverse.com/bbbg/">Big Bang Chess</a>. His knowledge of the subject is amazing. That class will be offered in Atlanta from April 30 through May 4.</p>



<p>The&nbsp;<a href="http://www.bignerdranch.com/classes/core.shtml">Core Mac OS X Bootcamp</a>&nbsp;teaches programmers how to take advantage of the plumbing that makes OS X work. It covers topics like multi-threading, network communications, distributed objects, the keychain, and directory services. We also take a long look at tools: gcc, gdb, the linker, subversion, and the performance tools. That class will be offered in Frankfurt, Germany April 16 &#8211; 20. It is taught by Mark Dalrymple, the author of&nbsp;<a href="http://www.bignerdranch.com/products.shtml">Advanced Mac OS X Programming</a>.</p>



<p>Dave Beazley, the author of&nbsp;<a href="http://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0735710910">The Python Essential Reference</a>, teaches our&nbsp;<a href="http://www.bignerdranch.com/classes/python.shtml">Python Bootcamp</a>&nbsp;in Atlanta May 21 &#8211; 25.</p>



<p>If you are doing web development, we offer the best classes in the world on&nbsp;<a href="http://www.bignerdranch.com/classes/ruby.shtml">Ruby on Rails</a>,&nbsp;<a href="http://www.bignerdranch.com/classes/php5.shtml">PHP</a>, and&nbsp;<a href="http://www.bignerdranch.com/classes/django.shtml">Django</a>. (That last one is sort of a cheat: Our Django class is the only one in the world.)</p>



<p><strong>[MR] I also see that Big Nerd Ranch is now intercontinental. Where do you run your courses?</strong></p>



<p>In North America, we teach our classes near Atlanta, Georgia. Atlanta is a great location because it is home to the busiest airport in the world.</p>



<p>In Europe, our classes are taught in a monastery/vineyard near Frankfurt, Germany. Frankfurt is a major hub for all of Europe, and it would be difficult to find a place that better expressed the ideas behind Big Nerd Ranch.</p>



<p><strong>[MR] Finally, what can people who go to a Big Nerd Ranch course expect?</strong></p>



<p>A Buddhist monk should be kind and patient. Can you teach someone to be kind and patient? I don’t think so. So, to train Buddist monks, they create an environment where the students can find kindness and patience themselves.</p>



<p>I can’t make you a great Cocoa programmer, but I can create an environment where you can find the great Cocoa programmer inside yourself.</p>
<p>The post <a href="https://macresearch.org/interview-with-aaron-hillegass-of-big-nerd-ranch/">Interview with Aaron Hillegass of Big Nerd Ranch</a> appeared first on <a href="https://macresearch.org">MacResearch.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://macresearch.org/interview-with-aaron-hillegass-of-big-nerd-ranch/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Interview: Eigen Matrix Library</title>
		<link>https://macresearch.org/interview-eigen-matrix-library/</link>
					<comments>https://macresearch.org/interview-eigen-matrix-library/#respond</comments>
		
		<dc:creator><![CDATA[Martina Nikolova]]></dc:creator>
		<pubDate>Wed, 15 Apr 2020 09:35:07 +0000</pubDate>
				<category><![CDATA[Interviews]]></category>
		<guid isPermaLink="false">https://macresearch.org/?p=58</guid>

					<description><![CDATA[<p>What follows is an interview with Beno&#xEE;t Jacob and Gael Guennebaud, two developers of the open source&#xA0;Eigen&#xA0;project, which provides incredibly fast C++ matrix and vector numeric code. OK, let&#x2019;s start out with the basics. Could you introduce yourselves? Benoit: I&#x2019;m a Mathematics postdoc at the University of Toronto, coming from France. I&#x2019;m working on&#xA0;C*-algebras, and [&#x2026;]</p>
<p>The post <a href="https://macresearch.org/interview-eigen-matrix-library/">Interview: Eigen Matrix Library</a> appeared first on <a href="https://macresearch.org">MacResearch.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>What follows is an interview with Benoît Jacob and Gael Guennebaud, two developers of the open source&nbsp;<a href="http://eigen.tuxfamily.org/">Eigen</a>&nbsp;project, which provides incredibly fast C++ matrix and vector numeric code.</p>



<p><strong>OK, let&#8217;s start out with the basics. Could you introduce yourselves?</strong></p>



<p>Benoit: I&#8217;m a Mathematics postdoc at the University of Toronto, coming from France. I&#8217;m working on&nbsp;<a href="http://en.wikipedia.org/wiki/C*-algebra">C*-algebras</a>, and teaching linear algebra. In addition to Eigen, I contribute to a few other free software projects, mostly within&nbsp;<a href="http://kde.org/">KDE</a>. In the past I also contributed to&nbsp;<a href="http://avogadro.openmolecules.net/">Avogadro</a>&nbsp;and a little bit to&nbsp;<a href="http://openbabel.org/">Open Babel</a>.</p>



<p>Gael: I&#8217;m a French researcher in Computer Graphics currently working at INRIA Bordeaux. In particular, my research interests include real-time rendering and surface representations. My major contribution in the open-source world is by far what I did in Eigen, but I also contributed a bit to&nbsp;<a href="http://vcg.sourceforge.net/">vcglib</a>&nbsp;and&nbsp;<a href="http://meshlab.sourceforge.net/wiki">MeshLab</a>.</p>



<p><strong>What is&nbsp;<a href="http://eigen.tuxfamily.org/">Eigen</a>?</strong></p>



<p>Benoit and Gael:&nbsp;<a href="http://eigen.tuxfamily.org/">Eigen</a>&nbsp;is a free C++ template math library mainly focused on vectors, matrices, and linear algebra. It is a self-contained library covering a very broad range of use cases. For example, it covers both dense and sparse objects, and in the dense case, it covers both fixed-size and dynamic-size objects. Moreover it provides linear algebra algorithms, a geometry framework, etc. It has a&nbsp;<a href="http://eigen.tuxfamily.org/index.php?title=API_Showcase">very nice API</a>&nbsp;for C++ programmers, and it embraces&nbsp;<a href="http://eigen.tuxfamily.org/index.php?title=Benchmark">very high performance</a>.</p>



<p><strong>What drove you to create Eigen and Eigen 2?</strong></p>



<p>Benoit: Eigen 1 was a very small project, 2500 LOC and just a few months of development. Its creation in 2006 was driven by the then-simple needs of some&nbsp;<a href="http://kde.org/">KDE</a>&nbsp;and&nbsp;<a href="http://koffice.org/">KOffice</a>&nbsp;apps. However it quickly turned out that we had underestimated their needs, and Eigen 1 was insufficient. So in 2007, I started developing Eigen2. The aim was to create the linear algebra library that would satisfy all the needs of KDE and KOffice apps &#8212; a goal that, in retrospect, was very ambitious, and will only be reached with Eigen 2.1. After an initial experiment with&nbsp;<a href="http://tvmet.sourceforge.net/">TVMET</a>&#8216;s code, I decided to restart from scratch in August 2007 and quickly got a working implementation of expression templates. However, this early Eigen 2 was very small. Development speed really picked up when Gael joined in early 2008.</p>



<p>Gael: A bit more than a year ago, I became tired of going back and forth between my own fixed size vector/matrix classes and more generic linear algebra packages. So, I started looking at the other existing solutions without being excited by any of them. Since I have been using KDE for about 9 years, I was really curious to know what the KDE&#8217;s folks did in this area. At that time, it was exactly the start of Eigen2 which looked promising but the fact it was based on TVMET puzzled me. Eventually, Benoît had the great idea to restart the development of Eigen2 from scratch, and after one or two months he came up with a very lean design. Moreover his vision and feature plan for Eigen2 exactly matched my own, and being part of the KDE community was exciting too! At the beginning, I naively thought that after one or two months the job would be done! Instead, we started playing with exciting stuff like explicit vectorization, efficient matrix products, sparse matrix, etc.</p>



<p><strong>Many people are familiar with other linear algebra and matrix libraries,&nbsp;including BLAS/LAPACK, Intel&#8217;s Math Kernel Library, and Apple&#8217;s vecLib&nbsp;framework. Can you explain how Eigen is different, besides being written in&nbsp;C++?</strong></p>



<p>Benoit and Gael:<br><br>Giving a fair answer to that question would require a thorough comparison to all existing libraries that is obviously out the scope of this interview. Search for &#8220;C++ matrix library&#8221; to get an idea. For us, most important criteria include:</p>



<ul class="wp-block-list"><li>generality,</li><li>performance,</li><li>ease of use,</li><li>license policy.</li></ul>



<p>Even more important is a sort of meta criterion which would glue together all these criteria. Indeed, what&#8217;s the point in having a very efficient library but which which cannot handle your specific needs, and/or that you cannot freely use/extend because of the license ? The central difference between Eigen and other libraries reside in this unmatched combination of advantages.</p>



<p>For instance, BLAS/LAPACK are certainly the most popular matrix/linear algebra packages. They can achieve very high performance, but only for relatively large and dense matrices, and through proprietary implementations such as Intel&#8217;s MKL or Apple&#8217;s vecLib. Goto BLAS too has a restrictive license. API-wise, BLAS/LAPACK are also very painful to use, though that limitation is somewhat overcome by the existence of many high-level wrappers (FLENS, matlab, etc.). In contrast, not only does Eigen provide a feature set to BLAS/LAPACK with better ease of use, but it also seamlessly supports small fixed size matrices, has experimental support for sparse matrices with optional back-ends, and includes other modules such as linear least squares and geometry.</p>



<p>As we said, expression templates bring unmatched expressiveness and performance for basic operations. It is therefore interesting to have a brief look at the few other C++ template libraries which are also based on expression templates. The most popular ones include TVMET, Blitz++, and Boost::uBLAS. However, in contrast to Eigen, none of them provide explicit vectorization nor include linear algebra algorithms. They also perform poorly for both small and large matrix sizes, and suffer from some shortcomings in the way expression templates have been implemented making them hard to use in practice. For example, contrary to Eigen, they do not decide automatically when to use lazy evaluation. Eigen handles most cases automatically while ultimately letting the user override the default behavior. For example, in a chained matrix product A*B*C, Eigen understands that lazy evaluation would be a bad idea so decides to evaluate A*B into a temporary, while Boost::uBLAS requires the user to do that explicitly. Another advantage of Eigen over these other C++ libraries, is that Eigen has still reasonable compilation times: we are very careful about that.</p>



<p><strong>How does performance compare to other alternatives? Do you have some&nbsp;benchmarks?</strong></p>



<p>Gael: Since good performance is one of our top priorities, we indeed regularly run several benchmarks. When speaking about performance it is important to distinguish between small fixed size and larger matrix which require very different kind of optimizations.</p>



<p>About the first category, Eigen includes meta-unrollers and an advanced explicit vectorization mechanism allowing us to generate machine code as good as hand written assembly code. Therefore, in all our benchmarks, we found Eigen outperforms all other libraries, or at least we made sure that was the case by fixing Eigen when needed 😉</p>



<p>For relatively large matrices, we have&nbsp;<a href="http://eigen.tuxfamily.org/index.php?title=Benchmark">a comparison of several free and non-free libraries</a>. These results demonstrate that Eigen outperforms all other Free libraries, including&nbsp;<a href="http://math-atlas.sourceforge.net/">ATLAS</a>. Compared to non-Free alternatives like Intel&#8217;s MKL and Goto, Eigen is usually faster for both Level-1 (vector-vector) and Level-2 (matrix-vector) equivalent BLAS operations. This is mainly due to expression templates, and a highly optimized matrix-vector product algorithm. However, we acknowledge that matrix-matrix operations are not yet as optimized as their respective BLAS Level-3 routines of MKL and Goto.</p>



<p>Regarding higher-level linear algebra algorithms like LU or Cholesky factorizations, we currently do not provide any block implementations for them. Therefore the equivalent LAPACK routines of vendor tuned implementations scale better for very large matrices. Compared to them, we also lack a support for multi-core computing. But nothing is engraved in stone, and we are confident that all these performance limitations for very large matrices will be overcome in the future, in the short term by adding an optional LAPACK backend to Eigen, and in the longer term, who knows 😉</p>



<p><strong>What projects are using Eigen right now?</strong></p>



<p>Benoit and Gael: Eigen is already used in a wide range of applications. Some of them include:</p>



<p>It is very interesting and motivating to see how many projects already switched, or are going to switched to Eigen, proving Eigen fills a real gap.</p>



<p><strong>How would you write code with Eigen? Could you give me an example, say of&nbsp;multiplying the inverse of matrix A by matrix B?</strong></p>



<p>Benoit: This operation amounts to solving the system AX=B which can be done for example using a LU decomposition. With Eigen you would do:</p>



<pre class="wp-block-preformatted">A.lu().solve(B, &amp;X);</pre>



<p>Now, depending on your context, you may prefer using another kind of decomposition. Here, Eigen also allows you to use a QR, LLt, LDLt, or SVD decomposition, each time with the same obvious syntax, for example:</p>



<pre class="wp-block-preformatted">A.svd().solve(B, &amp;X);</pre>



<p>If your matrices have small and fixed size, and especially if B is a vector, it can be faster to actually compute the inverse and the product:</p>



<pre class="wp-block-preformatted">A.inverse() * B;</pre>



<p>Here is a full example program that you can compile. It works with a 1000&#215;1000 matrix A and a 1000&#215;500 matrix B, with double precision. I get a relative error of the order of 1e-13 which is pretty good. Eigen&#8217;s LU does full pivoting which guarantees that it works in all&nbsp;cases, and an user just reported speed to be on par with LAPACK. However, for this kind of large sizes, depending on the CPU cache size, we acknowledge that it would start to be beneficial to have a more cache-friendly implementation, typically working block-wise.</p>



<pre class="wp-block-preformatted">#include &lt;Eigen/LU&gt;<em>// provides LU decomposition</em>
#include &lt;Eigen/Array&gt;<em>// provides random matrices</em>

<strong>using</strong> <strong>namespace</strong> Eigen;
int main()
{
  MatrixXd A = MatrixXd::Random(1000, 1000);
  MatrixXd B = MatrixXd::Random(1000, 500);
  MatrixXd X;

  A.lu().solve(B, &amp;X);

  std::cout &lt;&lt; "relative error: " &lt;&lt; (A*X - B).norm() / B.norm() &lt;&lt; std::endl;
}
</pre>



<p>More examples are given in the&nbsp;<a href="http://eigen.tuxfamily.org/index.php?title=API_Showcase">API showcase</a>.</p>



<p><strong>Since Eigen is a template library, can you explain the license? Can you use&nbsp;it in proprietary projects?</strong></p>



<p>Benoit: The license is dual LGPL3+/GPL2+. This means it&#8217;s LGPL3+, except that GPL2 projects can&#8217;t use LGPL3+ libraries so just for them we added the GPL2+ as an alternative. Yes, proprietary closed-source projects may use Eigen, without having to open any of their source code. The LGPL license allows it and we do have several closed-source users.</p>



<p>There used to be a problem with the older LGPL 2.1 and template libraries. Indeed, the phrasing of the LGPL 2.1 was not applicable to the case of C++ template libraries where the code is in header files and is included rather than linked to. Fortunately this issue was fixed in the LGPL3 which now explicitly adresses this issue in Section 3, in addition to having a much more generally applicable phrasing overall. See our&nbsp;<a href="http://eigen.tuxfamily.org/index.php?title=FAQ#Licensing">Licensing FAQ</a>.</p>



<p><strong>What are some goals of Eigen moving forward? What kind of help do you need?&nbsp;What are some new features we might see in Eigen 2.1?</strong></p>



<p>Benoit and Gael: Our goals for 2.1 are:</p>



<p>Our goals for 2.1 are:</p>



<ul class="wp-block-list"><li>Finish stabilizing the API (the API guarantee is only partial in 2.0)</li><li>Complete the Sparse module. One goal is to make it good enough for Step in KDE 4.3 and Krita.</li><li>Make sure all dense decompositions are world-class (LU is already good though we have improvements in mind, SVD is being completely rewritten, etc&#8230;)</li><li>Make fixed-size specializations of algorithms</li><li>Optimize the case of complex numbers</li><li>Vectorize more operations (e.g., exp() or sin() or log())</li><li>Investigate optionally leveraging new GCC 4.4 hotness: per-function optimization flags</li></ul>



<p>We need a lot of help with all that, more details can be found in our&nbsp;<a href="http://eigen.tuxfamily.org/index.php?title=Todo">To-do</a>. If new contributors join the team, in the longer term, we could see some new modules covering statistics, fast fourier transform, non linear optimizations, etc.</p>



<p>We also welcome testing, especially on exotic (read: non-GNU or non-x86/x86-64) platforms. All bug reports are much appreciated.</p>
<p>The post <a href="https://macresearch.org/interview-eigen-matrix-library/">Interview: Eigen Matrix Library</a> appeared first on <a href="https://macresearch.org">MacResearch.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://macresearch.org/interview-eigen-matrix-library/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Interview: Joe Wolf &#8211; Intel Security Compiler Group</title>
		<link>https://macresearch.org/interview-joe-wolf-intel-security-compiler-group/</link>
					<comments>https://macresearch.org/interview-joe-wolf-intel-security-compiler-group/#respond</comments>
		
		<dc:creator><![CDATA[Martina Nikolova]]></dc:creator>
		<pubDate>Wed, 01 Apr 2020 09:24:11 +0000</pubDate>
				<category><![CDATA[Interviews]]></category>
		<guid isPermaLink="false">https://macresearch.org/?p=319</guid>

					<description><![CDATA[<p>Joe Wolf has worked with compilers for high-performance computing for the past twenty years. He developed optimizing/parallelizing Ada and Fortran compilers at Lawrence Livermore National Laboratory and Cray Security Research, Inc. before joining Intel in 1996. Since then, he has focused on helping customers in all industries adopt and use the Intel&#xAE; Compilers for all [&#x2026;]</p>
<p>The post <a href="https://macresearch.org/interview-joe-wolf-intel-security-compiler-group/">Interview: Joe Wolf &#8211; Intel Security Compiler Group</a> appeared first on <a href="https://macresearch.org">MacResearch.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Joe Wolf has worked with compilers for high-performance computing for the past twenty years. He developed optimizing/parallelizing Ada and Fortran compilers at Lawrence Livermore National Laboratory and Cray Security Research, Inc. before joining Intel in 1996. Since then, he has focused on helping customers in all industries adopt and use the Intel® Compilers for all of Intel’s processors and platforms from hand-helds to large clusters.</p>



<p><strong>Describe your current position inside Intel and some of the projects you are directly involved with.</strong></p>



<p>At Intel, I manage the Intel® Compilers Technical Support and Consulting team, responsible for all technical support and training for our compiler products. I’ve been with the Intel compiler team since 1996 working as a compiler developer, support engineer and as a manager. We are currently working to help our Intel® Software Development Products for Mac OS X help developers in the marketplace get the best performance.</p>



<p><strong>Can you describe some of the challenges in moving the compilers over to a new platform? Obviously the target CPU is the same, what are some of the technical considerations that must be considered when moving to a new OS?</strong></p>



<p>Our goal is to be command-line, source, object, and debug compatible with the default development environment on the new platform. This means achieving full compatibility with GCC and Xcode* on Mac OS* X in each of these areas. Fortunately, we had a good base from which to start since Linux was already an operating system we supported. Still, there are object code differences, and initially the debug format was different as well. The runtime libraries, particularly our Fortran runtime libraries had to comprehend new OS calls and such. One exciting opportunity was that all the new machines for Apple had at least two cores, so our support for multi-core through our compilers and libraries apply to all the new Apple machines.</p>



<p>Another issue we faced was optimizing for position independent code (PIC). &nbsp;On Linux, the best performance was with static linking.&nbsp; Since that wasn’t an option on Mac OS X, we put some effort and creativity into optimizing the PIC code for shared objects. &nbsp;Now, there is no overhead.</p>



<p>Finally, we had a goal to ensure that our first product on Mac OS X was not de- featured.&nbsp; We didn’t want it so be a subset of our Linux products. &nbsp;So we went through and made sure each feature was supported on Mac OS X, including OpenMP, feedback-directed optimizations, IPO and whole program analysis, vectorization and parallelization.</p>



<p><strong>While we are all dependent on compilers, many of us don&#8217;t really take the time to appreciate the fact that they are in fact very complicated pieces of software, developed by a wide variety of engineers. Can you give us an idea of what the general workflow is in developing and managing such a product?</strong></p>



<p>They are indeed complicated pieces of software, broken roughly into language processing (front-end), optimization (middle), and code generation (back-end) components. In addition, there are runtime libraries, IDE integration, command-line driver, the Intel Debugger, installation scripts, etc. that make up the complete product. Our team is geographically dispersed around the world, so we have the complexity of managing a world-wide team as well. We follow a fairly rigid process of starting with customer and strategic requirements for the product version, break those into a set of engineering work items, and then schedule that into for the appropriate schedule for our product releases.</p>



<p><strong>The announcement of a switch was made at WWDC 2005. How, in your opinion, had the mood changed about the transition to Intel between WWDC 2005 and WWDC 2006?</strong></p>



<p>At WWDC 2006, it seemed that there was nothing but excitement about the transition. Everyone I met was genuinely enthusiastic about the Intel® processor-based Mac’s, especially for their performance vs. previous generations. People just seemed to want to get their hands on whatever information and software that could help them get their applications transitioned quickly.</p>



<p><strong>Apple&#8217;s transition from PPC to Intel happened quite fast (and ahead of the announced schedule). How did the time constraints for Apple&#8217;s product delivery affect the schedule for the tools development cycle?</strong></p>



<p>Needless to say, it had a dramatic impact on all of us in the Software group at Intel. It spanned the gamut from elation at the prospect, to exasperation at what it would do to our product plans. We had to manage our efforts to update our other products while scheduling to get the Mac OS products together quickly. Fortunately, the continued development work for our product lines was generally complementary to adding Mac OS X versions. Where it was not, we did make trade-offs to ensure our Apple support was strong and timely. Now, all work going forward includes benefits for Apple developers.</p>



<p><strong>With a switch to a new OS, there exists a need for expertise with that OS to develop products for it. Does Intel now maintain a group of Mac OS X experts in house? How closely does the compiler group work with various groups at Apple?</strong></p>



<p>We had to develop experts on Mac OS X fairly quickly. We do have a number of people in the tools development teams, and in our application performance engineering teams that are focused on Mac OS X and Xcode. They help us ensure we comprehend changes to the environment so that we can plan corresponding changes to our tools. We have established a good working relationship with Apple’s applications and tools teams to ensure there is a good transfer of knowledge of the microprocessor architecture and tuning, and for Mac OS X knowledge back to Intel. Our teams worked well together to teach each other what we needed to know, and answer questions we had either way.</p>



<p><strong>Obviously the compiler group has to work closely with hardware engineers designing the CPU&#8217;s. At what stage in the development of a new CPU do the groups begin to interact to lay out a strategy for integrating support for new features into the compiler tools and libraries?</strong></p>



<p>The tools and application performance teams get involved with the processor architects very early – during the conceptual design of the processors and new features, and through simulation/emulation prior to tapeout. We want to ensure that new processors support features that are important to a wide variety of software, and that the features are such that the tools can take advantage of them.</p>



<p><strong>Commercial versions of the Intel C/C++ and Fortran compilers, as well as the Intel Performance Primitives and the Intel Threading Building Blocks, are already available for purchase. Approximately how long did it take to get the product shipping? What were some of the steps that had to be taken to get the project going initially?</strong></p>



<p>It took us about a year to get the tools products ready. We had a small number of people that began investigation and prototyping work in complete secrecy from the rest of Intel beginning a few months before the WWDC 2005 announcement. After the announcement we were able to do full product planning without the veil of secrecy. It took about nine months from July 2005 to April 2006 when the Compilers and Libraries were released as products. We were in great shape in January 2006 and able to get a lot of developers using our preview (beta) once the MacWorld announcements were public.</p>



<p><strong>During the beta period for the Intel compilers, I was extremely impressed with the integration of the C/C++ and Fortran compilers. In fact for a number of applications I was porting at the time, it was often as simple as using the icc/ifort Makefiles for Linux. What has the response been to the compilers from the Mac OS X community?</strong></p>



<p>We have been very pleased with the reaction to our tools. At WWDC 2006, in the Performance Lab, we were able to witness a number of developers trying the tools or showing us the results of using them. Many cited big performance gains from them, and are pleased with the way they are integrated and are compatible with GCC and Xcode.</p>



<p><strong>By almost every performance metric, the new Intel Core 2 microarchitecutre is a success. What are some of the new features in these CPUs that make them so powerful? What type of additional functionality has been added to the compilers to help programmers take advantage of newer features present on these CPUs?</strong></p>



<p>The key features in the Intel® Core™ 2 Duo processors are the dual-core/multi-threading capability, the SIMD execution engine for the Streaming SIMD Extensions instruction set architecture, the very advanced cache design, and the lower power consumption.</p>



<p>The compilers allow users to take advantage of multi-threading through the support of the OpenMP* standard and auto-parallelization. OpenMP (details can be found at www.openmp.org) is a directive-based application programming interface (API) that allows the user to specify which parts of the code to parallelize, such as loop nests, and how to share or protect data. The compiler converts the directives into calls to the underlying OpenMP runtime library for implementation and scheduling of the threads. Auto-parallelization is where the compiler attempts to parallelize loop nests automatically, with little direction from the user.</p>



<p>To take advantage of the SIMD capabilities, the compiler will automatically vectorize code by generating the appropriate SSE/SSE2/SSE3 or SSSE instructions utilizing the SIMD registers for parallel execution. We also pay close attention to how we optimize loop nests for memory and cache utilization.</p>



<p><strong>Scientists tend to have very computationally demanding applications. What has Intel&#8217;s approach been in the past toward scientific applications of their compiler technology? What features of the Intel developer tools do you think might be of particular use for scientific code?</strong></p>



<p>Scientific applications are typically very computationally intensive, and thus, performance sensitive applications. Therefore, we pay close attention to their application performance as it showcases the capabilities of our processors.</p>



<p>We have spent many years perfecting the capability of the compiler to vectorize the key loops of many different types of scientific applications to take advantage of the SIMD features of the Intel processors. Many such applications can be very sensitive to floating-point precision. Higher levels of optimization can impact that as we may do some optimizations such as replacing a floating-point divide or square root with a reciprocal approximation, for example. To alleviate this, we have implemented a floating-point precision vs. performance tradeoff model to allow the user to specify how much precision can be traded for additional performance. In addition, we have highly tuned our math library (libm) that implements the common transcendental functions (sin, cos, tan, exp, etc.) and other math primitives to ensure it provides the best possible precision and performance for our processors, and thus, the user’s applications.</p>



<p>The Intel® Math Kernel Library implements the commonly used linear algebra domains (BLAS, LAPACK), sparse solvers, fast-fourier transforms, and random number generators. All of these are commonly used in the scientific community. These libraries are able to dynamically detect the processor type and threading capability (number of cores and processors) of the system on which it is running to invoke best implementation of the function for that processor, and with the right number of threads. This library can save a lot of time in performance tuning and threading.</p>



<p><strong>The new Core 2 CPUs are 64-bit. A lot of scientific applications can benefit from the ability to address more than 4GB of memory (especially image processing applications). Are the Intel compilers currently capable of producing 64-bit binaries on the newer Mac Pro and iMac based systems? If not, when can we expect this functionality to be added?</strong></p>



<p>The current shipping version of the Intel compilers is version 9.1. These compilers will generate code only for 32-bit applications, thus addressable memory is ~2GB. Our next compiler version will be in preview (beta testing) by early 2007 and will support 64-bit addressing. If one wants to join the beta program, please submit your email address to us at www.intel.com/software/products/apple and someone from my team will contact you when the beta program is available.</p>



<p>Developers may want to move to 64-bit binaries even if they are not addressing over 2GB of memory. This is because the number of processor registers available with 64-bit instructions is higher in the Core 2 micro-architecture. More registers will often result in higher performance for applications since the compiler can keep more data in them versus having them in memory.</p>



<p><strong>One aspect of scientific code that many of us deal with is the massive code base that is in Fortran. Intel provides a high performance Fortran compiler. Who are some of the biggest adopters (on all platforms) for the various compiler technologies that Intel provides?</strong></p>



<p>We are pleased to have arguably the best Fortran compiler for Mac OS X. We have worked with many major software vendors and end users in the scientific computing arena. Many of the national laboratories and government agencies use our products, as do many leading research universities. Also, we’ve seen great interest from leading researchers in the bio-sciences.</p>



<p><strong>With the addition of Mac OS X to the Intel repertoire of supported platforms come additional technologies and programming languages that are unique to this particular environment. One of those languages is Objective-C. Does Intel plan to offer support for Objective-C in the future as an add-on to the C/C++ compilers?</strong></p>



<p>We are looking at adding Objective-C support, but do not have plans to support it at this point. The Xcode environment is smart enough to use our compiler for C++ and C code and direct Objective-C code to the Apple compiler. This means our lack of support does not stop developers from getting some benefit for programs using a mixture of code.</p>



<p><strong>Looking ahead, what are some of the new features that we can look forward to being added to the Intel developer tools and how will they be useful for those of us on Mac OS X, and in particular for scientists?</strong></p>



<p>We are focused on adding 64-bit support for Mac OS X this year. Additionally, even though we believe we are the best compiler anywhere for multi-threading, we are really just scratching the surface of multi-threading capabilities. We want to expand the utility of auto-parallelization to make it able to thread more loops. The Intel® Threading Build Blocks is an example of how we want to find new and more efficient ways for developers to express parallelism. It was also the first new product since we started supporting Mac OS X, and so it became the first product to debut on Mac OS X the same day as the debut on Windows and Linux.</p>



<p>We know that abstraction of thread management is important, we know making it easy to debug and tune is important – and eliminating the need to debug or tune is even better. I think we have some great ideas which will lead to more and more support for developers.</p>



<p>We want to continually improve the capability of debugging threaded and optimized code so that developers don’t have to build both debug and optimized versions.</p>



<p><strong>To many people the switch to Intel came as a big surprise, and for the majority of us, we found out during the WWDC 2005 keynote, including many people within Apple. At what level within Intel was the transition known about prior to the announcement? Can you describe some of your initial thoughts when you first found out about the switch?</strong></p>



<p>As I said above, there were just a few people in the company in senior management and key software and hardware technologists that knew about it early on. Personally, I was ecstatic. Apple is such an innovative and creative company; we knew we could learn some interesting things in working with them. It meant that I could lift my self-imposed embargo on buying a Mac for my family because it did not have an Intel processor in it.</p>



<p><strong>Of course, now that Mac&#8217;s come with Intel CPUs, do you expect to start seeing more Mac&#8217;s around the offices at Intel?</strong></p>



<p>I hope so. There is a lot of interest in that. Right now, our group is developing software for Apple machines so we definitely see a lot more Apple machines around our offices.</p>
<p>The post <a href="https://macresearch.org/interview-joe-wolf-intel-security-compiler-group/">Interview: Joe Wolf &#8211; Intel Security Compiler Group</a> appeared first on <a href="https://macresearch.org">MacResearch.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://macresearch.org/interview-joe-wolf-intel-security-compiler-group/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
