Динамическое Выделение Постоянной памяти в CUDA

Если вам нужно отследить количество значащих цифр после запятой, ни float, ни int не являются правильным способом хранения вашего номера. Вместо этого используйте Decimal :

from decimal import Decimal
a = Decimal('0.00')
print(str(a))

... испускает точно 0.00.

Если вы сделаете это, вам, вероятно, следует также прочитать вопрос Значимые цифры в десятичном модуле и соблюдать рекомендации принятого ответа.


Конечно, вы также можете округлить до float или int, а затем переформатировать до нужного количества мест:

a = float('0.00')
print('%.2f' % a)         # for compatibility with ancient Python
print('{:.2f}'.format(a)) # for compatibility with modern Python
print(f"{a:.2f}")         # for compatibility with *very* modern Python

7
задан Ben 7 November 2008 в 05:03
поделиться

2 ответа

Почему Вы только не используете так называемое "упакованное" представление данных? Этот подход позволяет Вам помещать все данные, в которых Вы нуждаетесь в массив байтов с одним размером. Например, если необходимо сохранить

struct data
{
    int nFiles;
    int nNames;
    int* files;
    int* names;
}

Можно просто хранить эти данные в массиве этот путь:

[struct data (7*4=28 bytes)
    [int nFiles=3 (4 bytes)]
    [int nNames=2 (4 bytes)]
    [file0 (4 bytes)]
    [file1 (4 bytes)]
    [file2 (4 bytes)]
    [name0 (4 bytes)]
    [name1 (4 bytes)]
]
0
ответ дан 7 December 2019 в 10:10
поделиться

Я думаю, что размер постоянной памяти составляет 64 КБ, и вы не можете выделить ее динамически, используя cudaMalloc . Он должен быть объявлен константой, скажем

__constant__ data mydata[100];

. Точно так же вам не нужно его освобождать. Кроме того, вы не должны передавать ссылку на него через указатель, просто обращайтесь к нему как к глобальной переменной. Я попытался сделать то же самое, и это дало мне segfault (в devicemu).

3
ответ дан 7 December 2019 в 10:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: