Saturday, October 4, 2014

cudaMemcpyAsync

First step in pinpointing illegal memory accesses in CUDA asynchronous memory transfers:

#ifdef DEBUG
#define cudaMemcpyAsync(D, S, N, T, STR) \
    (cudaMemcpy((D), (S), (N), (T)))
#endif

Wednesday, July 16, 2014

NTFS Write Support on OSX with ntfs-3g

  1. Install ntfs-3g using your favorite package manager
  2. Replace the mount command as described  here or here (tl;dr of the first link).
  3. At this point, when plugging in an NTFS formatted disk, Mavericks will complain that the fuse kernel extension is unsigned. Create a self-signed certificate.
  4. Sign the fuse kernel extension with that certificate: sudo codesign -s "NameOfTheSelfSignedCertificate" -f /opt/local/Library/Filesystems/osxfusefs.fs/Support/osxfusefs.kext (or whereever that kext resides).

Friday, April 25, 2014

PDF annotations vs LaTeX

Protip: PDF annotations do not show when including the PDF file in a LaTeX document using \includegraphics. My workaround is to annotate the PDF in question (e. g. in Apple's Preview.app) and then "Export as PDF..." from Preview.app. This causes the annotations to become part of the real document.
In case anybody was wondering why you would export a PDF as PDF.

Tuesday, May 28, 2013

Tuesday, April 9, 2013

Remote VisualVM

In my current project at work, I need to do some profiling on a Java app that runs on a server. Hooking it up to my local VisualVM (awesome tool, btw) was not immediately obvious to me, so here's the steps:

Prepare application on remote server

jstatd needs some security settings explained in [1]. Open vim, enter
grant codebase "file:${java.home}/../lib/tools.jar" {
  permission java.security.AllPermission;
};
and save as jstatd.all.policy.

Now start jstatd in the same directory, let in run in the background:
jstatd -J-Djava.security.policy=jstatd.all.policy &

Next, start the app (assuming $MY_APP is the main class) as described in [2]:
java \
 -Dcom.sun.management.jmxremote \
 -Dcom.sun.management.jmxremote.port=$JMX_PORT \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Dcom.sun.management.jmxremote.authenticate=false \
 -Djava.rmi.server.hostname=$EXTERNAL_IP \
 $MY_APP
$JMX_PORT can be any available TCP port. $EXTERNAL_IP is the server's external IP address.

Make sure that the server's firewall allows incoming connections on both TCP 1099 (jstatd) and the port you chose as $JMX_PORT.

Connect VisualVM

Start VisualVM, double click on remote. Enter the server's external IP address:

Right-click on the new connection and add a JMX connection:
Enter $EXTERNAL_IP:$JMX_PORT from above, in my case 192.168.0.160:
This should add a connection to the running app:
Double-click on it, start profiling, enjoy.

References

Sunday, February 24, 2013