Forum Discussion
Altera_Forum
Honored Contributor
8 years ago --- Quote Start --- I have that board too and I can use doubles no problem. Try to paste the code here to understand. --- Quote End ---
Host code (Visual Studio):
typedef struct ocl_block{
int score;
cl_int4 args;
cl_double sig;
cl_double val;
char padding;
} ocl_block;
....
b_dump = (ocl_block *) malloc(sizeof(ocl_block));
b_dump->score = 7;
b_dump->args.x = 67;
b_dump->args.y = 52;
b_dump->args.z = 10;
b_dump->args.w = 59;
b_dump->val= 6.141592653589793238;
b_dump->sig = 86.141592653589793238;
buf_blocks = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(ocl_block) , NULL, &status);
status = clEnqueueWriteBuffer(cmd_queue, buf_blocks, CL_TRUE, 0, sizeof(ocl_block), b_dump, 0, NULL, NULL);
buffers = buf_blocks;
Kernel code
struct __attribute__((packed)) block{
int score;
int4 args;
double sig;
double val;
char padding;
};
__kernel void cluster_k(__global struct block * restrict bb){
double hu = 3.141592653589793238;
printf("Block: score:%d\targs:%d,%d,%d,%d \n", bb->score,bb->args.s0, bb->args.s1, bb->args.s2, bb->args.s3);
printf("sizeof: %lf %f\n", hu,hu);
printf("val: %lf",bb->pvalue);
printf("sig: %lf",bb->significance);
}
I get this: Block: score:7 args:67,52,10,59 hu: 3.141593 3.141593 val: -0.000000 sig: -39273368158627109000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000.000000