19-10-2011, 13:25
|
|
|
חבר מתאריך: 01.07.03
הודעות: 2,466
|
|
מציאת מספר מינימאלי בעזרת CUDA
חג שמח לכולם , יש לי בעיה שאני כבר כמה ימים שובר עליה את הראש ולא מצליח לפתור אותה , אני מנסה בעזרת קודה למצוא מספר מינימאלי במערך, אבל משום מה זה לא עובד . אין לי מושג למה ואיך , ואין לי בכלל אפשרות לדבר את זה ,
במידה ואתם רואים משהו מוזר בקוד או שקיים פתרן קיים שאפשר לכוון אליו אשמח לקבל
תודה
הפתרון מוצג באמצעות אלגוריתם Reduction
קוד:
__global__ void findMin(float4 *inPoints,float4 *outPoint,int n)
{
extern __shared__ float4 sdata[];
// load shared mem
unsigned int tid = threadIdx.x;
unsigned int i = blockIdx.x*blockDim.x + threadIdx.x;
float4 infinitePoint;
infinitePoint.w = 9999;
sdata[tid] = inPoints[i];
__syncthreads();
int nTotalThreads = blockDim.x;
while (nTotalThreads > 1)
{
int halfPoint = (nTotalThreads >> 1);
if (threadIdx.x < halfPoint)
{
float4 temp = sdata[threadIdx.x + halfPoint];
if ( temp.w < sdata[threadIdx.x + halfPoint].w)
sdata[threadIdx.x] = temp;
}
__syncthreads();
nTotalThreads /=2;
}
if ( tid == 0)
*outPoint = sdata[0];
_____________________________________
_
אני הלוחם של היום והלויס ליין של המחר
|