A SIMT Interpreter forGenetic Programming

W. B. Langdon
CREST lab,
Department of Computer Science

CIGPU 2009

Introduction

Submachine Code GP

Randomised Samples

Reverse Polish Interpreter

Reverse Polish interpreter

RPN interpreters

int SP = 0;
for(unsigned int PC = 0;; PC++){
Read opcode from global/constant
if(OPCODE==OPNOP) break;
if(optype==leaf) push(trainingdata);
else { //function
const unsigned int sp1 = stack(SP-1);
const unsigned int sp2 = stack(SP-2);
SP -= 2;
if(      optype==OPAND) push(AND(sp1,sp2));
else if(optype==OPOR) push(  OR(sp1,sp2));
//NAND, NOR negate top of stack
}}
int SP = 0;
for(unsigned int PC = 0;; PC++){
Read opcode from global/constant
if(OPCODE==OPNOP) break;
top(leaf) = trainingdata;
const unsigned int sp1 = stack(SP-1);
const unsigned int sp2 = stack(SP-2);
top(OPAND) = AND(sp1,sp2);
top(OPOR)  =  OR(sp1,sp2);
SP += delta[optype];
stack(SP-1) = top(optype);
//NAND, NOR negate top of stack
}
An Almost Branchless GP Interpreter for CUDA

(Almost) Branchless Interpreter

Validation

Performance v RPN size

GP op/sec 20 and 37 Multiplexor

Performance

Discussion

Conclusions

Code via ftp

http://www.cs.ucl.ac.uk/staff/W.Langdon/ftp/gp-code/gp32cuda.tar.gz