2012-12-02 35 views
7

Lực đẩy là một trình bao bọc tuyệt vời để bắt đầu lập trình CUDA. Tôi tự hỏi có điều gì để gói gọn NVIDIA CUFFT với lực đẩy hay chúng ta cần phải thực hiện chính mình?Thực hiện Biến đổi Fourier với Lực đẩy

+2

Tại sao không sử dụng ArrayFire có mọi thứ trong một thư viện? –

+0

Một bài viết khác về cách tính toán sản phẩm bên ngoài bằng cách sử dụng lực đẩy .. Tôi hy vọng điều tiếp theo sẽ là cách thực hiện thuật toán Dijkstra trong lực đẩy)) tại sao mọi người tiếp tục hỏi điều đó? –

+0

Tôi cũng muốn sử dụng ArrayFire và thực sự tôi phải sử dụng để so sánh với các thư viện khác. Có cách tiếp cận nào không? –

Trả lời

6

Đây là câu trả lời rất muộn, chỉ để xóa câu hỏi này khỏi danh sách chưa được trả lời.

Sử dụng cuFFT với lực đẩy nên rất đơn giản và điều duy nhất cần làm là để đúc thrust::device_vector thành con trỏ thô. Một ví dụ rất đơn giản được báo cáo bên dưới:

#include <iostream> 
#include <cufft.h> 
#include <stdlib.h> 
#include <thrust/host_vector.h> 
#include <thrust/device_vector.h> 
#include <thrust/generate.h> 
#include <thrust/transform.h> 

int main(void){ 

    int N=4; 

    // --- Setting up input device vector  
    thrust::device_vector<cuFloatComplex> d_in(N,make_cuComplex(1.f,2.f)), d_out(N); 

    cufftHandle plan; 
    cufftPlan1d(&plan, N, CUFFT_C2C, 1); 

    cufftExecC2C(plan, thrust::raw_pointer_cast(d_in.data()), thrust::raw_pointer_cast(d_out.data()), CUFFT_FORWARD); 

    // --- Setting up output host vector  
    thrust::host_vector<cuFloatComplex> h_out(d_out); 

    for (int i=0; i<N; i++) printf("Element #%i; Real part = %f; Imaginary part: %f\n",i,h_out[i].x,h_out[i].y); 

    getchar(); 
} 
Các vấn đề liên quan