Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "cuda_runtime.h"
- #include "device_functions.h"
- #include "device_launch_parameters.h"
- #include <stdio.h>
- #include "stdlib.h"
- #define BLOCK_SIZE 8
- #define TH 1e-6
- #define N 128
- __global__ void getSolCount(float *valuesX, float *valuesY, float *answers01)
- {
- int i = blockIdx.x * blockDim.x + threadIdx.x;
- __shared__ float temp[BLOCK_SIZE];
- float leftVal = __cosf(valuesX[i] + TH) * __sinf(valuesX[i] / TH);
- float rightVal = __cosf(valuesY[i] + TH) * __sinf(valuesY[i] / TH);
- if (leftVal * rightVal < 0)
- {
- temp[threadIdx.x] = 1.0;
- }
- else
- {
- temp[threadIdx.x] = 0.0;
- }
- __syncthreads();
- i = blockIdx.x * blockDim.x + threadIdx.x;
- answers01[i] = temp[threadIdx.x];
- }
- __host__ int main()
- {
- float a = 0.0, b = 2 * 3.14;
- float *coordArrX = new float[N];
- float *coordArrY = new float[N];
- float *answers01_host = new float[N];
- float hi = (b - a) / N;
- for (int i = 0; i < N; i++)
- {
- coordArrX[i] = i * hi;
- coordArrY[i] = (i + 1) * hi;
- printf("x=%f y=%f\n", coordArrX[i], coordArrX[i]);
- }
- system("pause");
- float *answers01;
- float *valuesX;
- float *valuesY;
- cudaMalloc((void **)&answers01, N * sizeof(float));
- cudaMalloc((void **)&valuesX, N * sizeof(float));
- cudaMalloc((void **)&valuesY, N * sizeof(float));
- cudaMemcpy(valuesX, coordArrX, N * sizeof(float), cudaMemcpyHostToDevice);
- cudaMemcpy(valuesY, coordArrY, N * sizeof(float), cudaMemcpyHostToDevice);
- dim3 gridSize = dim3(N / BLOCK_SIZE);
- dim3 blockSize = dim3(BLOCK_SIZE);
- getSolCount <<< gridSize, blockSize>>>(valuesX, valuesY, answers01);
- cudaMemcpy(answers01_host, answers01, N * sizeof(float), cudaMemcpyDeviceToHost);
- int sol_count = 0;
- for (int i = 0; i < N; i++)
- {
- total += answers01_host[i];
- if (answers01_host[i] == 1.0f)
- {
- sol_count++;
- }
- }
- printf("solutions count: %d", sol_count);
- system("pause");
- cudaFree(valuesX);
- cudaFree(valuesY);
- free(coordArrX);
- free(coordArrY);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement