Hello every1!
The error: argument of type “float” is incompatible with parameter of type “void *” appears in the line where I call cutilSafeCall( cudaFree(someHost[i]) ). I am not getting the solution for my problem. I did it the way discribed in Romants topic.
#include<stdio.h>
#include<cuda.h>
#include<stdlib.h>
#include<cutil_inline.h>
#define N 256
__global__ void dumbKernel(float **Mx, float **My) {
__shared__ int pp;
int i = threadIdx.x + blockIdx.x * blockDim.x;
if(i < N) {
pp += i;
}
__syncthreads();
}
int main(int argc, char** argv) {
float **h_Mx;
float **h_My;
float **d_Mx;
float **d_My;
float *someHost;
size_t size_M = N * sizeof(float *);
//DEVICE-MEMORY
cutilSafeCall( cudaMalloc((void **) &d_Mx, size_M) );
cutilSafeCall( cudaMalloc((void **) &d_My, size_M) );
for(int i = 0; i < N; i++) {
cutilSafeCall( cudaMalloc((void **)&someHost[i], N * sizeof(float)) );
}
cutilSafeCall( cudaMemcpy(d_Mx, someHost, size_M, cudaMemcpyHostToDevice) );
cutilSafeCall( cudaMemcpy(d_My, someHost, size_M, cudaMemcpyHostToDevice) );
//HOST-MEMORY
h_Mx = (float **) malloc(size_M);
h_My = (float **) malloc(size_M);
for(int i = 0; i < N; i++) {
h_Mx[i] = (float *) malloc(N * sizeof(float));
h_My[i] = (float *) malloc(N * sizeof(float));
}
dumbKernel<<<1, 256>>>(d_Mx, d_My);
cutilSafeCall( cudaMemcpy(someHost, d_Mx, size_M, cudaMemcpyDeviceToHost) );
for(int i = 0; i < N; i++) {
cutilSafeCall( cudaFree(someHost[i]) );
}
cutilSafeCall( cudaFree(d_Mx) );
cutilSafeCall( cudaMemcpy(someHost, d_My, size_M, cudaMemcpyDeviceToHost) );
for(int i = 0; i < N; i++) {
cutilSafeCall( cudaFree(someHost[i]) );
}
cutilSafeCall( cudaFree(d_My) );
for(int i = 0; i < N; i++) {
free(h_Mx[i]);
free(h_My[i]);
}
return 0;
}
Thank you for looking through my code!
Regards,
A.