Blue screen My little program crashes and give me a blue screen of the death


I’m trying to write a little program that sort a population (a vector) of people. The people are defined by a custom structure containing a string (name) and an integer (fitness).

My problem here is in the device function (global sort_Device). Each thread executes a loop that compare the fitness of one person to all the others one, and increment a comparison value integer if it’s higher.

The problem comes from this loop. When the population_size is small (100 or 200), there is no problem. But if I set the population_size at a high value (100000 for example), the program freeze and sometimes my computer crashes and give me a blue screen of the death. The blue screen reports an error due to the graphic driver.

Here is my code :

#include <iostream>

#include <windows.h>

#include <math.h>

#include <string>

#include <vector>

#include <algorithm>

#include <time.h>

#include <cutil_inline.h>

#include <cuda.h>

using namespace std;

#define BLOCK_SIZE	256


//Custom structure definition

struct prgm_structure


	string name;

	unsigned int fitness;


typedef vector<prgm_structure> prgm_vector;


void initialisation_population(prgm_vector &population) 


	int string_size = 3;

	for (int i = 0; i < PRGM_POPULATION_SIZE; i++)


		prgm_structure someone;;

		for (int j = 0; j < string_size; j++)

		{ += (rand() % 90) + 32; //Generate a char, between the char 32 to 122 of the ASCII CODE

		} = (rand() % 100); //Generate a integer between 0 to 100





__global__ void sort_Device(prgm_structure* population, unsigned int* comp)


	int bID = blockIdx.x;

	int tID = threadIdx.x;

	int thread_number = bID * blockDim.x + tID;

	//Control if the thread is usefull

	if (thread_number >= PRGM_POPULATION_SIZE)




	//Initialisation of the comparaison value

	comp[thread_number] = 0;

	//Comparison of the current fitness to all the others

	//If the current fitness is higher than another, it increments the comparison value

	for (int i=0; i<PRGM_POPULATION_SIZE; i++)


		if (comp[thread_number] >= population[i].fitness)


			comp[thread_number] = comp[thread_number] + 1;




void sort_Host(prgm_vector &population)


	unsigned int size;

	//Load population on the device

	prgm_structure* population_Device;

	size = PRGM_POPULATION_SIZE * sizeof(prgm_structure);

	cudaMalloc((void**)&population_Device, size);

	cudaMemcpy(population_Device, &population[0], size, cudaMemcpyHostToDevice);

	//Allocation of a a array of integers on the device

	unsigned int* comp_Device;

	size = PRGM_POPULATION_SIZE * sizeof(unsigned int);

	cudaMalloc((void**)&comp_Device, size);

	//Call of the GPU sorting funtion


	dim3 dimBlock(BLOCK_SIZE);

	sort_Device<<<dimGrid, dimBlock>>>(population_Device, comp_Device);




void main()


	//Declaration of vector

	prgm_vector population_a;

	//Initialisation of vector



	//Declaration of pointers to the vector

	prgm_vector *population;

	population = &population_a;

	//Call of the sorting funtion


	/*for (int i=0; i<PRGM_POPULATION_SIZE; i++)

		cout << "People : " << population_a[i].name << "	Fitness : " << population_a[i].fitness << flush << endl;*/



This is the part of the code that creates the problem :

for (int i=0 ; i<PRGM_POPULATION_SIZE ; i++)


if (comp[thread_number] >= population[i].fitness)


	<b>comp[thread_number] = comp[thread_number] + 1;</b>



Can you please have a look at this code and say me if you see what is the problem with it?

Can you test it on your computer and say me if the same crash occurs?

Note that if you comment the line in red and bold, the problem disappears.

Thank you very much :thumbup: