2015-04-30 23 views
7

Tôi thấy trong tài liệu CUDA Math API có chức năng cho các hoạt động min/max chính xác đơn và đôi (ví dụ: fminf()). Tôi cho rằng đây là những tối ưu hóa cao, vv Có vẻ như không có chức năng như thế này cho số nguyên. Điều này có đúng không? Có một lý do cho điều đó?Số nguyên tối thiểu/tối đa trong CUDA

Trả lời

10

Có các chức năng thiết bị tối thiểu/tối đa cho các số nguyên, nhưng tất cả đều được gọi với quá tải max(). Nhìn vào device_functions.hpp:

__DEVICE_FUNCTIONS_STATIC_DECL__ int max(int x, int y) 
{ 
    return __nv_max(x, y); 
} 

__DEVICE_FUNCTIONS_STATIC_DECL__ unsigned int umax(unsigned int x, unsigned int y) 
{ 
    return __nv_umax(x, y); 
} 

__DEVICE_FUNCTIONS_STATIC_DECL__ long long llmax(long long x, long long y) 
{ 
    return __nv_llmax(x, y); 
} 

__DEVICE_FUNCTIONS_STATIC_DECL__ unsigned long long ullmax(unsigned long long x, 
               unsigned long long y) 
{ 
    return __nv_ullmax(x, y); 
} 

Họ đang không được liệt kê trong phần Integer Intinsics bởi vì trong math_functions.hpp các max chức năng bị quá tải để gọi các chức năng này cho bạn. Các hàm __nv* được ghi lại trong device_function_decls.hpp.

+0

Cảm ơn! Tôi nên thử nó. =) – Phonon

+3

Đối với những gì nó có giá trị các bản đồ nội tại thẳng hướng dẫn phần cứng. Nếu bạn tháo rời tệp nhị phân của mình bằng 'cuobjdump --dump-sass', bạn sẽ tìm thấy các lệnh như' IMNMX' = "số nguyên tối thiểu hoặc tối đa" (một vị ngữ chọn có thực hiện 'min()' hoặc 'max()') – njuffa

+0

hay không Đối với tôi, mã với '__nv_min' không biên dịch. Khả năng tính toán nào yêu cầu? –

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