Я пытаюсь преобразовать следующий код c в CUDA .... В следующем коде у меня есть массив элементов [12, 13, 23, 24, 25] ... Я хочу выход, как [123, 234, 234, 245] .. Вы получите логику, посмотрев на код ...выбрать выбранные элементы после выполнения в ядре CUDA
#include <stdio.h>
#define N 5
int main(){
int i,j;
int array[N] = { 12, 13, 23, 24, 25};
int new_array[(N-1)*N/2] = { 0 };
int k=0;
for (i = 0; i < N; i++)
for(j = i+1; j < N; j++)
{
if((array[i]-array[i]%10) == (array[j]-array[j]%10))
{
new_array[i*N+(j-(i+1))-(i)*(i+1)/2] = array[i]*10 + array[j]%10;
k++;
}
}
for (i = 0; i < (N-1)*N/2; i++) printf("new_array[%d] = %d\n", i, new_array[i]);
return 0;
}
Теперь проблема возникает, когда я пытаюсь его конвертировать в CUDA ядра ... Я получаю что-то в выходе, но я не знаю, как выбирать селективные элементы и хранить его в массиве ...
#include <stdio.h>
#define N 5
__global__ void kernel(int* new_array_d, int* array_d) {
int i = threadIdx.x;
int j = threadIdx.y;
if (j > i && (array_d[i]-(array_d[i]%10)) == (array_d[j]-(array_d[j]%10)))
new_array_d[i*N+(j-(i+1))-(i)*(i+1)/2] = array_d[i]*10 + (array_d[j]%10);
}
int main(){
int array[N] = { 12, 13, 23, 24, 25};
int new_array[N-1)*N/2] = { 0 };
int* array_d; cudaMalloc((void**)&array_d,N*sizeof(int));
int* new_array_d; cudaMalloc((void**)&new_array_d,(N-1)*N/2*sizeof(int));
cudaMemcpy(array_d,array,N*sizeof(int),cudaMemcpyHostToDevice);
dim3 grid(1,1);
dim3 block(N,N);
kernel<<<grid,block>>>(new_array_d,array_d);
cudaMemcpy(new_array,new_array_d,(N-1)*N/2*sizeof(int),cudaMemcpyDeviceToHost);
for (int i = 0; i < (N-1)*N/2; i++) printf("new_array[%d] = %d\n", i, new_array[i]);
return 0;
}
Должен ли я попробовать другой индекс или делать это только на процессоре ... ?? Пожалуйста, помогите мне ... Thnks заранее ...
пожалуйста Примечание: Я пытаюсь объединить элементы 12 и 13, только если число, кроме единицы место такое же ... 12 и 13 .. .. (есть 1 общий) ... делаем 12 * 10 + (13% 10) = 123
23 и 25 ..... (есть 2 общий) ... делаем 23 * 10 + (25% 10) = 235 ...
Если вы собираетесь для публикации кода, по крайней мере, сделать эффект t, чтобы убедиться, что он компилируется ... – talonmies
да. Я позабочусь ... спасибо за предложение – user3319055