All pastes #2057086 Raw Edit

Stuff

public c v1 · immutable
#2057086 ·published 2011-05-11 22:47 UTC
rendered paste body
__global__ static void SzimulacioKernel(int* ELETTER, int* ELETKOR, int* EHSEG, int* SZAPOR, int* LEPETT){	int x = blockIdx.x * blockDim.x + threadIdx.x;	int y = blockIdx.y * blockDim.y + threadIdx.y;	if (x < NX && y < NY && x % 3 == 1 && y % 3 == 1) {		switch (ELETTER[x+y*NX])		{		case ELEM_FU:			if (ELETKOR[x+y*NX] > MH_FU) {				ELETTER[x+y*NX] = ELEM_SEMMI;			} else {				ELETKOR[x+y*NX]++;				if (SZAPOR[x+y*NX] > SZ_FU) {					int koord[8];					int index = -1;					for (int i = -1; i <= 1; i++) {						for (int j = -1; j <= 1; j++) {							if (i == 0 && j == 0) continue;							int p = (x+i)+(y+j)*NX;							if (ELETTER[p] == ELEM_SEMMI) {								index++;								koord[index] = p;							}						}					}													if (index > -1) {						int choosenIndex = rand() % (index + 1);						ELETTER[koord[choosenIndex]] = ELEM_FU;						SZAPOR[koord[choosenIndex]] = 0;						ELETKOR[koord[choosenIndex]] = 0;						SZAPOR[x+y*NX] = 0;					}				} else {					SZAPOR[x+y*NX]++;				}			}			break;		case ELEM_KECSKE:			if (ELETKOR[x+y*NX] > MH_KECSKE || EHSEG[x+y*NX] > EH_KECSKE) {				ELETTER[x+y*NX] = ELEM_SEMMI;			} else {				ELETKOR[x+y*NX]++;				if (SZAPOR[x+y*NX] > SZ_KECSKE) {					int koord[8];					int index = -1;					for (int i = -1; i <= 1; i++) {						for (int j = -1; j <= 1; j++) {							if (i == 0 && j == 0) continue;							int p = (x+i)+(y+j)*NX;							if (ELETTER[p] == ELEM_SEMMI) {								index++;								koord[index] = p;							}						}					}													if (index > -1) {						int choosenIndex = rand() % (index + 1);						ELETTER[koord[choosenIndex]] = ELEM_KECSKE;						SZAPOR[koord[choosenIndex]] = 0;						ELETKOR[koord[choosenIndex]] = 0;						EHSEG[koord[choosenIndex]] = 0;						LEPETT[koord[choosenIndex]] = 1;						SZAPOR[x+y*NX] = 0;					}											} else {					SZAPOR[x+y*NX]++;					if (EHSEG[x+y*NX] > ESZ_KECSKE) {						int koord[8];						int index = -1;						for (int i = -1; i <= 1; i++) {							for (int j = -1; j <= 1; j++) {								if (i == 0 && j == 0) continue;								int p = (x+i)+(y+j)*NX;															if (ELETTER[p] == ELEM_FU) {									index++;									koord[index] = p;								}							}						}														if (index > -1) {							int choosenIndex = rand() % (index + 1);							ELETTER[x+y*NX] = ELEM_SEMMI;							ELETTER[koord[choosenIndex]] = ELEM_KECSKE;							EHSEG[koord[choosenIndex]] = 0;							SZAPOR[koord[choosenIndex]] = SZAPOR[x+y*NX];							ELETKOR[koord[choosenIndex]] = ELETKOR[x+y*NX];                                                        LEPETT[x+y*NX] = 1;						} else {							goto mozog_k;						}					} else {						mozog_k:						if (!LEPETT[x+y*NX]) {							LEPETT[x+y*NX] = 1;							EHSEG[x+y*NX]++;							int koord[8];							int index = -1;							for (int i = -1; i <= 1; i++) {								for (int j = -1; j <= 1; j++) {									if (i == 0 && j == 0) continue;									int p = (x+i)+(y+j)*NX;									if (ELETTER[p] == ELEM_SEMMI) {										index++;										koord[index] = p;									}								}							}							if (index > -1) {								int choosenIndex = rand() % (index + 1);								ELETTER[x+y*NX] = ELEM_SEMMI;								ELETTER[koord[choosenIndex]] = ELEM_KECSKE;								EHSEG[koord[choosenIndex]] = EHSEG[x+y*NX];								SZAPOR[koord[choosenIndex]] = SZAPOR[x+y*NX];								ELETKOR[koord[choosenIndex]] = ELETKOR[x+y*NX];							}						}					}				}			}			break;		case ELEM_FARKAS:			if (ELETKOR[x+y*NX] > MH_FARKAS || EHSEG[x+y*NX] > EH_FARKAS) {				ELETTER[x+y*NX] = ELEM_SEMMI;			} else {				ELETKOR[x+y*NX]++;				if (SZAPOR[x+y*NX] > SZ_FARKAS) {					int koord[8];					int index = -1;					for (int i = -1; i <= 1; i++) {						for (int j = -1; j <= 1; j++) {							if (i == 0 && j == 0) continue;							int p = (x+i)+(y+j)*NX;							if (ELETTER[p] == ELEM_SEMMI) {								index++;								koord[index] = p;							}						}					}													if (index > -1) {						int choosenIndex = rand() % (index + 1);						ELETTER[koord[choosenIndex]] = ELEM_FARKAS;						SZAPOR[koord[choosenIndex]] = 0;						ELETKOR[koord[choosenIndex]] = 0;						EHSEG[koord[choosenIndex]] = 0;						LEPETT[koord[choosenIndex]] = 1;						SZAPOR[x+y*NX] = 0;					}				} else {					SZAPOR[x+y*NX]++;					if (EHSEG[x+y*NX] > ESZ_FARKAS) {						int koord[8];						int index = -1;						for (int i = -1; i <= 1; i++) {							for (int j = -1; j <= 1; j++) {								if (i == 0 && j == 0) continue;								int p = (x+i)+(y+j)*NX;								if (ELETTER[p] == ELEM_KECSKE) {									index++;									koord[index] = p;								}							}						}						if (index > -1) {							int choosenIndex = rand() % (index + 1);							ELETTER[x+y*NX] = ELEM_SEMMI;							ELETTER[koord[choosenIndex]] = ELEM_FARKAS;							EHSEG[koord[choosenIndex]] = 0;							SZAPOR[koord[choosenIndex]] = SZAPOR[x+y*NX];							ELETKOR[koord[choosenIndex]] = ELETKOR[x+y*NX];                                                        LEPETT[x+y*NX] = 1;						} else {							goto mozog_f;						}					} else {						mozog_f:						if (!LEPETT[x+y*NX]) {							LEPETT[x+y*NX] = 1;							EHSEG[x+y*NX]++;							int koord[8];							int index = -1;							for (int i = -1; i <= 1; i++) {								for (int j = -1; j <= 1; j++) {									if (i == 0 && j == 0) continue;									int p = (x+i)+(y+j)*NX;									if (ELETTER[p] == ELEM_SEMMI) {										index++;										koord[index] = p;									}								}							}							if (index > -1) {								int choosenIndex = rand() % (index + 1);								ELETTER[x+y*NX] = ELEM_SEMMI;								ELETTER[koord[choosenIndex]] = ELEM_FARKAS;								EHSEG[koord[choosenIndex]] = EHSEG[x+y*NX];								SZAPOR[koord[choosenIndex]] = SZAPOR[x+y*NX];								ELETKOR[koord[choosenIndex]] = ELETKOR[x+y*NX];							}						}					}				}			}			break;		default:			break;		}	}}