 
        
        
          Добавил:
          
          
        
        
    
            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;
}
