Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:CUDA_full / P04_Integral / CUDA_Integral / main
.cpp#include <cstdlib>
#include <iomanip>
#include <iostream>
#include "math.h"
#include <cuda_runtime.h>
#include "integral.h"
int main()
{
// Параметры.
float a = 0.0f, b = 1.0f; // a <= x <= b
int n = 100000; // размерность сетки
float h = (b - a) / (float)n; // шаг сетки
int num_blocks = 8; // количество блоков на GPU
// Выделим память на GPU.
float * partial_sums = new float[num_blocks];
float * partial_sums_gpu;
cudaMalloc((void **) &partial_sums_gpu, num_blocks * sizeof(float));
float result_CPU = 0.0f;
float result_GPU = 0.0f;
// Запуск CPU-версии.
result_CPU = integral(a, n, h);
// Запуск GPU-версии.
result_GPU = integral_gpu(a, n, h, num_blocks, partial_sums, partial_sums_gpu);
// Тест пройден, если модуль разности результатов достаточно мал.
const float eps = 1e-4f;
if (fabsf(result_CPU - result_GPU) < eps)
std::cout << "Test PASSED.\n";
else
std::cout << "Test FAILED.\n";
// Освободим память.
delete [] partial_sums;
cudaFree(partial_sums_gpu);
return 0;
}