Jason Worth Martin
Assistant Professor of Mathematics

Department of Mathematics and Statistics
113 Roop Hall
MSC 1911
James Madison University
Harrisonburg, Virginia 22807

Voice: (540) 568-5101
Fax: (540) 568-6857
Email: MyUserName@math.jmu.edu
(my user name is just my last name with no capitalization)

If you need to send me an encrypted message, please use my GPG public key. The key's fingerprint is:

37EE A97A 15E7 5ACB 4B1E A47E CF8C 1250 0561 FA7A

Of course, anyone who could hack this web server could replace both the key and finger print,so if you're really paranoid you can call me to confirm the key finger print.


Teaching (Spring 2008)

Math 205: Introductory Calculus I

Math 430: Abstract Algebra

Office Hours

Day of Week Time Class Priority
Mon. 7:00am-8:00am Math 205
10:00am-11:00am Math 430
Weds. 7:00am-8:00am Math 430
10:00am-11:00am Math 205
Thurs. 7:00am-8:00am Math 430
Fri. 7:00am-8:00am Math 205

Any of my students are welcome to come to any of my office hours. However, since Math 205 students might not want to waste their time listening to me explain problems to my Math 430 students (and vice versa), I have broken my office hours into different "priority slots." So, if a Math 430 student comes to a Math 205 office hour priority slot, then she must wait until I finish answering all the questions from the Math 205 students present (and vice versa).

Please note that JMU professors are only required to hold five hours of office hours each week. I am holding six hours worth! I have intentionally scheduled many office hours at 7:00am where I know that they will not conflict with other courses, band practice, etc. even though I am most certainly not a morning person. I'm doing this for you! Wake up and take advantage of it!!

Math 205 students can also get help from the Science and Math Learning Center . Math 430 students really shouldn't harass the Learning Center folks with their homework problems, but if it's a slow day in the Learning Center perhaps someone can help you (but don't count on it).


Science and Math Learning Center

Are you a Math 205 student who needs help and can't make it to office hours? Try the Science and Math Learning Center. The Center, located in Roop 200, is a great place to get help with your homework or brush up on that chapter that you really didn't understand. See the web page for hours of operation.

Research

Number Theory

I received my PhD in August, 2006 under the direction of Ravi Ramakrishna. For my dissertation, I found new upper bounds on Martinet Constants which describe how we expect discriminants to grow in number fields. For a PDF-slide show that describes the results, click here.

I'm also developing a library to do linear algebra over exact rings (for example, computing the Smith Normal Form of a matrix over a Dedekind Domain) on massively parallel systems. I'm starting with LinBox, and adding MPI calls to the dense linear algebra subroutines. Hopefully this will be useful to projects such as SAGE . If you are working on something similar or want to help, please let me know!

Papers

Improved Bounds for Discriminants of Number Fields (Submitted)


GMP for Intel Core 2 (Intel64) Machines (Including Core 2 Mac OS X machines)

Download Here

GMP is the GNU Multi Precision Library. It is the heart of most computational number theory packages. The official GMP distribution is available at http://www.gmplib.org (Please send questions and bug reports about this patch to me. Please do not bother the GMP developers!)

GMP has been ported to many platforms, but since the Intel Core 2 processors are fairly new, the official GMP distribution has not yet been optimized for these CPUs. The official distribution also does not compile on Core 2 Mac OS X machines. Hopefully, this patch corrects this!

GMP is extremely high quality, modular, software (and it is released under the GNU LGPL), so I was able to create a patch that will allow it to compile on Core 2 Macs. This patch also offers a significant speed up (about 30%), and this speed up works for Linux Core 2 machines as well. For details, download the tarball here.

I have been able to get a GMPbench score of over 8260 with this code on my 2.66 GHz Mac Pro, which you can compare to existing results on the GMPbench page.

If you were looking for the GMP patch for AMD64 processors, such as the Athlon and Opteron, then check out Pierrick Gaudry's work. He has some very clever assembly code that I used as a starting point for the Core 2 patch.

If you want to see a very nice exposition of how these routines work, see Eric Bainville's work.

If you want to see the single best guide to optimizing assembly code, take a look at Agner Fog's work.

Here are answers to some questions I've received:

  1. Intel64 is Intel's new catch-all name for processors using the Core 2 micro-architecture. So, any CPU labeled Intel64 can use this patch.
  2. Newer model Xeon processors (such as those in the Mac Pro) are Core 2 chips. Older Xeons use a different micro-architecture and cannot use this patch.
  3. The "Intel Core 2 Duo" is a Core 2 processor. However, the "Intel Core Duo" is not. The patch will not work on "Core Duo" machines because those CPUs are only 32 bit processors.
  4. If your results in GMPbench don't seem to change, make sure that you are linking against the correct library! For example, RedHat has copies of the gmp libraries in /usr/lib64 which may be picked up before /usr/local/lib.
  5. I have now included an installation script that will detect the CPU that your machine is using. This way, the patch only gets installed on Core 2 machines.
  6. By default, my code uses the lahf/sahf instructions. These instructions work on AMD64 and Intel64 processors. However, the Pentium4 and older Xeon processors do not support lahf/sahf. So, if you use my code to compile a binary on an Intel64 machine, don't expect that binary to run on a Pentium4. This is a deliberate choice because the lahf/sahf instructions provide the fastest method for saving the carry flag on Intel64 processors (other common methods such as conditional moves, bit tests, and add-with-carry can create a false dependency on the carry flag with nearby arithemetic operations thus adding latency to a critical loop). I am considering re-writing this section of code to eliminate the lahf/sahf instruction, but I don't want to sacrifice any speed.
  7. Yes, I have given my code to the GMP maintainers. However, don't expect my code in the official GMP release anytime soon for exactly the reason given above (the lahf/sahf instructions).
  8. While I certainly appreciate employment/contracting offers to make this patch work in {whatever your project is}, I must decline because my principle obligation is to Jame Madison University. However, if you send your request to the GMP mailing list (see the official GMP website), you will most likely find individuals who can work on a contract basis to help you out. Good luck!