Software

Perl

Assembler Snippets

Reading processor time stamp counter on x86

TSC(time stamp counter) is a register incremented every cpu tick (1/CPU_HZ) and it's read by the RDTSC instruction. The CPUID instructions clear out the pipeline and avoid any parallelism.

#define GETCC(_ll_) \
	asm volatile("cpuid" : : : "eax", "ebx", "ecx", "edx"); \
	asm volatile("rdtsc" : "=A"(_ll_));                     \
	asm volatile("cpuid" : : : "eax", "ebx", "ecx", "edx");

Sample

unsigned long long cc1, cc2, elapsed;
GETCC(cc1);
/*... do something ...*/	
GETCC(cc2);
elapsed = (cc2 - cc1);

Sum of the floats in a xmms register

#define REDUCE_XMMS(_r_, _tmp_) \
	asm volatile(\
		"movhlps %[r], %"_tmp_"       \n\t"\
		"addps   %"_tmp_", %[r]       \n\t"\
		"movaps  %[r], %"_tmp_"       \n\t"\
		"shufps  $1, %[r], %"_tmp_"   \n\t"\
		"addss   %"_tmp_", %[r]       \n\t"\
     		: [r] "+x" (_r_) : :  _tmp_); 

Python

Sample multicast client/server

Tested both on Win32 and Linux (beware of firewalls!)


import socket
import struct
import sys

port = 6543
address = "239.100.100.12"

if sys.argv[1] == 'server':
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    try:
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
    except AttributeError:
        pass # Some systems don't support SO_REUSEPORT
    
    sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_TTL, 255)
    sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, 1)

    sock.bind(('0.0.0.0', port))
    intf = socket.gethostbyname(socket.gethostname())
    sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF,
                    socket.inet_aton(intf)  + socket.inet_aton('0.0.0.0'));
    sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP,
                    socket.inet_aton(address) + socket.inet_aton('0.0.0.0'));

    while True:
        data = sock.recvfrom(1024)
        print data
else:
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
    sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_TTL, 255)
    sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, 1)

    sock.sendto(sys.argv[2], (address, port))

Misc