[問題] CUDA bitonic 輸入陣列無法排序

看板C_and_CPP (C/C++)作者 (aada)時間16年前 (2010/02/08 22:21), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
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
沒有bitonic_kernel.cu沒辦法幫你測試啊
02/10 21:35, 1F
文章代碼(AID): #1BS1tvHx (C_and_CPP)
文章代碼(AID): #1BS1tvHx (C_and_CPP)