[問題] CUDA bitonic 輸入陣列無法排序
CUDA bitonic 輸入陣列無法排序
請問板上的大大,
我目前在試CUDA SDK中的bitonic的程式, 在程式中有一段是隨機產生陣列,
於是我將那部分直接改成,我自己輸入的,在編譯時是沒有錯的,
但是為什麼我自己產生的陣列的排序是錯的,
我自己輸入的跟隨機產生的data,照理來講應該都一樣吧(值會不一樣)一個值填到一個位
置上,
以下是我的程式碼, 謝謝
#include <stdio.h>
#include <stdlib.h>
#include <cutil.h>
#include "bitonic_kernel.cu"
int main( )
{
CUT_DEVICE_INIT();
//float values[NUM]={5.6, 2.6, 7.1, 2.5, 0.6}; <--------------輸入陣列
float values[NUM];
int position[NUM];
for(int i = 0; i < NUM; i++)
{
//values[i] = rand() % 10; <--------------隨機產生陣列
position[i] = i;
printf("%8.4f (%d)\n", values[i], position[i]);
}
Fprint_Matrix(values);
float * dvalues;
int *dposition;
CUDA_SAFE_CALL(cudaMalloc((void**)&dvalues, sizeof(float) * NUM));
CUDA_SAFE_CALL(cudaMalloc((void**)&dposition, sizeof(int) * NUM));
CUDA_SAFE_CALL(cudaMemcpy(dvalues, values, sizeof(float) * NUM,
cudaMemcpyHostToDevice));
CUDA_SAFE_CALL(cudaMemcpy(dposition, position, sizeof(int) * NUM,
cudaMemcpyHostToDevice));
bitonicSort<<<1, NUM, sizeof(int) * NUM>>>(dvalues, dposition);
// check for any errors
CUT_CHECK_ERROR("Kernel execution failed");
//int values2[NUM];
//int position2[NUM];
float *values2;
values2 = (float*) malloc( sizeof(float)*NUM );
int *position2;
position2 = (int*) malloc( sizeof(int)*NUM );
CUDA_SAFE_CALL(cudaMemcpy(values2, dvalues, sizeof(float) * NUM,
cudaMemcpyDeviceToHost));
CUDA_SAFE_CALL(cudaMemcpy(position2, dposition, sizeof(int) * NUM,
cudaMemcpyDeviceToHost));
CUDA_SAFE_CALL(cudaFree(dvalues));
CUDA_SAFE_CALL(cudaFree(dposition));
bool passed = true;
for(int i = 1; i < NUM; i++)
{
if (values2[i-1] > values2[i])
{
passed = false;
}
}
printf( "Test %s\n", passed ? "PASSED" : "FAILED");
for(int i = 0; i < NUM; i++)
{
printf("%8.4f (%d)\n", values2[i], position2[i]);
}
// CUT_EXIT(argc, argv);
system("PAUSE");
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.229.57
→
02/10 21:35, , 1F
02/10 21:35, 1F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章