Từ online tài liệu:cudaMemset() - nó có đặt byte hoặc số nguyên không?
cudaError_t cudaMemset (void * devPtr, int value, size_t count)
Điền vào các ô các byte đếm đầu tiên của vùng nhớ được trỏ đến bởi devPtr với hằng số giá trị giá trị byte.
Tham số: devPtr - Con trỏ trỏ tới bộ nhớ điện thoại giá trị - giá trị để đặt cho mỗi byte của quy định bộ nhớ đếm - Kích thước trong byte thiết
Sự mô tả này không xuất hiện là đúng như:
int *dJunk;
cudaMalloc((void**)&dJunk, 32*(sizeof(int));
cudaMemset(dJunk, 0x12, 32);
sẽ đặt tất cả 32 số nguyên thành 0x12, không phải 0x12121212. (Int vs Byte)
Mô tả nói về việc thiết lập byte. Đếm và Giá trị được mô tả theo byte. Số lượng thông báo là loại size_t và giá trị là loại int. tức là Đặt kích thước byte thành giá trị int.
cudaMemset() không được đề cập trong hướng dẫn nâng cao. Tôi phải giả định hành vi mà tôi thấy là chính xác và tài liệu đó không tốt.
Có nguồn tài liệu nào tốt hơn không? (Ở đâu?)
Các loại khác có được hỗ trợ không? tức là float *dJunk;
có hoạt động không? Khác?
Có, tôi đã xem kết quả của mình không chính xác. Hãy thử thay đổi cudaMemset (dJunk, 0x12, 32); tới cudaMemset (dJunk, 0x1234, 32); Nó xuất hiện cudaError_t cudaMemset (void * devPtr, int value, size_t count) nên là: cudaError_t cudaMemset (void * devPtr, giá trị char, size_t count) tức là VALUE là byte kích thước. Nó là một chút sai lầm để sử dụng kích thước int. (Chỉ cần chỉ ra điều đó.) – Doug
@Doug: Tôi vẫn không chắc điểm của bạn là gì. Các tài liệu rất bạn trích dẫn trong câu hỏi của bạn rõ ràng nói rằng 'giá trị' được coi là một giá trị byte. Hàm này hoạt động giống với bộ nhớ C chuẩn, khác biệt duy nhất là giá trị byte được truyền trong LSB của từ 32 bit. Ngẫu nhiên, có một chức năng ghi nhớ 32 bit thực sự trong API trình điều khiển nếu đó là những gì bạn đang thực sự tìm kiếm. – talonmies