69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | #include <thrust/unique.h>
 | ||
|  | #include <thrust/distance.h>
 | ||
|  | #include <thrust/system/omp/execution_policy.h>
 | ||
|  | #include <iostream>
 | ||
|  | #include "union2.h"
 | ||
|  | 
 | ||
|  | int unircpu(int *res, int rows, int tipo, int **ret) | ||
|  | { | ||
|  | 
 | ||
|  | 	//cout << "En union = " << rows << " " << tipo << endl;
 | ||
|  | 
 | ||
|  | 	s2 *t2, *re2; | ||
|  | 	s3 *t3, *re3; | ||
|  | 	int nrows, *nres; | ||
|  | 	//int size;
 | ||
|  | 
 | ||
|  | 	switch(tipo) | ||
|  | 	{ | ||
|  | 		case 1:  | ||
|  | 		{ | ||
|  | 			thrust::sort(thrust::omp::par, res, res + rows); | ||
|  | 			nres = thrust::unique(thrust::omp::par, res, res + rows); | ||
|  | 			nrows = thrust::distance(res, nres); | ||
|  | 			/*if(nrows < rows / 2)
 | ||
|  | 			{ | ||
|  | 				size = nrows * tipo * sizeof(int); | ||
|  | 				nres = (int *)malloc(size); | ||
|  | 				memcpy(nres, res, size); | ||
|  | 				free(*ret); | ||
|  | 				*ret = nres; | ||
|  | 			}*/ | ||
|  | 			return nrows;	 | ||
|  | 		}			 | ||
|  | 		case 2:  | ||
|  | 		{ | ||
|  | 			t2 = (s2*)res; | ||
|  | 			thrust::sort(thrust::omp::par, t2, t2 + rows, o2()); | ||
|  | 			re2 = thrust::unique(thrust::omp::par, t2, t2 + rows, p2()); | ||
|  | 			nrows = thrust::distance(t2, re2); | ||
|  | 			/*if(nrows < rows / 2)
 | ||
|  | 			{ | ||
|  | 				size = nrows * tipo * sizeof(int); | ||
|  | 				nres = (int *)malloc(size); | ||
|  | 				memcpy(nres, res, size); | ||
|  | 				free(*ret); | ||
|  | 				*ret = nres; | ||
|  | 			}*/ | ||
|  | 			return nrows; | ||
|  | 		} | ||
|  | 		case 3:  | ||
|  | 		{ | ||
|  | 			t3 = (s3*)res; | ||
|  | 			thrust::sort(thrust::omp::par, t3, t3 + rows, o3()); | ||
|  | 			re3 = thrust::unique(thrust::omp::par, t3, t3 + rows, p3()); | ||
|  | 			nrows = thrust::distance(t3, re3); | ||
|  | 			/*if(nrows < rows / 2)
 | ||
|  | 			{ | ||
|  | 				size = nrows * tipo * sizeof(int); | ||
|  | 				nres = (int *)malloc(size); | ||
|  | 				memcpy(nres, res, size); | ||
|  | 				free(*ret); | ||
|  | 				*ret = nres; | ||
|  | 			}*/ | ||
|  | 			return nrows; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return 0; | ||
|  | } |