2013-07-04 29 views
5

Tôi nên bao gồm tiêu đề CUDA nào trong chương trình nếu tôi muốn làm việc với số phức và thực hiện các phép toán đơn giản (cộng và phép nhân) với các số phức kép này trong chính hạt nhân?CUDA - Cách làm việc với các số phức?

Trong C++, tôi có thể nhân một số không đổi với số phức kép> miễn là chúng đều là hai lần. Tuy nhiên trong CUDA tôi nhận được rất nhiều lỗi khi tôi cố gắng thực hiện các phép toán đơn giản thành phức tạp gấp đôi> s bất cứ khi nào nó không phải với một double phức tạp khác>. Tôi đang thiếu gì?

Cảm ơn bạn!

Trả lời

10

Phần header bao gồm là:

#include <cuComplex.h> 

Trên một CUDA linux tiêu chuẩn cài đặt, nó nằm ở:

/usr/local/cuda/include 

Bạn sẽ cần phải kiểm tra rằng tập tin header và sử dụng các chức năng quy định tại nó để thao tác các số phức trên thiết bị.

Để nhân một (double) số phức tạp bởi một số thực, tôi sẽ:

#include <cuComplex.h> 
... 
double cr = 1; 
double ci = 2; 
double r = 3; 
cuDoubleComplex c = make_cuDoubleComplex(cr, ci); 
cuDoubleComplex result = cuCmul(c, make_cuDoubleComplex(r, 0)); 

EDIT: Với v1.8 Thrust gần đây phát hành vào CUDA 7 RC, nó có thể sử dụng lực đẩy :: phức tạp trong mã lực đẩy hoặc Mã thiết bị CUDA. Điều này giúp bạn có thể viết nhiều hoạt động trông tự nhiên hơn như:

#include <thrust/complex.h> 
... 
thrust::complex<float> c = thrust::complex<float>(2.0f, 5.0f); 
thrust::complex<float> c2 = c*c; 
float r = c2.real(); 
+0

Cảm ơn phản hồi nhanh. Tôi vẫn cố gắng để có được đầu của tôi xung quanh này .. Đây có lẽ là một câu hỏi thực sự ngớ ngẩn nhưng tôi có thể tìm thêm thông tin về chức năng cho các tiêu đề khác nhau ở đâu? Ví dụ, nếu bạn đã không đề cập đến cuCmul, tôi sẽ không thể tìm ra những gì nó thực hiện bằng cách đi qua tệp tham chiếu cuComplex.h trong http://graphics.im.ntu.edu.tw/~bossliaw /nvCuda_doxygen/html/cu_complex_8h.html#ace9e79c66b2bfc9a8adeb1d641b12df4 – user2550888

+0

Tôi không biết rằng có bất kỳ tài liệu bổ sung nào cho tiêu đề đó hoặc có thể là các tiêu đề khác. Dù sao thì tôi cũng không biết. Hàm 'cuCmul' thực sự khá đơn giản, và nhân đôi phép nhân phức tạp như [được định nghĩa trong các nguyên tắc cơ bản của toán học] (http://en.wikipedia.org/wiki/Complex_numbers#Multiplication_and_division). Nếu bạn không thể chuyển đổi công thức đó thành mã C như trong 'cuCmul', thì tôi khuyên bạn nên tìm hiểu thêm về lập trình máy tính cơ bản bao gồm ngôn ngữ C. –

+0

Tôi hiểu hàm cuCmul bây giờ, nhưng điều tôi muốn nói là, nếu bạn không nói với tôi rằng cuCmul là hàm cho phép nhân số phức tạp, tôi sẽ không biết bằng cách xem tham chiếu tệp tiêu đề vì nó cung cấp không có dấu hiệu như những gì nó làm .. Hoặc có lẽ tôi không sử dụng nó đúng như tôi không thể thực sự tìm ra những gì các đồ thị cuộc gọi được hiển thị? Trong tương lai, làm cách nào để biết liệu một hoạt động nào đó mà tôi có thể cần đã có chức năng chưa? – user2550888

Các vấn đề liên quan