Я не думаю, что это та же проблема, о которой сообщалось здесь:
Привязанная текстура CUDA читает ноль
Выборка 1D-текстуры CUDA всегда возвращает 0
В моем приложении CUDA я заметил, что tex1Dfetch не возвращает ожидаемое значение после определенного индекса в буфере. Первоначальное наблюдение в приложении заключалось в том, что значение с индексом 0 можно было прочитать правильно, но с номером 12705625 прочитанное значение было 0. Для исследования этого вопроса я создал небольшую тестовую программу, приведенную ниже. Результаты меня немного озадачивают. Я пытаюсь выяснить, по какому индексу значения больше не читаются правильно. Но по мере изменения значения arraySize меняется и «firstBadIndex». Даже при arraySize =2 второе значение читается неправильно! По мере увеличения arraySize размер firstBadIndex становится больше. Это происходит при привязке к массивам float, float2 или float4. Если вместо этого данные считываются из буфера устройства (поменяйте местами закомментированные строки в FetchTextureData), то все в порядке. Это использование CUDA 6.5 на Tesla c2075.
Спасибо за любую информацию или совет.
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include
#define FLOATTYPE float4
texture texture1D;
const unsigned int arraySize = 1000;
FLOATTYPE* host;
FLOATTYPE* device;
FLOATTYPE* dTemp;
FLOATTYPE hTemp[1];
__global__ void FetchTextureData(FLOATTYPE* data,FLOATTYPE* arr,int idx)
{
data[0] = tex1Dfetch(texture1D, idx);
//data[0] = arr[idx];
}
bool GetTextureValues(int idx){
FetchTextureData(dTemp,device,idx);
// copy to the host
cudaError_t err = cudaMemcpy(hTemp,dTemp,sizeof(FLOATTYPE),cudaMemcpyDeviceToHost);
if (err != cudaSuccess) {
throw "cudaMemcpy failed!";
}
if (cudaDeviceSynchronize() != cudaSuccess) {
throw "cudaDeviceSynchronize failed!";
}
return hTemp[0].x == 1.0f;
}
int main()
{
try{
host = new FLOATTYPE[arraySize];
cudaError_t err = cudaMalloc((void**)&device,sizeof(FLOATTYPE) * arraySize);
cudaError_t err1 = cudaMalloc((void**)&dTemp,sizeof(FLOATTYPE));
if (err != cudaSuccess || err1 != cudaSuccess) {
throw "cudaMalloc failed!";
}
// make some host data
for(unsigned int i=0; i
Подробнее здесь: https://stackoverflow.com/questions/315 ... eturning-0
Tex1Dfetch неожиданно возвращает 0 ⇐ C++
Программы на C++. Форум разработчиков
1737069474
Anonymous
Я не думаю, что это та же проблема, о которой сообщалось здесь:
Привязанная текстура CUDA читает ноль
Выборка 1D-текстуры CUDA всегда возвращает 0
В моем приложении CUDA я заметил, что tex1Dfetch не возвращает ожидаемое значение после определенного индекса в буфере. Первоначальное наблюдение в приложении заключалось в том, что значение с индексом 0 можно было прочитать правильно, но с номером 12705625 прочитанное значение было 0. Для исследования этого вопроса я создал небольшую тестовую программу, приведенную ниже. Результаты меня немного озадачивают. Я пытаюсь выяснить, по какому индексу значения больше не читаются правильно. Но по мере изменения значения arraySize меняется и «firstBadIndex». Даже при arraySize =2 второе значение читается неправильно! По мере увеличения arraySize размер firstBadIndex становится больше. Это происходит при привязке к массивам float, float2 или float4. Если вместо этого данные считываются из буфера устройства (поменяйте местами закомментированные строки в FetchTextureData), то все в порядке. Это использование CUDA 6.5 на Tesla c2075.
Спасибо за любую информацию или совет.
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include
#define FLOATTYPE float4
texture texture1D;
const unsigned int arraySize = 1000;
FLOATTYPE* host;
FLOATTYPE* device;
FLOATTYPE* dTemp;
FLOATTYPE hTemp[1];
__global__ void FetchTextureData(FLOATTYPE* data,FLOATTYPE* arr,int idx)
{
data[0] = tex1Dfetch(texture1D, idx);
//data[0] = arr[idx];
}
bool GetTextureValues(int idx){
FetchTextureData(dTemp,device,idx);
// copy to the host
cudaError_t err = cudaMemcpy(hTemp,dTemp,sizeof(FLOATTYPE),cudaMemcpyDeviceToHost);
if (err != cudaSuccess) {
throw "cudaMemcpy failed!";
}
if (cudaDeviceSynchronize() != cudaSuccess) {
throw "cudaDeviceSynchronize failed!";
}
return hTemp[0].x == 1.0f;
}
int main()
{
try{
host = new FLOATTYPE[arraySize];
cudaError_t err = cudaMalloc((void**)&device,sizeof(FLOATTYPE) * arraySize);
cudaError_t err1 = cudaMalloc((void**)&dTemp,sizeof(FLOATTYPE));
if (err != cudaSuccess || err1 != cudaSuccess) {
throw "cudaMalloc failed!";
}
// make some host data
for(unsigned int i=0; i
Подробнее здесь: [url]https://stackoverflow.com/questions/31508502/tex1dfetch-unexpectedly-returning-0[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия