Articles of cuda

¿Debería unificar dos kernels similares con una statement ‘if’, arriesgando la pérdida de rendimiento?

Tengo 2 funciones de kernel muy similares, en el sentido de que el código es casi el mismo, pero con una ligera diferencia. Actualmente tengo 2 opciones: Escribe 2 métodos diferentes (pero muy similares) Escriba un kernel único y coloque los bloques de código que difieren en una instrucción if / else ¿Cuánto afectará una […]

cómo vincular la biblioteca (por ejemplo, CUBLAS, CUSPARSE) para CUDA en Windows

Estoy intentando comstackr un progtwig cuda que usa la biblioteca cusparse. Estoy recibiendo un error de enlace: kernel.cu.obj : error LNK2019: unresolved external symbol _cusparseSetMatIndexBase@8 referenced in function _main Y muchos errores del mismo tipo relacionados con la biblioteca cusparse. He incluido “cusparse_v2.h”. ¿Cómo conecto la biblioteca cusparse en visual studio 2010 durante la comstackción?

Cuda atomics cambiar la bandera

Tengo un código de serie que hace algo como esto if( ! variable ) { do some initialization here variable = true; } Entiendo que esto funciona perfectamente bien en serie y solo se ejecutará una vez. ¿Qué operación atómica sería la correcta aquí en CUDA?

Cuda C – Error del enlazador – referencia indefinida

Estoy teniendo dificultades para comstackr un progtwig simple de cuda con solo dos archivos. El main.c se ve así: #include “my_cuda.h” int main(int argc, char** argv){ dummy_gpu(); } La cuda.h se ve así: #ifndef MY_DUMMY #define MY_DUMMY void dummy_gpu(); #endif Y el archivo my_cuda.cu pierde así: #include #include “my_cuda.h” __global__ void dummy_gpu_kernel(){ //do something } […]

¿Cuál es el propósito de usar múltiples banderas “arch” en el comstackdor NVCC de Nvidia?

Recientemente me he enterado de cómo NVCC comstack código de dispositivo CUDA para diferentes architectures de cálculo. Desde mi punto de vista, al usar la opción de código de NVCC, “arco” es la architecture informática mínima requerida por la aplicación del progtwigdor, y también la architecture mínima de cálculo del dispositivo que el comstackdor JIT […]

¿Por qué nvcc no puede comstackr un archivo CUDA con boost :: spirit?

Estoy tratando de integrar CUDA a una aplicación existente que usa boost :: spirit. Al aislar el problema, descubrí que el siguiente código no se puede copiar con nvcc: main.cu : #include int main(){ exit(0); } Comstackndo con nvcc -o cudaTest main.cu Recibo muchos errores que se pueden ver aquí . Pero si cambio el […]

Problemas al iniciar kernels CUDA a partir del código de inicialización estático

Tengo una clase que llama un núcleo en su constructor, de la siguiente manera: “ScalarField.h” #include void ERROR_CHECK(cudaError_t err,const char * msg) { if(err!=cudaSuccess) { std::cout << msg << " : " << cudaGetErrorString(err) << std::endl; std::exit(-1); } } class ScalarField { public: float* array; int dimension; ScalarField(int dim): dimension(dim) { std::cout << "Scalar Field" […]

¿Cómo usar Thrust para ordenar las filas de una matriz?

Tengo una matriz de 5000×500 y quiero ordenar cada fila por separado con cuda. Puedo usar arrayfire, pero esto es solo un ciclo for over the thrust :: sort, que no debería ser eficiente. https://github.com/arrayfire/arrayfire/blob/devel/src/backend/cuda/kernel/sort.hpp for(dim_type w = 0; w < val.dims[3]; w++) { dim_type valW = w * val.strides[3]; for(dim_type z = 0; z […]

Copiando una estructura que contiene punteros al dispositivo CUDA

Estoy trabajando en un proyecto donde necesito mi dispositivo CUDA para hacer cálculos en una estructura que contiene punteros. typedef struct StructA { int* arr; } StructA; Cuando asigno memoria para la estructura y luego la copio en el dispositivo, solo copiará la estructura y no el contenido del puntero. En este momento estoy trabajando […]

¿Cómo usar matrices 2D en CUDA?

Soy nuevo en CUDA. Cómo asignar una matriz 2D de tamaño MXN?. Cómo atravesar esa matriz en CUDA ?. Dame un código de muestra. ………………………………………….. …………………………………… Hola … Gracias por responder. Usé tu código en el siguiente progtwig. Pero no estoy obteniendo resultados correctos. __global__ void test(int A[BLOCK_SIZE][BLOCK_SIZE], int B[BLOCK_SIZE][BLOCK_SIZE],int C[BLOCK_SIZE][BLOCK_SIZE]) { int i = […]