| 91 | } |
| 92 | |
| 93 | int main() |
| 94 | { |
| 95 | unsigned int size = 1024; |
| 96 | // wSize must be odd |
| 97 | unsigned int wSize = 21; |
| 98 | // get the default device |
| 99 | compute::device device = compute::system::default_device(); |
| 100 | // create a context for the device |
| 101 | compute::context context(device); |
| 102 | // get the program |
| 103 | compute::program program = make_sma_program(context); |
| 104 | |
| 105 | // create vector of random numbers on the host |
| 106 | std::vector<float> host_vector(size); |
| 107 | std::vector<float> host_result(size); |
| 108 | std::generate(host_vector.begin(), host_vector.end(), myRand); |
| 109 | |
| 110 | compute::vector<float> a(size,context); |
| 111 | compute::vector<float> b(size,context); |
| 112 | compute::vector<float> c(size,context); |
| 113 | compute::command_queue queue(context, device); |
| 114 | |
| 115 | compute::copy(host_vector.begin(),host_vector.end(),a.begin(),queue); |
| 116 | |
| 117 | // scan values |
| 118 | compute::inclusive_scan(a.begin(),a.end(),b.begin(),queue); |
| 119 | // sma kernel |
| 120 | compute::kernel kernel(program, "SMA"); |
| 121 | kernel.set_arg(0,b.get_buffer()); |
| 122 | kernel.set_arg(1,(int)b.size()); |
| 123 | kernel.set_arg(2,c.get_buffer()); |
| 124 | kernel.set_arg(3,(int)wSize); |
| 125 | |
| 126 | using compute::uint_; |
| 127 | uint_ tpb = 128; |
| 128 | uint_ workSize = size; |
| 129 | queue.enqueue_1d_range_kernel(kernel,0,workSize,tpb); |
| 130 | |
| 131 | compute::copy(c.begin(),c.end(),host_result.begin(),queue); |
| 132 | |
| 133 | bool res = check_results(host_vector,host_result,wSize); |
| 134 | std::string status = res ? "results are equivalent" : "GPU results differs from CPU one's"; |
| 135 | std::cout << status << std::endl; |
| 136 | |
| 137 | return 0; |
| 138 | } |
| 139 |
nothing calls this directly
no test coverage detected